From 8b5642604178dec358a715d3fc775159dce12810 Mon Sep 17 00:00:00 2001 From: ToneseekerMusical <105748910+ToneseekerMusical@users.noreply.github.com> Date: Sat, 7 Feb 2026 17:17:57 -0500 Subject: [PATCH 1/3] Updates all packages Updates to all packages, added version overrides for type-fest and ws to fix breaking changes to type-fest and ws dependent packages. Added additional information to "lineComment" property in language-configuration.json. LanguageClient has been replaced with BaseLanguageClient in extension.ts. Replaced { light: string | vscode.Uri; dark: string | vscode.Uri;} with vscode.IconPath in searchTree.ts, icons.ts, and projectTree.ts. Added encoding: string property to ReadOnlyDocument class in readOnlyDocument.ts Fixed an always true guard clause in getLispContainerTypeName function in lispContainerServices.ts added platform property to runTests property as recent versions of VSCode are only available in win32-x64-archive. typed assert as Chai.Assert in AutoIndent.test.ts and Formatter.test.ts Changed input into endOfLineEnum2String from 5 to 2 to coincide with a change of CRLF value in EndOfLine enum provided by @Types/vscode Changed BaseEncodingOptions to EncodingOption due to change in @Types/node --- .../smartBracket/language-configuration.json | 2 +- extension/src/extension.ts | 18 +- .../src/project/findReplace/searchTree.ts | 8 +- extension/src/project/icons.ts | 2 +- extension/src/project/projectTree.ts | 14 +- extension/src/project/readOnlyDocument.ts | 33 +- .../src/services/lispContainerServices.ts | 18 +- extension/src/test/runTest.ts | 12 +- extension/src/test/suite/AutoIndent.test.ts | 134 +- extension/src/test/suite/Formatter.test.ts | 30 +- .../src/test/suite/parsing.shared.test.ts | 16 +- .../suite/providers.hoverProvider.test.ts | 126 +- package-lock.json | 24066 +++++++++------- package.json | 1352 +- tsconfig.json | 4 +- 15 files changed, 15304 insertions(+), 10531 deletions(-) diff --git a/extension/smartBracket/language-configuration.json b/extension/smartBracket/language-configuration.json index a335c9f2..2893a666 100644 --- a/extension/smartBracket/language-configuration.json +++ b/extension/smartBracket/language-configuration.json @@ -1,7 +1,7 @@ { "comments": { "blockComment": [ ";|", "|;" ], - "lineComment": ";", + "lineComment": { "comment": ";" } }, "brackets": [ ["(", ")"], diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 41f6e002..98b21a7b 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -3,7 +3,7 @@ import * as vscode from 'vscode'; import { - LanguageClient + BaseLanguageClient } from 'vscode-languageclient'; @@ -23,10 +23,10 @@ import * as nls from 'vscode-nls'; // The example uses the file message format. const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); -let client: LanguageClient; +let client: BaseLanguageClient; export function activate(context: vscode.ExtensionContext) { - AutoLispExt.initialize(context); + AutoLispExt.initialize(context); //----------------------------------------------------------- //1. lisp autoformat //----------------------------------------------------------- @@ -51,14 +51,10 @@ export function activate(context: vscode.ExtensionContext) { //4. debug adapter DebugProviders.registerLispDebugProviders(context); - //----------------------------------------------------------- - //5. register the handler to uri scheme: vscode://autodesk.autolispext?...... - vscode.window.registerUriHandler({ - handleUri(uri: vscode.Uri) { - onUriRequested(uri); - } - }); - + //----------------------------------------------------------- + //5. register the handler to uri scheme: vscode://autodesk.autolispext?...... + vscode.window.registerUriHandler({ handleUri(uri: vscode.Uri) { onUriRequested(uri) } }); + //----------------------------------------------------------- //6. register commands registerProjectCommands(context); diff --git a/extension/src/project/findReplace/searchTree.ts b/extension/src/project/findReplace/searchTree.ts index 793d6aae..b4459324 100644 --- a/extension/src/project/findReplace/searchTree.ts +++ b/extension/src/project/findReplace/searchTree.ts @@ -1,7 +1,7 @@ import { DisplayNode, ProjectNode } from '../projectTree'; import { IconUris } from '../icons'; import { SearchOption } from './options'; -import {getTreeItemTitle } from '../projectutil' +import { getTreeItemTitle } from '../projectutil' import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; @@ -25,7 +25,7 @@ export class FileNode implements DisplayNode { return this.filePath + "\r\n" + this.errorInReplace; } - getIconUri(): vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri; } { + getIconUri(): vscode.Uri | vscode.IconPath { if (!this.errorInReplace) return IconUris.lspFile(); @@ -78,7 +78,7 @@ export class FindingNode implements DisplayNode { return tooltip; } - getIconUri(): vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri; } { + getIconUri(): vscode.Uri | vscode.IconPath { return null; //no icon for a single find result } @@ -142,7 +142,7 @@ export class SummaryNode implements DisplayNode { return this.tooltip; } - getIconUri(): vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri; } { + getIconUri(): vscode.Uri | vscode.IconPath { return null; } diff --git a/extension/src/project/icons.ts b/extension/src/project/icons.ts index 49236197..2152df94 100644 --- a/extension/src/project/icons.ts +++ b/extension/src/project/icons.ts @@ -25,7 +25,7 @@ export class IconUris { return IconUris.extRootDir; } - public static lspFile(): { light: string | vscode.Uri; dark: string | vscode.Uri } { + public static lspFile(): vscode.IconPath { if(IconUris.lspFileUri == undefined) { IconUris.lspFileUri = { "light" : vscode.Uri.file(path.join(IconUris.extRootDir, 'images', 'light', 'LISP_file.svg')), diff --git a/extension/src/project/projectTree.ts b/extension/src/project/projectTree.ts index b601df16..b572855c 100644 --- a/extension/src/project/projectTree.ts +++ b/extension/src/project/projectTree.ts @@ -3,7 +3,7 @@ import { ProjectDefinition } from './projectDefinition'; import * as vscode from 'vscode'; import * as path from 'path'; import { pathEqual } from '../utils'; -import {getTreeItemTitle } from './projectutil' +import { getTreeItemTitle } from './projectutil' import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); @@ -12,7 +12,7 @@ const fs = require('fs'); export interface DisplayNode { getDisplayText: () => string; getTooltip: () => string; - getIconUri: () => vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri }; + getIconUri: () => vscode.Uri | vscode.IconPath; getNodeType: () => string; getCollapsibleState: () => vscode.TreeItemCollapsibleState; setCollapsibleState(state: vscode.TreeItemCollapsibleState): void; @@ -56,7 +56,7 @@ export class ProjectNode implements DisplayNode { this.collapsibleState = state; } - getIconUri(): vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri } { + getIconUri(): vscode.Uri | vscode.IconPath { return null;//currently we don't provide icon for project node } } @@ -91,7 +91,7 @@ export class LspFileNode implements DisplayNode { setCollapsibleState() { } - getIconUri(): vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri } { + getIconUri(): vscode.Uri | vscode.IconPath { this.fileExists = fs.existsSync(this.filePath); if (this.fileExists) return IconUris.lspFile(); @@ -100,7 +100,7 @@ export class LspFileNode implements DisplayNode { } } -export class ProjectTreeProvider implements vscode.TreeDataProvider{ +export class ProjectTreeProvider implements vscode.TreeDataProvider { private rootNode: ProjectNode = null; private treeControl: vscode.TreeView = null; @@ -221,7 +221,7 @@ export function hasFileWithSameName(fileName: string, root: ProjectNode): boolea for (let fileNode of root.sourceFiles) { let lowerRight = path.basename(fileNode.filePath).toLocaleLowerCase(); - if(lowerLeft == lowerRight) + if (lowerLeft == lowerRight) return true; } @@ -236,5 +236,5 @@ export function addLispFileNode2ProjectTree(root: ProjectNode, fileName: string, fileNode.filePath = fileName; fileNode.fileExists = fs.existsSync(fileName); fileNode.rawFilePath = rawFilePath; - root.sourceFiles.push(fileNode); + root.sourceFiles.push(fileNode); } diff --git a/extension/src/project/readOnlyDocument.ts b/extension/src/project/readOnlyDocument.ts index f3c87320..0b388797 100644 --- a/extension/src/project/readOnlyDocument.ts +++ b/extension/src/project/readOnlyDocument.ts @@ -9,7 +9,7 @@ import * as DclParser from '../parsing/dclParser'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export class ReadonlyLine implements vscode.TextLine { - private constructor() {} + private constructor() { } static Create(txt: string, line: number): ReadonlyLine { let ret = new ReadonlyLine(); @@ -55,7 +55,7 @@ export class ReadonlyDocument implements vscode.TextDocument { if (fs.existsSync(filePath) === false || langId === "") { return null; } - + let ret = new ReadonlyDocument(filePath); let data = fs.readFileSync(filePath).toString(); @@ -66,7 +66,7 @@ export class ReadonlyDocument implements vscode.TextDocument { // Example Use Cases // Identify global variables from fragments of AutoLisp code // Currently in use to save/create PRJ files - static createMemoryDocument(fileContent: string, languageId: string): ReadonlyDocument { + static createMemoryDocument(fileContent: string, languageId: string): ReadonlyDocument { let ret = new ReadonlyDocument(''); ret.initialize(fileContent, languageId); return ret; @@ -74,13 +74,13 @@ export class ReadonlyDocument implements vscode.TextDocument { // Added this to essentially cast standard TextDocument's to a ROD type enabling work to be done with enhanced standardized/functionality // Related to to discussion issue#30 - static getMemoryDocument(doc: vscode.TextDocument): ReadonlyDocument { + static getMemoryDocument(doc: vscode.TextDocument): ReadonlyDocument { let ret = new ReadonlyDocument(''); ret.eol = vscode.EndOfLine.CRLF; ret.eolLength = 2; ret.lineCount = doc.lineCount; ret.languageId = DocumentServices.getSelectorType(doc.fileName); - ret.lines = []; + ret.lines = []; ret.fileName = doc.fileName; for (let i = 0; i < doc.lineCount; i++) { ret.lines.push(doc.lineAt(i).text); @@ -99,18 +99,16 @@ export class ReadonlyDocument implements vscode.TextDocument { if (this.fileContent.length === 0) { this.lineCount = 0; this.lines = []; - } - else { + } else { this.lines = this.fileContent.split('\r\n'); this.lineCount = this.lines.length; } } - fileContent: string; lines: string[]; eolLength: number; - private _documentContainer: LispContainer|DclTile; // Added to drastically reduces complexity in other places. + private _documentContainer: LispContainer | DclTile;// Added to drastically reduces complexity in other places. //#region implementing vscode.TextDocument @@ -121,7 +119,7 @@ export class ReadonlyDocument implements vscode.TextDocument { version: number; isDirty: boolean; isClosed: boolean; - + encoding: string; eol: vscode.EndOfLine; lineCount: number; @@ -135,8 +133,7 @@ export class ReadonlyDocument implements vscode.TextDocument { let line = -1; if (typeof position === 'number') { line = position; - } - else { + } else { line = position.line; } @@ -174,7 +171,7 @@ export class ReadonlyDocument implements vscode.TextDocument { for (let line = 0; line < this.lineCount; line++) { let lineText = this.lines[line]; - if ((charCounted + lineText.length) >= offset) { + if (charCounted + lineText.length >= offset) { //the offset is inside current line let charNum = offset - charCounted; @@ -183,7 +180,7 @@ export class ReadonlyDocument implements vscode.TextDocument { //now, the offset is outside current line - if (line === (this.lineCount - 1)) { + if (line === this.lineCount - 1) { //current line is the end of all, so the given position is invalid return new vscode.Position(line, lineText.length);//put the "cursor" after the last char } @@ -237,19 +234,17 @@ export class ReadonlyDocument implements vscode.TextDocument { } //#endregion - equal(doc: vscode.TextDocument): boolean { return this.fileName.toUpperCase().replace(/\\/g, '/') === doc.fileName.toUpperCase().replace(/\\/g, '/') - && this.fileContent === doc.getText().replace(/\r\n|\r|\n/g, '\r\n'); //.split('\r\n').join('\n').split('\n').join('\r\n'); + && this.fileContent === doc.getText().replace(/\r\n|\r|\n/g, '\r\n');//.split('\r\n').join('\n').split('\n').join('\r\n'); } - get documentContainer(): LispContainer { if (this.languageId !== DocumentServices.Selectors.LSP) { return null; } - return (this._documentContainer instanceof LispContainer) + return this._documentContainer instanceof LispContainer ? this._documentContainer : this._documentContainer = LispParser.getDocumentContainer(this.fileContent); } @@ -259,7 +254,7 @@ export class ReadonlyDocument implements vscode.TextDocument { return null; } - return (this._documentContainer instanceof DclTile) + return this._documentContainer instanceof DclTile ? this._documentContainer : this._documentContainer = DclParser.getDocumentTileContainer(this.fileContent); } diff --git a/extension/src/services/lispContainerServices.ts b/extension/src/services/lispContainerServices.ts index e0b5a6f5..9ddfce2f 100644 --- a/extension/src/services/lispContainerServices.ts +++ b/extension/src/services/lispContainerServices.ts @@ -7,26 +7,26 @@ export namespace LispContainerServices { export function getLispContainerTypeName(container: ILispFragment): string { // initialized to 0 if it is a Document Container or 1 if it is a child LispContainer // this is because sub-containers should have least 1 ignored starting character - for (let i = container.body?.userSymbols ? 0 : 1; i < container.body?.atoms.length ?? -1; i++) { + for (let i = container.body?.userSymbols ? 0 : 1; i < container.body?.atoms.length ? -1 : 0; i++) { const atom = container.body.atoms[i]; if (atom.isComment() || atom.isLeftParen() || atom.symbol === '\'') { continue; - } - return getAtomicTypeNameValue(atom); + } + return getAtomicTypeNameValue(atom); } return '*unknown*'; } - + function getAtomicTypeNameValue(atom: ILispFragment): string { // Note: there is no handling for leading single quotes because LispContainers // are designed to individually atomize all single quote characters - if (atom.symbol.length === 0) { // Should cover rogue LispContainer inputs - return '*invalid*'; - } else if (atom.isPrimitive()) { + if (atom.symbol.length === 0) { // Should cover rogue LispContainer inputs + return '*invalid*'; + } else if (atom.isPrimitive()) { return '*primitive*'; } else { - return atom.symbol.toLowerCase(); - } + return atom.symbol.toLowerCase(); + } } diff --git a/extension/src/test/runTest.ts b/extension/src/test/runTest.ts index c16319f0..c39b11a9 100644 --- a/extension/src/test/runTest.ts +++ b/extension/src/test/runTest.ts @@ -7,15 +7,15 @@ async function main() { // The folder containing the Extension Manifest package.json // Passed to `--extensionDevelopmentPath` const extensionDevelopmentPath = path.resolve(__dirname, '../../'); - let extensionTestsPath =''; + let extensionTestsPath = ''; // The path to the extension test or code coverage script // Passed to --extensionTestsPath if (process.argv[2] === '--codecoverage') { - extensionTestsPath = path.resolve(__dirname, './suite/codeCoverage'); + extensionTestsPath = path.resolve(__dirname, './suite/codeCoverage'); } else { extensionTestsPath = path.resolve(__dirname, './suite/index'); } - + const workSpace = path.resolve(__dirname, '../../extension/src/test/SourceFile/renaming'); //const wsFile = path.resolve(workSpace, 'comments.lsp'); @@ -24,12 +24,14 @@ async function main() { // Download minimum VSCode version defined by our package.json, unzip it and run the integration test environment // aside from testing against our package.json claims, it also avoids random vscode installations bloating dev environments - await runTests({ + await runTests({ version: process.env.npm_package_engines_vscode.slice(1), + platform: + process.platform === "win32" ? "win32-x64-archive" : process.platform, extensionDevelopmentPath, extensionTestsPath, launchArgs: [workSpace, '--disable-extensions'] - }); + }); } catch (err) { console.error('Failed to run tests'); process.exit(1); diff --git a/extension/src/test/suite/AutoIndent.test.ts b/extension/src/test/suite/AutoIndent.test.ts index 37fe44b3..30965111 100644 --- a/extension/src/test/suite/AutoIndent.test.ts +++ b/extension/src/test/suite/AutoIndent.test.ts @@ -2,9 +2,9 @@ import * as chai from "chai"; import * as vscode from "vscode"; import * as fs from "fs"; import * as path from "path"; -import {findContainers,getIndentation,isCursorInDoubleQuoteExpr} from "../../format/autoIndent"; +import { findContainers, getIndentation, isCursorInDoubleQuoteExpr } from "../../format/autoIndent"; import { ReadonlyDocument } from "../../project/readOnlyDocument"; -let assert = chai.assert; +let assert: Chai.Assert = chai.assert; const testDir = path.join(__dirname + "/../../../extension/src/test"); const outputDir = path.join(testDir + "/OutputFile"); let indentTestFile = path.join(testDir + "/SourceFile/autoIndentTestFile.lsp"); @@ -25,8 +25,8 @@ suite("Autoindent Tests", function () { let fn = "defun enter"; try { let cursorPos2d = new vscode.Position(0, 28); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -37,8 +37,8 @@ suite("Autoindent Tests", function () { let fn = "setq enter"; try { let cursorPos2d = new vscode.Position(1, 13); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); // let containerParens: ElementRange = containerElement.containerParens[0]; assert.isTrue(lineIndentSpace == 2); } catch (err) { @@ -50,8 +50,8 @@ suite("Autoindent Tests", function () { let fn = "cons enter"; try { let cursorPos2d = new vscode.Position(12, 36); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 14); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -62,8 +62,8 @@ suite("Autoindent Tests", function () { let fn = "mapcar enter"; try { let cursorPos2d = new vscode.Position(7, 20); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 14); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -74,8 +74,8 @@ suite("Autoindent Tests", function () { let fn = "reverse enter"; try { let cursorPos2d = new vscode.Position(6, 25); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 18); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -86,8 +86,8 @@ suite("Autoindent Tests", function () { let fn = "lambda enter"; try { let cursorPos2d = new vscode.Position(8, 30); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 17); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -98,8 +98,8 @@ suite("Autoindent Tests", function () { let fn = "while enter"; try { let cursorPos2d = new vscode.Position(16, 25); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -110,8 +110,8 @@ suite("Autoindent Tests", function () { let fn = "repeat enter"; try { let cursorPos2d = new vscode.Position(17, 14); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -122,8 +122,8 @@ suite("Autoindent Tests", function () { let fn = "foreach enter"; try { let cursorPos2d = new vscode.Position(21, 19); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -134,8 +134,8 @@ suite("Autoindent Tests", function () { let fn = "if enter"; try { let cursorPos2d = new vscode.Position(22, 18); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -146,8 +146,8 @@ suite("Autoindent Tests", function () { let fn = "progn enter"; try { let cursorPos2d = new vscode.Position(25, 17); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 12); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -158,8 +158,8 @@ suite("Autoindent Tests", function () { let fn = "cond enter"; try { let cursorPos2d = new vscode.Position(33, 8); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 4); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -170,8 +170,8 @@ suite("Autoindent Tests", function () { let fn = "cursor insider quotes"; try { let cursorPos2d = new vscode.Position(34, 50); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let isInDoubleQuote= isCursorInDoubleQuoteExpr(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let isInDoubleQuote = isCursorInDoubleQuoteExpr(indentTestDoc, cursorPos2d); assert.isTrue(isInDoubleQuote == true); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -182,8 +182,8 @@ suite("Autoindent Tests", function () { let fn = "block comment enter"; try { let cursorPos2d = new vscode.Position(39, 35); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 5); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -194,8 +194,8 @@ suite("Autoindent Tests", function () { let fn = "emtpy line enter"; try { let cursorPos2d = new vscode.Position(20, 2); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -206,8 +206,8 @@ suite("Autoindent Tests", function () { let fn = "NO operator enter"; try { let cursorPos2d = new vscode.Position(43, 1); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 1); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -218,8 +218,8 @@ suite("Autoindent Tests", function () { let fn = "list quote enter"; try { let cursorPos2d = new vscode.Position(47, 11); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 10); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -230,8 +230,8 @@ suite("Autoindent Tests", function () { let fn = "multiple setq enter"; try { let cursorPos2d = new vscode.Position(49, 9); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -242,8 +242,8 @@ suite("Autoindent Tests", function () { let fn = "text with tab enter"; try { let cursorPos2d = new vscode.Position(52, 34); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 10); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -254,8 +254,8 @@ suite("Autoindent Tests", function () { let fn = "after defun before fun name enter"; try { let cursorPos2d = new vscode.Position(54, 7); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 7); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -266,8 +266,8 @@ suite("Autoindent Tests", function () { let fn = "after fun name before argment enter"; try { let cursorPos2d = new vscode.Position(55, 11); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 7); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -278,8 +278,8 @@ suite("Autoindent Tests", function () { let fn = "after fun name missing argument enter"; try { let cursorPos2d = new vscode.Position(56, 11); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 7); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -290,34 +290,34 @@ suite("Autoindent Tests", function () { let fn = "inside cons enter"; try { let cursorPos2d = new vscode.Position(9, 31); - replaceDocWithEnter(indentTestFile,cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc,cursorPos2d); + replaceDocWithEnter(indentTestFile, cursorPos2d); + let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); assert.isTrue(lineIndentSpace == 23); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); } }); -function replaceDocWithEnter(filepath : string, cursorPos2d : vscode.Position){ - let doc = ReadonlyDocument.open(filepath); - let startPt = new vscode.Position(0,0); - let selRange = new vscode.Selection(startPt,cursorPos2d); - //insert \n to cursor position - let newText = doc.getText().replace(doc.getText(selRange),doc.getText(selRange) + "\n"); - try { - fs.writeFileSync(newIndentTestFile,newText); + function replaceDocWithEnter(filepath: string, cursorPos2d: vscode.Position) { + let doc = ReadonlyDocument.open(filepath); + let startPt = new vscode.Position(0, 0); + let selRange = new vscode.Selection(startPt, cursorPos2d); + //insert \n to cursor position + let newText = doc.getText().replace(doc.getText(selRange), doc.getText(selRange) + "\n"); + try { + fs.writeFileSync(newIndentTestFile, newText); indentTestDoc = ReadonlyDocument.open(newIndentTestFile); - } catch (error) { - console.log(error); + } catch (error) { + console.log(error); + } } -} -function getIndent(doc: vscode.TextDocument,cursorPos2d: vscode.Position) { - try { - let containerElement = findContainers(doc,cursorPos2d); - let lineIndentSpace = getIndentation(doc,containerElement,cursorPos2d); - return lineIndentSpace.length; - } catch (error) { - console.log(error); + function getIndent(doc: vscode.TextDocument, cursorPos2d: vscode.Position) { + try { + let containerElement = findContainers(doc, cursorPos2d); + let lineIndentSpace = getIndentation(doc, containerElement, cursorPos2d); + return lineIndentSpace.length; + } catch (error) { + console.log(error); + } } -} }); diff --git a/extension/src/test/suite/Formatter.test.ts b/extension/src/test/suite/Formatter.test.ts index e83676e7..1dd784fd 100644 --- a/extension/src/test/suite/Formatter.test.ts +++ b/extension/src/test/suite/Formatter.test.ts @@ -8,7 +8,7 @@ import { ImportMock } from "ts-mock-imports"; import { AutoLispExt } from "../../context"; import * as vscode from 'vscode'; -let assert = chai.assert; +let assert: Chai.Assert = chai.assert; let testDir = path.join(__dirname + "/../../../extension/src/test"); const outputDir = path.join(testDir + "/OutputFile"); @@ -74,7 +74,7 @@ suite("Lisp Formatter mock Tests", function () { ); }); - setup(()=>{ + setup(() => { resetDefault(); }); @@ -332,11 +332,11 @@ suite("Lisp Formatter mock Tests", function () { try { const [source, output, baseline] = getFileName(i); const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(4,2); - let active = new vscode.Position(20,4); - let selectedRange = new vscode.Selection(anchor,active); + let anchor = new vscode.Position(4, 2); + let active = new vscode.Position(20, 4); + let selectedRange = new vscode.Selection(anchor, active); let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange),fmt); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); comparefileSync(i, output, fmt, baseline); } catch (err) { assert.fail(`The lisp format test case ${i} failed`); @@ -349,11 +349,11 @@ suite("Lisp Formatter mock Tests", function () { try { const [source, output, baseline] = getFileName(i); const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(11,12); - let active = new vscode.Position(4,4); - let selectedRange = new vscode.Selection(anchor,active); + let anchor = new vscode.Position(11, 12); + let active = new vscode.Position(4, 4); + let selectedRange = new vscode.Selection(anchor, active); let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange),fmt); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); comparefileSync(i, output, fmt, baseline); } catch (err) { assert.fail(`The lisp format test case ${i} failed`); @@ -366,15 +366,15 @@ suite("Lisp Formatter mock Tests", function () { try { const [source, output, baseline] = getFileName(i); const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(7,6); - let active = new vscode.Position(16,2); - let selectedRange = new vscode.Selection(anchor,active); + let anchor = new vscode.Position(7, 6); + let active = new vscode.Position(16, 2); + let selectedRange = new vscode.Selection(anchor, active); setClosedParenInSameLine("same line"); setIndentSpaces(4); setMaxLineChars(65); setLongListFormat("single column"); let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange),fmt); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); comparefileSync(i, output, fmt, baseline); } catch (err) { assert.fail(`The lisp format test case ${i} failed`); @@ -421,7 +421,7 @@ suite("Lisp Formatter mock Tests", function () { LongListFormat ); } - function resetDefault(){ + function resetDefault() { setClosedParenInSameLine('New line with outer indentation'); setMaxLineChars(85); setLongListFormat('Fill to margin'); diff --git a/extension/src/test/suite/parsing.shared.test.ts b/extension/src/test/suite/parsing.shared.test.ts index 032e1041..e22d0142 100644 --- a/extension/src/test/suite/parsing.shared.test.ts +++ b/extension/src/test/suite/parsing.shared.test.ts @@ -11,7 +11,7 @@ suite("Parsing: Shared Tests", function () { let linuxDoc: ReadonlyDocument; suiteSetup(() => { - try { + try { windowsDoc = ReadonlyDocument.createMemoryDocument('(defun someFunc ()\r\n\t(command ".line" pause pause)\r\n\t(princ)\r\n)', 'autolisp'); linuxDoc = ReadonlyDocument.createMemoryDocument('(defun someFunc ()\n\t(command ".line" pause pause)\n\t(princ)\n)', 'autolisp'); } catch (error) { @@ -22,9 +22,9 @@ suite("Parsing: Shared Tests", function () { - test("getEOL() - Using windows CRLF", function () { + test("getEOL() - Using windows CRLF", function () { try { - const sut = getEOL(windowsDoc); + const sut = getEOL(windowsDoc); expect(sut).to.equal('\r\n'); } catch (err) { @@ -32,9 +32,9 @@ suite("Parsing: Shared Tests", function () { } }); - test("getEOL() - Using Linux LF, but expect CRLF conversion", function () { + test("getEOL() - Using Linux LF, but expect CRLF conversion", function () { try { - const sut = getEOL(linuxDoc); + const sut = getEOL(linuxDoc); expect(sut).to.equal('\r\n'); } catch (err) { @@ -44,7 +44,7 @@ suite("Parsing: Shared Tests", function () { - test("endOfLineEnum2String() - forcing coverage of LF", function () { + test("endOfLineEnum2String() - forcing coverage of LF", function () { try { // had to force this since our ReadOnlyDocument auto-converts to CRLF const sut = endOfLineEnum2String(EndOfLine.LF); @@ -55,9 +55,9 @@ suite("Parsing: Shared Tests", function () { } }); - test("endOfLineEnum2String() - forcing non windows & linux edge case", function () { + test("endOfLineEnum2String() - forcing non windows & linux edge case", function () { try { - const sut = endOfLineEnum2String(5); + const sut = endOfLineEnum2String(2); expect(sut).to.equal('\r\n'); } catch (err) { diff --git a/extension/src/test/suite/providers.hoverProvider.test.ts b/extension/src/test/suite/providers.hoverProvider.test.ts index 861b2402..982729c0 100644 --- a/extension/src/test/suite/providers.hoverProvider.test.ts +++ b/extension/src/test/suite/providers.hoverProvider.test.ts @@ -18,12 +18,12 @@ const mdDir = path.resolve(extRootPath, "./extension/src/test/BaselineMDs").repl suite("Providers: Hover", function () { const regenBaselines = false; // Set true to update baselines, but new baselines must be manually reviewed for acceptable output - const fileOps: fs.BaseEncodingOptions = { encoding:'utf8'}; + const fileOps: fs.EncodingOption = { encoding: 'utf8' }; const normalize = (str) => str.replace(/\r*\n/g, '\n'); let lsp: ReadonlyDocument; let dcl: ReadonlyDocument; let mock: ReadonlyDocument; - + suiteSetup(async () => { AutoLispExt.WebHelpLibrary.year = '2021'; @@ -35,49 +35,49 @@ suite("Providers: Hover", function () { test("Generate MD Baselines", function () { try { - if (!regenBaselines){ - return; + if (!regenBaselines) { + return; } - const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7,5)); // LoadGlobalVariables + const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables fs.writeFileSync(`${mdDir}/LoadGlobalVariables.md`, user1['contents'][0].value); - const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10,10)); // C:CText + const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText fs.writeFileSync(`${mdDir}/CCText.md`, user2['contents'][0].value); - const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11,11)); // settextstyle + const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle fs.writeFileSync(`${mdDir}/settextstyle.md`, user3['contents'][0].value); - const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36,10)); // LookBusy - local undocumented + const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented fs.writeFileSync(`${mdDir}/LookBusy.md`, user4['contents'][0].value); - const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17,7)); // expect null + const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null expect(user5).to.equal(null); - - - const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18,18)); // expect null - string + + + const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string expect(primitive1).to.equal(null); - const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31,23)); // expect null - number + const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number expect(primitive2).to.equal(null); - const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6,10)); // expect null - comment in Tile + const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile expect(primitive3).to.equal(null); - const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12,50)); // expect null - string + const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string expect(primitive4).to.equal(null); - const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3,5)); // expect null - comment global + const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global expect(primitive5).to.equal(null); - const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12,8)); // command + const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command fs.writeFileSync(`${mdDir}/command.md`, native1['contents'][0].value); - const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24,10)); // not + const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not fs.writeFileSync(`${mdDir}/not.md`, native2['contents'][0].value); - const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39,10)); // setq + const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq fs.writeFileSync(`${mdDir}/setq.md`, native3['contents'][0].value); - const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39,14)); // expect null + const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null expect(native4).to.equal(null); - const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45,28)); // vla-get-layers + const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers fs.writeFileSync(`${mdDir}/vla-get-layers.md`, native5['contents'][0].value); - const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54,5)); // vla-put-AttachmentPoint (has Enums) + const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) fs.writeFileSync(`${mdDir}/vla-put-attachmentpoint.md`, native6['contents'][0].value); - const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54,54)); // acAttachmentPointTopLeft (is Enum) + const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) fs.writeFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, native7['contents'][0].value); - const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55,25)); // vlax-3d-point (ambiguous function) + const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) fs.writeFileSync(`${mdDir}/vlax-3d-point-1.md`, native8['contents'][0].value); fs.writeFileSync(`${mdDir}/vlax-3d-point-2.md`, native8['contents'][1].value); @@ -86,26 +86,26 @@ suite("Providers: Hover", function () { fs.writeFileSync(`${mdDir}/vlax-3d-point-ACTIVE.md`, active.value); - const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5,17)); // dialog + const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog fs.writeFileSync(`${mdDir}/dialog.md`, tile1['contents'][0].value); - const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11,11)); // boxed_row + const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row fs.writeFileSync(`${mdDir}/boxed_row.md`, tile2['contents'][0].value); - const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44,15)); // button + const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button fs.writeFileSync(`${mdDir}/button.md`, tile3['contents'][0].value); - const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47,10)); // ok_cancel + const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel fs.writeFileSync(`${mdDir}/ok_cancel.md`, tile4['contents'][0].value); - const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7,7)); // label + const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label fs.writeFileSync(`${mdDir}/label.md`, att1['contents'][0].value); - const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11,40)); // children_alignment (has Enum) + const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) fs.writeFileSync(`${mdDir}/children_alignment.md`, att2['contents'][0].value); - const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21,30)); // expect null (horizontal_margin: but doesn't have dedicated help page) + const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) expect(att3).to.equal(null); - const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42,60)); // is_cancel + const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel fs.writeFileSync(`${mdDir}/is_cancel.md`, att4['contents'][0].value); - const dyn = AutoLispExtProvideHover(mock, new vscode.Position(6,2)); // dynamic (memory LSP document to create edge case scenario) + const dyn = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) fs.writeFileSync(`${mdDir}/dynamic.md`, dyn['contents'][0].value); } catch (err) { @@ -116,15 +116,15 @@ suite("Providers: Hover", function () { test("Primitives LSP|DCL - Expect Null", function () { try { - const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18,18)); // expect null - string + const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string expect(primitive1).to.equal(null); - const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31,23)); // expect null - number + const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number expect(primitive2).to.equal(null); - const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6,10)); // expect null - comment in Tile + const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile expect(primitive3).to.equal(null); - const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12,50)); // expect null - string + const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string expect(primitive4).to.equal(null); - const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3,5)); // expect null - comment global + const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global expect(primitive5).to.equal(null); } catch (err) { @@ -135,40 +135,40 @@ suite("Providers: Hover", function () { test("UserDefined LSP - Markdown Verification", function () { try { - const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7,5)); // LoadGlobalVariables + const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables expect(normalize(fs.readFileSync(`${mdDir}/LoadGlobalVariables.md`, fileOps))).to.equal(user1['contents'][0].value); - const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10,10)); // C:CText + const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText expect(normalize(fs.readFileSync(`${mdDir}/CCText.md`, fileOps))).to.equal(user2['contents'][0].value); - const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11,11)); // settextstyle + const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle expect(normalize(fs.readFileSync(`${mdDir}/settextstyle.md`, fileOps))).to.equal(user3['contents'][0].value); - const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36,10)); // LookBusy - local undocumented + const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented expect(normalize(fs.readFileSync(`${mdDir}/LookBusy.md`, fileOps))).to.equal(user4['contents'][0].value); - const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17,7)); // expect null + const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null expect(user5).to.equal(null); } catch (err) { assert.fail(`One or more of the tracked UserDefined markdown representations drifted from expected results\n${err}`); } }); - + test("Native LSP - Markdown Verification", function () { try { - const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12,8)); // command + const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command expect(normalize(fs.readFileSync(`${mdDir}/command.md`, fileOps))).to.equal(native1['contents'][0].value); - const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24,10)); // not + const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not expect(normalize(fs.readFileSync(`${mdDir}/not.md`, fileOps))).to.equal(native2['contents'][0].value); - const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39,10)); // setq + const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq expect(normalize(fs.readFileSync(`${mdDir}/setq.md`, fileOps))).to.equal(native3['contents'][0].value); - const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39,14)); // expect null + const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null expect(native4).to.equal(null); - const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45,28)); // vla-get-layers + const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers expect(normalize(fs.readFileSync(`${mdDir}/vla-get-layers.md`, fileOps))).to.equal(native5['contents'][0].value); - const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54,5)); // vla-put-AttachmentPoint (has Enums) + const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) expect(normalize(fs.readFileSync(`${mdDir}/vla-put-attachmentpoint.md`, fileOps))).to.equal(native6['contents'][0].value); - const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54,54)); // acAttachmentPointTopLeft (is Enum) + const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) expect(normalize(fs.readFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, fileOps))).to.equal(native7['contents'][0].value); - const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55,25)); // vlax-3d-point (ambiguous function) + const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-1.md`, fileOps))).to.equal(native8['contents'][0].value); expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-2.md`, fileOps))).to.equal(native8['contents'][1].value); } @@ -180,13 +180,13 @@ suite("Providers: Hover", function () { test("Native DCL Tiles - Markdown Verification", function () { try { - const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5,17)); // dialog + const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog expect(normalize(fs.readFileSync(`${mdDir}/dialog.md`, fileOps))).to.equal(tile1['contents'][0].value); - const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11,11)); // boxed_row + const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row expect(normalize(fs.readFileSync(`${mdDir}/boxed_row.md`, fileOps))).to.equal(tile2['contents'][0].value); - const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44,15)); // button + const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button expect(normalize(fs.readFileSync(`${mdDir}/button.md`, fileOps))).to.equal(tile3['contents'][0].value); - const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47,10)); // ok_cancel + const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel expect(normalize(fs.readFileSync(`${mdDir}/ok_cancel.md`, fileOps))).to.equal(tile4['contents'][0].value); } catch (err) { @@ -197,13 +197,13 @@ suite("Providers: Hover", function () { test("Native DCL Attributes - Markdown Verification", function () { try { - const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7,7)); // label + const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label expect(normalize(fs.readFileSync(`${mdDir}/label.md`, fileOps))).to.equal(att1['contents'][0].value); - const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11,40)); // children_alignment (has Enum) + const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) expect(normalize(fs.readFileSync(`${mdDir}/children_alignment.md`, fileOps))).to.equal(att2['contents'][0].value); - const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21,30)); // expect null (horizontal_margin: but doesn't have dedicated help page) + const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) expect(att3).to.equal(null); - const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42,60)); // is_cancel + const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel expect(normalize(fs.readFileSync(`${mdDir}/is_cancel.md`, fileOps))).to.equal(att4['contents'][0].value); } catch (err) { @@ -214,7 +214,7 @@ suite("Providers: Hover", function () { test("UserDefined LSP Dynamic - Markdown Verification", function () { try { - const dyn1 = AutoLispExtProvideHover(mock, new vscode.Position(6,2)); // dynamic (memory LSP document to create edge case scenario) + const dyn1 = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) expect(normalize(fs.readFileSync(`${mdDir}/dynamic.md`, fileOps))).to.equal(dyn1['contents'][0].value); } catch (err) { @@ -248,10 +248,10 @@ suite("Providers: Hover", function () { const map = SymbolManager.getSymbolMap(doc); const defs = map.collectAllSymbols().get('settextstyle').filter(x => x.isDefinition); - if (defs.length === 0 || !flatView[defs[0].flatIndex].commentLinks) { + if (defs.length === 0 || !flatView[defs[0].flatIndex].commentLinks) { return; } - + const atom = flatView[defs[0].flatIndex]; const arg = flatView[defs[0].flatIndex + 2]; const userDocs = parseDocumentation(flatView[atom.commentLinks[atom.commentLinks.length - 1]]); diff --git a/package-lock.json b/package-lock.json index 83249778..b033c6f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9651 +1,14417 @@ { - "name": "autolispext", - "version": "1.6.3", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "version": "1.6.3", - "hasInstallScript": true, - "license": "SEE LICENSE IN LICENSE.md", - "dependencies": { - "execa": "0.7.0", - "fs-extra": "^8.1.0", - "jschardet": "2.1.1", - "os-locale": "5.0.0", - "vsce": "^2.5.0", - "vscode-languageclient": "4.2.0", - "vscode-nls": "3.2.5", - "vscode-ripgrep": "1.5.8" - }, - "devDependencies": { - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "@types/chai": "^4.2.15", - "@types/fs-extra": "^8.1.0", - "@types/mocha": "^5.2.7", - "@types/node": "^14.14.6", - "@types/vscode": "^1.57.0", - "chai": "^4.2.0", - "del": "^4.1.1", - "event-stream": "^4.0.1", - "gulp": "^5.0.1", - "gulp-cli": "^3.1.0", - "gulp-filter": "^5.1.0", - "gulp-sourcemaps": "^2.6.5", - "gulp-typescript": "^5.0.1", - "mocha": "^6.1.4", - "mochawesome": "^7.0.1", - "nyc": "^15.1.0", - "run-sequence": "^2.2.1", - "source-map": "0.7.4", - "source-map-resolve": "0.6.0", - "ts-mock-imports": "^1.3.3", - "ts-node": "^9.1.1", - "ts-sinon": "^2.0.1", - "tslint": "5.11.0", - "typescript": "^4.5.5", - "vscode-extension-tester": "^4.2.4", - "vscode-nls-dev": "^3.2.6", - "vscode-test": "^1.4.1" - }, - "engines": { - "vscode": "^1.57.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/compat-data": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.11.tgz", - "integrity": "sha1-nI/lI8IGl5yagbHhL+UMElTxqjU=", - "dev": true - }, - "node_modules/@babel/core": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", - "integrity": "sha1-B94FC72Bk/zYo8J5GMCJBhOpRVk=", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.10", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", - "integrity": "sha1-ExChZ4y4QnwHp1N1DaT4zkQr3Qw=", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", - "integrity": "sha1-aqS7Z44PjCL1jNt5RR0wSURhsJE=", - "dev": true, - "dependencies": { - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", - "integrity": "sha1-7GfkQE9BdQRj5FXMMgP2oy6T/LA=", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", - "integrity": "sha1-QutL2O6mi6tGdRISw1e/7YtA9vE=", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha1-XALRcbTIYVsecWP4iMHIHDCiquo=", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", - "integrity": "sha1-YDS3tRlDCUy0FieEjLIZywK+HSQ=", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", - "integrity": "sha1-hHi8xcrPaqFnKyUcHS3eXM1hpsQ=", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha1-6UML4AuvPoiw4T5vnU6vITY3KwU=", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha1-0fvwEuGnm37rv9xtJwuq+NnrmDE=", - "dev": true - }, - "node_modules/@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha1-/Y4rp0iFM83qxFzBWOnryl48ffg=", - "dev": true, - "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", - "dev": true, - "dependencies": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.6.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "dependencies": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@gulpjs/messages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", - "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@gulpjs/to-absolute-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", - "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0=", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/nyc-config-typescript": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.1.tgz", - "integrity": "sha1-VRcvVmOzY1WGrdIbFNQsqUoWPVg=", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "nyc": ">=15", - "source-map-support": "*", - "ts-node": "*" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha1-5F44TkuOwWvOL9kDr3hFD2v37Jg=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.4.0.tgz", - "integrity": "sha512-QppPM/8l3Mawvh4rn9CNEYIU9bxpXUCRMaX9yUpvBk1nMKusLKpfXGDEKExKaPhLzcn3lzil7pR6rnJ11HgeRQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha1-OALd0hpQqUm2ch3dcto25n5/Gy0=", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha1-KTZ0/MsyYqx4LHqt/eyoaxDHXEA=", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", - "integrity": "sha1-N1pF/m7U6S/KL7kg4AfEgjKmUH8=", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha1-jaXGUwkVZT86Hzj9XxAdjD+AecU=", - "dev": true - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.2.15", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz", - "integrity": "sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ==", - "dev": true - }, - "node_modules/@types/fs-extra": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", - "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/selenium-webdriver": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.19.tgz", - "integrity": "sha512-OFUilxQg+rWL2FMxtmIgCkUDlJB6pskkpvmew7yeXfzzsOBb5rc+y2+DjHm+r3r1ZPPcJefK3DveNSYWGiy68g==", - "dev": true - }, - "node_modules/@types/sinon": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", - "integrity": "sha1-evIC3aUlOoR7URySnYtt2hcFYus=", - "dev": true, - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinon-chai": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.5.tgz", - "integrity": "sha1-3yGuV7EHV9oLJvUSFFwGXyrUXEg=", - "dev": true, - "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", - "integrity": "sha1-OoTPXsMklDkBXhQEm9MWFBm/nq4=", - "dev": true - }, - "node_modules/@types/vscode": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.60.0.tgz", - "integrity": "sha512-wZt3VTmzYrgZ0l/3QmEbCq4KAJ71K3/hmMQ/nfpv84oH8e81KKwPEoQ5v8dNCxfHFVJ1JabHKmCvqdYOoVm1Ow==", - "dev": true - }, - "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha1-mdnSnHs4OR5vQo0ozhNlUfC3fhI=", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "deprecated": "This package is no longer supported.", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha1-Jp/HrVuOQstjyJbVZmAXJhwUQIk=", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/async-settle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", - "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-done": "^2.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/azure-devops-node-api": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz", - "integrity": "sha1-t+xHgyMOHej8lysj7/5+0uusF/8=", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/bach": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", - "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-done": "^2.0.0", - "async-settle": "^2.0.0", - "now-and-later": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/bach/node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/browserslist/node_modules/caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/browserslist/node_modules/electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", - "dev": true - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "dev": true, - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha1-ANKXpCBtceIWPDnq/6gVesBlHw8=", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha1-K6Pc38wm55VvwfRA5h1RxkM3nz4=", - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha1-+vPa6zGxfF4anavO4oiq+Kr6WCM=", - "dependencies": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio/node_modules/tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha1-gDuM2rPhK6WBpMpByIObuw2ssJ4=" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "dev": true, - "dependencies": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clipboardy/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/clipboardy/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clipboardy/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clipboardy/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-props": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", - "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "each-props": "^3.0.0", - "is-plain-object": "^5.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/copy-props/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM=", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha1-pwRA9wMX8maRGK10/xBeZYSccGc=", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0=", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug-fabulous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", - "dev": true, - "dependencies": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" - } - }, - "node_modules/debug-fabulous/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/debug-fabulous/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha1-4D+TqsmytkQ/xS5eSjezrZrY35Y=", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/default-require-extensions/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-libc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.0.tgz", - "integrity": "sha512-S55LzUl8HUav8l9E2PBTlC5PAJrHK7tkM+XXFGD+fbsbkTzhCpG6K05LxJcUOEWzMa4v6ptcMZ9s3fOdJDu0Zw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha1-YgZDfTLO767HFhgDIwx6ILwbTZE=", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc=", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha1-+XaKXwNL5gqJonwuTQ9066DYsFk=", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", - "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha1-njr0B0Wd7tR+mpH5uIWoTrBcVh0=", - "dev": true - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "node_modules/event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "license": "MIT", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha1-cbMoAMnxWqjy+D9Ka9m/812GGlM=", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha1-5LymgIgWv4+TtSdQ8RJ/Wm/Ybjo=", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=" - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fsu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", - "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "deprecated": "This package is no longer supported.", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha1-jeLYA8/0TfO8bEVuZmizbDkm4Ro=", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "engines": { - "node": ">=4" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", - "dev": true, - "license": "MIT", - "dependencies": { - "sparkles": "^2.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/got": { - "version": "11.8.5", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", - "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gulp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", - "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.1.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.2" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp-cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", - "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.1", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp-cli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/gulp-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/gulp-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/gulp-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/gulp-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/gulp-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-filter": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", - "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", - "dev": true, - "dependencies": { - "multimatch": "^2.0.0", - "plugin-error": "^0.1.2", - "streamfilter": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", - "dev": true, - "dependencies": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/gulp-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-typescript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", - "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.0.5", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.3" - }, - "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" - } - }, - "node_modules/gulp-typescript/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/gulp-typescript/node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-typescript/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/gulp/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gulp/node_modules/fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/glob-stream": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", - "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp/node_modules/lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/gulp/node_modules/resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "value-or-function": "^4.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl-fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", - "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.3", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.1", - "vinyl-sourcemap": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulp/node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "glogg": "^2.2.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha1-pIR3mJs7MnrqPAT1MJbYFtl1IqE=", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha1-xNditsM3GgXb5l6UrkOp+EX7j7c=", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "dependencies": { - "agent-base": "4", - "debug": "3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "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.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" - } - }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha1-9ZRKN8cLVQsCp4pcOyBVsoDOyOw=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha1-j4TJQ0iIzGsdCp1wkqdtI56/DMY=", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha1-hzxv/4l0UBGCIndGlqPyiQLXfB0=", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha1-4UJlFGYiRLLyXfco6P0bo1/lO5w=", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha1-dRj+UupE3jcvRgp2tezan/tz2KY=", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha1-dXQ85tlruG3H7kNSz2Nmoj8LGtk=", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", - "dev": true - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha1-1ZMhDlAAaDdQywn8BkTktuJ/1Ts=", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jschardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-2.1.1.tgz", - "integrity": "sha512-pA5qG9Zwm8CBpGlK/lo2GE9jPxwqRgMV7Lzc/1iaPccw6v4Rhj8Zg2BTyrdmHmxlJojnbLupLeRnaPLsq03x6Q==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha1-715Ymvth5dZrJOynSUCaiTmox0Q=", - "dev": true - }, - "node_modules/keytar": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.8.0.tgz", - "integrity": "sha512-mR+BqtAOIW8j+T5FtLVyckCbvROWQD+4FzPeFMuk5njEZkXLpVPCGF26Y3mTyxMAAL1XCfswR7S6kIf+THSRFA==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.1.1.tgz", - "integrity": "sha512-tGv1yP6snQVDSM4X6yxrv2zzq/EvpW+oYiUz6aueW1u9CtS8RzUQYxxmFwgZlO2jSgCxQbchhxaqXXp2hnKGpQ==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/last-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", - "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "dependencies": { - "invert-kv": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", - "engines": { - "node": ">=6" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/liftoff": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", - "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^5.0.0", - "fined": "^2.0.0", - "flagged-respawn": "^2.0.0", - "is-plain-object": "^5.0.0", - "rechoir": "^0.8.0", - "resolve": "^1.20.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/locate-path/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=", - "dev": true - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha1-LrLjfqm2fEiR9oShOUeZr0hM96I=", - "dev": true - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mocha/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/mocha/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/mochawesome": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.0.1.tgz", - "integrity": "sha512-2FTU7KVNDiKohi4IG3IVmJ2OTy0Nm0Q2RjueK9hsj7blbkcrpFVH209cP8P4egi+LBidKdX+QmtN3thJde2yiQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "diff": "^5.0.0", - "json-stringify-safe": "^5.0.1", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", - "mochawesome-report-generator": "^6.0.1", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "mocha": ">=7" - } - }, - "node_modules/mochawesome-report-generator": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.0.1.tgz", - "integrity": "sha512-/+RoE/lD7QTJBh7VsymdQOTqS8QuB94xKJCJXxZ3fy3JsDdPNgTBgUlEOR99r+2W1zPgEWVhRBU1Tl9fe6kI+w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "dateformat": "^4.5.1", - "escape-html": "^1.0.3", - "fs-extra": "^10.0.0", - "fsu": "^1.1.1", - "lodash.isfunction": "^3.0.9", - "opener": "^1.5.2", - "prop-types": "^15.7.2", - "tcomb": "^3.2.17", - "tcomb-validation": "^3.3.0", - "validator": "^13.6.0", - "yargs": "^17.2.1" - }, - "bin": { - "marge": "bin/cli.js" - } - }, - "node_modules/mochawesome-report-generator/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome-report-generator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mochawesome-report-generator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mochawesome-report-generator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mochawesome-report-generator/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/mochawesome-report-generator/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mochawesome-report-generator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mochawesome-report-generator/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/mochawesome-report-generator/node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mochawesome-report-generator/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/mochawesome/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mochawesome/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mochawesome/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mochawesome/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/monaco-page-objects": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/monaco-page-objects/-/monaco-page-objects-1.9.1.tgz", - "integrity": "sha512-Sct5tMld91KRZFOJLmlqBfnK/F5jBBdAqMwioiGrTsATrWIJDCkrU6MVq4gdMmOMQxVGAXt1LwgfD6AzJWarrQ==", - "deprecated": "Deprecated - This package was replaced by @redhat-developer/page-objects", - "dev": true, - "dependencies": { - "clipboardy": "^2.3.0", - "clone-deep": "^4.0.1", - "compare-versions": "^3.5.1", - "fs-extra": "^10.0.0", - "ts-essentials": "^8.0.0" - }, - "peerDependencies": { - "selenium-webdriver": "^3.0.0" - } - }, - "node_modules/monaco-page-objects/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/monaco-page-objects/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/monaco-page-objects/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "dependencies": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mute-stdout": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", - "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha1-j7daJukLmSAvoeY/RI9Y77ze2vY=", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" - } - }, - "node_modules/node-abi": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", - "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node_modules/node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha1-wDBDuzJ/QXoY/uerfuV7QIoUQwE=", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha1-yxM0sXmJaxyJ7P3UtyX7e738fbs=", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "deprecated": "This package is no longer supported.", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha1-EzXa4S3ch7biSdWhmUykva6nXwI=", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/nyc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true - }, - "node_modules/nyc/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", - "dev": true - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", - "dev": true - }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha1-2v1PlVmnWFz7pSnGoKT3NIjr1MU=", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha1-jbK4PDHF11CZu4kLI/MJSJHiR9Q=", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "dependencies": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-locale/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/os-locale/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/os-locale/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-locale/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/os-locale/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/os-locale/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha1-NTf2VGZew8w4gnOH/JBMFjxU9QY=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", - "dependencies": { - "semver": "^5.1.0" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "dependencies": { - "kind-of": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.1.tgz", - "integrity": "sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/prebuild-install/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha1-lbBaIwc9MKF6z9ySpEDv0rrv3JM=", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", - "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/run-sequence": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", - "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/run-sequence/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/run-sequence/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/run-sequence/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "dependencies": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, - "engines": { - "node": ">= 6.9.0" - } - }, - "node_modules/selenium-webdriver/node_modules/tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", - "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "sver": "^1.8.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha1-785cj9wQTudRslxY1CkAEfpeos8=", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sinon": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", - "integrity": "sha1-5Vr007F0pEQ6h2L6hCHCl2aDdSs=", - "deprecated": "16.1.1", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.0.4", - "supports-color": "^7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/sparkles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", - "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha1-EDaFuLj5t5dxMYgnqnhlCmENRX4=", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/spawn-wrap/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/stream-composer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", - "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.13.2" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true, - "license": "MIT" - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/streamfilter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", - "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", - "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "semver": "^6.3.0" - } - }, - "node_modules/sver/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/tar-fs": { - "version": "1.16.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.6.tgz", - "integrity": "sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - } - }, - "node_modules/tar-fs/node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/targz": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz", - "integrity": "sha1-j3alI2lM3t+7XWCkB2/27uzFOY8=", - "dev": true, - "dependencies": { - "tar-fs": "^1.8.1" - } - }, - "node_modules/tcomb": { - "version": "3.2.29", - "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", - "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", - "dev": true - }, - "node_modules/tcomb-validation": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", - "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", - "dev": true, - "dependencies": { - "tcomb": "^3.0.0" - } - }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha1-BKhphmHYBepvopO2y55jrARO8V4=", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "dependencies": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dev": true, - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/ts-essentials": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-8.1.0.tgz", - "integrity": "sha512-34xALeQADWRYq9kbtprP4KdpTQ3v3BBIs/U4SpaP+C4++B8ijXY5NnILRJLchQVMzw7YBzKuGMUMrI9uT+ALVw==", - "dev": true, - "peerDependencies": { - "typescript": ">=4.0.0" - } - }, - "node_modules/ts-mock-imports": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ts-mock-imports/-/ts-mock-imports-1.3.3.tgz", - "integrity": "sha1-eGWIg4KAaqjwlBKrWCqOBvK9G20=", - "dev": true, - "peerDependencies": { - "sinon": ">= 4.1.2", - "typescript": ">=2.6.1 < 4.2" - } - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha1-UamkUKPpWUAb2l8ASnLVS5NtN20=", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/ts-sinon": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-sinon/-/ts-sinon-2.0.1.tgz", - "integrity": "sha1-d92QnKhcYGKZCyEXVUoDp0v9Eyw=", - "dev": true, - "dependencies": { - "@types/node": "^14.6.1", - "@types/sinon": "^9.0.5", - "@types/sinon-chai": "^3.2.4", - "sinon": "^9.0.3" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" - } - }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz", - "integrity": "sha1-uj+3iOW5MiVHQGOSUz8S1mClztY=", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/underscore": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", - "integrity": "sha1-DBxr0t9UtrafIxQGbWW2zeb8+dE=" - }, - "node_modules/undertaker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", - "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bach": "^2.0.1", - "fast-levenshtein": "^3.0.0", - "last-run": "^2.0.0", - "undertaker-registry": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/undertaker-registry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", - "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unzip-stream": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.4.tgz", - "integrity": "sha512-PyofABPVv+d7fL7GOpusx7eRT9YETY2X04PhwbSipdj6bMxVCFJrr+nm0Mxqbf9hUiTin/UsnuFWBXlDZFy0Cw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary": "^0.3.0", - "mkdirp": "^0.5.1" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8flags": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", - "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/validator": { - "version": "13.15.22", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.22.tgz", - "integrity": "sha512-uT/YQjiyLJP7HSrv/dPZqK9L28xf8hsNca01HSz1dfmI0DgMfjopp1rO/z13NeGF1tVystF0Ejx3y4rUKPw+bQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-contents/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/vinyl-contents/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/vinyl-contents/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/vinyl-contents/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/vinyl-contents/node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vsce": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.6.7.tgz", - "integrity": "sha512-5dEtdi/yzWQbOU7JDUSOs8lmSzzkewBR5P122BUkmXE6A/DEdFsKNsg2773NGXJTwwF1MfsOgUR6QVF3cLLJNQ==", - "deprecated": "vsce has been renamed to @vscode/vsce. Install using @vscode/vsce instead.", - "dependencies": { - "azure-devops-node-api": "^11.0.1", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.9", - "commander": "^6.1.0", - "glob": "^7.0.6", - "hosted-git-info": "^4.0.2", - "keytar": "^7.7.0", - "leven": "^3.1.0", - "markdown-it": "^12.3.2", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "^0.2.1", - "typed-rest-client": "^1.8.4", - "url-join": "^4.0.1", - "xml2js": "^0.4.23", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - }, - "bin": { - "vsce": "vsce" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/vsce/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/vsce/node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/vsce/node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/vsce/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vsce/node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/vsce/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vsce/node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/vsce/node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, - "node_modules/vsce/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/vscode-extension-tester": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/vscode-extension-tester/-/vscode-extension-tester-4.2.4.tgz", - "integrity": "sha512-4BT9bf7fs7lE97z8XtzT+wfawIOaYwC5D64u4WbnlzxfV9YQoPEqd76g+MjD27YgjsZWItAC3fhNOip9ry2dSg==", - "dev": true, - "dependencies": { - "@types/selenium-webdriver": "^3.0.15", - "commander": "^8.0.0", - "compare-versions": "^3.6.0", - "fs-extra": "^10.0.0", - "glob": "^7.1.7", - "got": "^11.8.2", - "hpagent": "^0.1.2", - "js-yaml": "^4.1.0", - "monaco-page-objects": "^1.9.0", - "sanitize-filename": "^1.6.3", - "selenium-webdriver": "^3.0.0", - "targz": "^1.0.1", - "unzip-stream": "^0.3.0", - "vsce": "^2.3.0", - "vscode-extension-tester-locators": "^1.62.0" - }, - "bin": { - "extest": "out/cli.js" - }, - "peerDependencies": { - "mocha": ">=5.2.0" - } - }, - "node_modules/vscode-extension-tester-locators": { - "version": "1.62.1", - "resolved": "https://registry.npmjs.org/vscode-extension-tester-locators/-/vscode-extension-tester-locators-1.62.1.tgz", - "integrity": "sha512-EHlQO8LDz+bvNdbyNS+K2nL2O0Wt6uMt8ZiRD15vASLQHONfmbQcFT7Zc+sHRa7Ylx0Q1HIv6iYScPAuKm7Eeg==", - "deprecated": "Deprecated - This package was replaced by @redhat-developer/locators", - "dev": true, - "peerDependencies": { - "monaco-page-objects": "^1.0.0", - "selenium-webdriver": "^3.0.0" - } - }, - "node_modules/vscode-extension-tester/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/vscode-extension-tester/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/vscode-extension-tester/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/vscode-extension-tester/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vscode-extension-tester/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/vscode-extension-tester/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/vscode-extension-tester/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-4.2.0.tgz", - "integrity": "sha512-uEe9myl+EERJV4ZRyl1YARieixLaO8hJY5hyjhltRMel/FeB9t0P7SjE2IOel1sX/TyFyRdbLMOjJYyeWhENAg==", - "dependencies": { - "vscode-languageserver-protocol": "^3.8.0" - }, - "engines": { - "vscode": "^1.23" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.15.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz", - "integrity": "sha1-P6mgcC10LPeIPLYYKmIS/NCh2Ls=", - "dependencies": { - "vscode-jsonrpc": "^5.0.1", - "vscode-languageserver-types": "3.15.1" - } - }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha1-m6ucMw2J9D/IwehwK1w24FigF5Q=", - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageserver-types": { - "version": "3.15.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", - "integrity": "sha1-F75x140vYjbUFPAAHOHvTSPmtt4=" - }, - "node_modules/vscode-nls": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-3.2.5.tgz", - "integrity": "sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==" - }, - "node_modules/vscode-nls-dev": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-3.3.2.tgz", - "integrity": "sha512-/YJY/LegZ0jsWFd8BforDmXpwWKprM7L3rL0kLEvjQxOJw6qtmnoUJorLIv0ZXjebeyhI3mc8hjmQr479ykLIQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.2.3", - "clone": "^2.1.1", - "event-stream": "^3.3.4", - "fancy-log": "^1.3.3", - "glob": "^7.1.2", - "iconv-lite": "^0.4.19", - "is": "^3.2.1", - "source-map": "^0.6.1", - "typescript": "^3.9.5", - "vinyl": "^2.1.0", - "xml2js": "^0.4.19", - "yargs": "^13.2.4" - }, - "bin": { - "vscl": "lib/vscl.js" - } - }, - "node_modules/vscode-nls-dev/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/vscode-nls-dev/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/vscode-nls-dev/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/vscode-nls-dev/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vscode-nls-dev/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/vscode-nls-dev/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/vscode-nls-dev/node_modules/yargs/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/vscode-ripgrep": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.8.tgz", - "integrity": "sha512-l6Pv/t1Jk63RU+kEkMO04XxnNRYdyzuesizj9AzFpcfrUxxpAjEJBK1qO9Mov30UUGZl7uDUBn+uCv9koaHPPA==", - "deprecated": "This package has been renamed to @vscode/ripgrep, please update to the new name", - "hasInstallScript": true - }, - "node_modules/vscode-test": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.1.tgz", - "integrity": "sha512-Ls7+JyC06cUCuomlTYk4aNJI00Rri09hgtkNl3zfQ1bj6meXglpSPpuzJ/RPNetlUHFMm4eGs0Xr/H5pFPVwfQ==", - "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", - "dev": true, - "dependencies": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug=", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/yargs-unparser/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs-unparser/node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/yargs-unparser/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/yargs-unparser/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "node_modules/yargs-unparser/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-unparser/node_modules/yargs/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dependencies": { - "buffer-crc32": "~0.2.3" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha1-HodAGgnXZ8HV6rJqbkwYUYLS61A=", - "dev": true, - "engines": { - "node": ">=6" - } - } - } -} + "name": "autolispext", + "version": "1.6.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "autolispext", + "version": "1.6.3", + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@vscode/vsce": "^3.7.1", + "execa": "1.0.0", + "fs-extra": "^8.1.0", + "jschardet": "2.1.1", + "os-locale": "5.0.0", + "vscode-extension-tester": "^8.0.0", + "vscode-languageclient": "9.0.1", + "vscode-nls": "3.2.5", + "vscode-ripgrep": "1.5.8" + }, + "devDependencies": { + "@types/fs-extra": "^8.1.0", + "source-map-resolve": "0.6.0", + "mocha": "^11.3.0", + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "nyc": "^15.1.0", + "mochawesome": "^7.0.1", + "event-stream": "^4.0.1", + "gulp": "^5.0.1", + "source-map": "0.7.4", + "@types/chai": "^4.2.15", + "vscode-nls-dev": "^4.0.4", + "@types/vscode": "^1.108.0", + "vscode-test": "^1.4.1", + "del": "^4.1.1", + "typescript": "^5.5.4", + "@types/node": "^25.2.1", + "ts-node": "^9.1.1", + "tslint": "5.11.0", + "chai": "^4.2.0", + "@vscode/test-cli": "^0.0.12", + "gulp-filter": "^5.1.0", + "@vscode/test-electron": "^2.5.2", + "gulp-cli": "^3.1.0", + "gulp-typescript": "^5.0.1", + "gulp-sourcemaps": "^2.6.5", + "ts-mock-imports": "^1.3.3", + "@types/mocha": "^5.2.7", + "ts-sinon": "^2.0.1", + "run-sequence": "^2.2.1" + }, + "engines": { + "vscode": "^1.108.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vscode-nls-dev/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/byte-counter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/byte-counter/-/byte-counter-0.1.0.tgz", + "integrity": "sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vscode-extension-tester": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/vscode-extension-tester/-/vscode-extension-tester-8.21.0.tgz", + "integrity": "sha512-TeEQR4pqq4qCe30IBbJFknw5VgPHyQLisrjp+9d/ewvgYAFu87Tv0TxczDRDwSYUCNrUhqH18OkbNTIdBmaeOw==", + "license": "Apache-2.0", + "dependencies": { + "js-yaml": "^4.1.1", + "got": "^14.6.6", + "c8": "^10.1.3", + "targz": "^1.0.1", + "unzipper": "^0.12.3", + "@types/selenium-webdriver": "^4.35.4", + "selenium-webdriver": "^4.39.0", + "@vscode/vsce": "^3.7.1", + "fs-extra": "^11.3.3", + "@redhat-developer/page-objects": "^1.18.1", + "compare-versions": "^6.1.1", + "find-up": "8.0.0", + "commander": "^14.0.2", + "glob": "^13.0.0", + "hpagent": "^1.2.0", + "sanitize-filename": "^1.6.3", + "@redhat-developer/locators": "^1.18.1" + }, + "bin": { + "extest": "out/cli.js" + }, + "peerDependencies": { + "mocha": ">=5.2.0", + "typescript": ">=4.6.2" + } + }, + "node_modules/tslint/node_modules/diff": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.1.tgz", + "integrity": "sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-nls-dev/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@redhat-developer/page-objects": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/page-objects/-/page-objects-1.18.1.tgz", + "integrity": "sha512-clwXbTAykhqJqUkdTWUtS7jwY1eQVhlgQia6GfmMHMLGxqMbHCgHVm0rEYoR1C050XWYxtfsEpnsmUB9Kjcs9A==", + "license": "Apache-2.0", + "dependencies": { + "clipboardy": "^5.0.2", + "clone-deep": "^4.0.1", + "compare-versions": "^6.1.1", + "fs-extra": "^11.3.3", + "type-fest": "^4.41.0" + }, + "peerDependencies": { + "selenium-webdriver": ">=4.6.1", + "typescript": ">=4.6.2" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", + "license": "Apache-2.0" + }, + "node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/secretlint/node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@vscode/vsce/node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/vscode-ripgrep": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.8.tgz", + "integrity": "sha512-l6Pv/t1Jk63RU+kEkMO04XxnNRYdyzuesizj9AzFpcfrUxxpAjEJBK1qO9Mov30UUGZl7uDUBn+uCv9koaHPPA==", + "deprecated": "This package has been renamed to @vscode/ripgrep, please update to the new name", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/@redhat-developer/page-objects/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/c8/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/c8/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", + "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.3", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.1", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/mochawesome/node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/@azu/format-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "license": "BSD-3-Clause" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/vscode-extension-tester/node_modules/glob": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", + "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.2", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/unzipper/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/got/node_modules/type-fest": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-typescript/node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/rc-config-loader/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@azure/identity": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", + "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/mochawesome-report-generator/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/targz/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@gulp-sourcemaps/identity-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-15.0.1.tgz", + "integrity": "sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/vscode-extension-tester/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/mocha/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/rc-config-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.2", + "require-from-string": "^2.0.2" + } + }, + "node_modules/@secretlint/formatter": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz", + "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==", + "license": "MIT", + "dependencies": { + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "@textlint/linter-formatter": "^15.2.0", + "@textlint/module-interop": "^15.2.0", + "@textlint/types": "^15.2.0", + "chalk": "^5.4.1", + "debug": "^4.4.1", + "pluralize": "^8.0.0", + "strip-ansi": "^7.1.0", + "table": "^6.9.0", + "terminal-link": "^4.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vscode/test-cli/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "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", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "license": "MIT", + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/@vscode/vsce/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/ts-sinon/node_modules/@sinonjs/samsam": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", + "optional": true + }, + "node_modules/ts-mock-imports": { + "version": "1.3.19", + "resolved": "https://registry.npmjs.org/ts-mock-imports/-/ts-mock-imports-1.3.19.tgz", + "integrity": "sha512-9vYKRTSWLs03caKmYFry0cXj3K4xo61PsU8PUE9ZtnX6PTglcbqroJXtb60z28wgVpmnmRwlzqDW4LfnwRYHkw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "sinon": ">= 4.1.2", + "typescript": ">=2.6.1" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "license": "MIT", + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unzipper/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/vinyl-fs/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/run-sequence/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "license": "MIT", + "dependencies": { + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "bin": { + "secretlint": "bin/secretlint.js" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/unique-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", + "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "3.0.0" + } + }, + "node_modules/@textlint/types": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.1.tgz", + "integrity": "sha512-IY1OVZZk8LOOrbapYCsaeH7XSJT89HVukixDT8CoiWMrKGCTCZ3/Kzoa3DtMMbY8jtY777QmPOVCNnR+8fF6YQ==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "15.5.1" + } + }, + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nise/node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-filter": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", + "integrity": "sha512-ZERu1ipbPmjrNQ2dQD6lL4BjrJQG66P/c5XiyMMBqV+tUAJ+fLOyYIL/qnXd2pHmw/G/r7CLQb9ttANvQWbpfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "multimatch": "^2.0.0", + "plugin-error": "^0.1.2", + "streamfilter": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-typescript/node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "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" + } + }, + "node_modules/vscode-test/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-locale/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "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", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/run-jxa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/gulp-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/v8flags": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/ts-sinon/node_modules/sinon": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", + "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", + "deprecated": "16.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/samsam": "^5.3.1", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" + }, + "node_modules/mocha/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/targz/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/clipboardy/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vscode-test/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", + "integrity": "sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "nyc": ">=15" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/@vscode/vsce/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/run-jxa/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/vsce/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-path": "^2.0.1", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "istanbul-lib-source-maps": "^4.0.0", + "yargs": "^15.0.2", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "signal-exit": "^3.0.2", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "istanbul-lib-instrument": "^4.0.0", + "process-on-spawn": "^1.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "caching-transform": "^4.0.0", + "get-package-type": "^0.1.0", + "test-exclude": "^6.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "istanbul-reports": "^3.0.2", + "resolve-from": "^5.0.0", + "find-up": "^4.1.0", + "spawn-wrap": "^2.0.0", + "@istanbuljs/schema": "^0.1.2", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "glob": "^7.1.6", + "foreground-child": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@vscode/vsce/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/responselike": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-4.0.2.tgz", + "integrity": "sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/os-locale/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@secretlint/formatter/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-sourcemaps": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", + "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gulp-sourcemaps/identity-map": "1.X", + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "5.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "1.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom-string": "1.X", + "through2": "2.X" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "license": "MIT" + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vscode/vsce/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "license": "MIT" + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subsume/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/c8/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/os-locale/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-typescript/node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "license": "MIT", + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "through": "~2.3.4" + } + }, + "node_modules/vscode-nls-dev/node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/gulp-typescript/node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vscode/test-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/@textlint/linter-formatter": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.1.tgz", + "integrity": "sha512-7wfzpcQtk7TZ3UJO2deTI71mJCm4VvPGUmSwE4iuH6FoaxpdWpwSBiMLcZtjYrt/oIFOtNz0uf5rI+xJiHTFww==", + "license": "MIT", + "dependencies": { + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.5.1", + "@textlint/resolver": "15.5.1", + "@textlint/types": "15.5.1", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.17.21", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/css/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/os-locale/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-10.0.0.tgz", + "integrity": "sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==", + "license": "MIT", + "dependencies": { + "mimic-response": "^4.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/targz": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz", + "integrity": "sha512-6q4tP9U55mZnRuMTBqnqc3nwYQY3kv+QthCFZuMk+Tn1qYUnMPmL/JZ/mzgXINzFpSqfU+242IFmFU9VPvqaQw==", + "license": "MIT", + "dependencies": { + "tar-fs": "^1.8.1" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "license": "MIT", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/got": { + "version": "14.6.6", + "resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz", + "integrity": "sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^7.0.1", + "byte-counter": "^0.1.0", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^13.0.12", + "decompress-response": "^10.0.0", + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "keyv": "^5.5.3", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^4.0.2", + "type-fest": "^4.26.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug-fabulous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dev": true, + "license": "MIT", + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/run-jxa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/os-locale/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "sver": "^1.8.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vscode/vsce/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/os-locale/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "cpu": [ + "arm" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ts-sinon/node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/test-cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true, + "license": "MIT" + }, + "node_modules/@secretlint/formatter/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/os-locale/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request": { + "version": "13.0.18", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.18.tgz", + "integrity": "sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.2.0", + "keyv": "^5.5.5", + "mimic-response": "^4.0.0", + "normalize-url": "^8.1.1", + "responselike": "^4.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/run-sequence/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/ts-sinon/node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@vscode/test-cli/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/mochawesome/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nise": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/run-jxa/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vscode-nls-dev/node_modules/event-stream": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", + "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.15.0" + }, + "engines": { + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@secretlint/node/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@vscode/test-cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gulp-typescript/node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/clipboardy/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/macos-version": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/macos-version/-/macos-version-6.0.0.tgz", + "integrity": "sha512-O2S8voA+pMfCHhBn/TIYDXzJ1qNHpPDU32oFxglKnVdJABiYYITt45oLkV9yhwA3E2FDwn3tQqUFrTsr1p3sBQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@types/sinon": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", + "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/run-sequence/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-extension-tester/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/is-wayland": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-wayland/-/is-wayland-0.1.0.tgz", + "integrity": "sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/form-data-encoder": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", + "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@azure/logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@textlint/ast-node-types": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.1.tgz", + "integrity": "sha512-2ABQSaQoM9u9fycXLJKcCv4XQulJWTUSwjo6F0i/ujjqOH8/AZ2A0RDKKbAddqxDhuabVB20lYoEsZZgzehccg==", + "license": "MIT" + }, + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/vscode-test/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/run-jxa/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@sinonjs/commons/node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-typescript/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", + "license": "MIT", + "dependencies": { + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-sinon/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/c8/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@types/node": { + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.1.tgz", + "integrity": "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/mochawesome-report-generator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clipboardy/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamfilter": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", + "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/os-locale/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/vscode-test/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/vscode-extension-tester/node_modules/find-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", + "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", + "license": "MIT", + "dependencies": { + "locate-path": "^8.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vscode/test-cli/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vscode/vsce/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/subsume": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/subsume/-/subsume-4.0.0.tgz", + "integrity": "sha512-BWnYJElmHbYZ/zKevy+TG+SsyoFCmRPDHJbR1MzLxkPOv1Jp/4hGhVUtP98s+wZBsBsHwCXvPTP0x287/WMjGg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "unique-string": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mochawesome-report-generator/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/vsce/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "license": "MIT" + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/clipboardy/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/vscode-extension-tester/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", + "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/vscode-nls": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-3.2.5.tgz", + "integrity": "sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/vscode-extension-tester/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cacheable-request/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/gulp-typescript/node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "license": "MIT", + "optional": true + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/@secretlint/config-loader/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ts-sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/c8/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/selenium-webdriver": { + "version": "4.35.5", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.35.5.tgz", + "integrity": "sha512-wCQCjWmahRkUAO7S703UAvBFkxz4o/rjX4T2AOSWKXSi0sTQPsrXxR0GjtFUT0ompedLkYH4R5HO5Urz0hyeog==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/ws": "*" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "license": "MIT", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vscode/test-cli/node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/@vscode/test-cli": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.12.tgz", + "integrity": "sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mocha": "^10.0.10", + "c8": "^10.1.3", + "chokidar": "^3.6.0", + "enhanced-resolve": "^5.18.3", + "glob": "^10.3.10", + "minimatch": "^9.0.3", + "mocha": "^11.7.4", + "supports-color": "^10.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "vscode-test": "out/bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@vscode/test-cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unzipper": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", + "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "^11.2.0", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "license": "MIT" + }, + "node_modules/@azure/core-tracing": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "license": "BSD-2-Clause" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "license": "MIT", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/clipboard-image": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clipboard-image/-/clipboard-image-0.1.0.tgz", + "integrity": "sha512-SWk7FgaXLNFld19peQ/rTe0n97lwR1WbkqxV6JKCAOh7U52AKV/PeMFCyt/8IhBdqyDA8rdyewQMKZqvWT5Akg==", + "license": "MIT", + "dependencies": { + "run-jxa": "^3.0.0" + }, + "bin": { + "clipboard-image": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@vscode/vsce/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/c8/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/node-sarif-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/gulp-typescript/node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", + "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "type-detect": "^4.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/cacheable-request/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/run-jxa/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-extension-tester/node_modules/glob/node_modules/minimatch": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mochawesome/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/@textlint/resolver": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.1.tgz", + "integrity": "sha512-CVHxMIm8iNGccqM12CQ/ycvh+HjJId4RyC6as5ynCcp2E1Uy1TCe0jBWOpmLsbT4Nx15Ke29BmspyByawuIRyA==", + "license": "MIT" + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/ts-sinon": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ts-sinon/-/ts-sinon-2.0.2.tgz", + "integrity": "sha512-Eh6rXPQruACHPn+/e5HsIMaHZa17tGP/scGjUeW5eJ/Levn8hBV6zSP/6QkEDUP7wLkTyY0yeYikjpTzgC9Gew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^14.6.1", + "@types/sinon": "^9.0.5", + "@types/sinon-chai": "^3.2.4", + "sinon": "^9.0.3" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz", + "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.0.0.tgz", + "integrity": "sha512-BoEUnckjP9oiudy3KxlGdudtBAdJQ74Wp7dYwVPkUzBn+cVHOsBXh2zD2jLyqgbuJ1KMNriczZCI7lTBA94dFg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/replace-homedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/arr-diff/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" + }, + "node_modules/@secretlint/formatter/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gulp-typescript/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-sinon/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tcomb": "^3.0.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/liftoff": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", + "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", + "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^8.1.0", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/targz/node_modules/tar-fs": { + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.6.tgz", + "integrity": "sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==", + "license": "MIT", + "dependencies": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "node_modules/mochawesome-report-generator": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.3.2.tgz", + "integrity": "sha512-iB6iyOUMyMr8XOUYTNfrqYuZQLZka3K/Gr2GPc6CHPe7t2ZhxxfcoVkpMLOtyDKnWbY1zgu1/7VNRsigrvKnOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "marge": "bin/cli.js" + } + }, + "node_modules/@vscode/test-cli/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "license": "BSD-2-Clause", + "dependencies": { + "boundary": "^2.0.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/mocha/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/clipboardy/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/run-sequence/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/clipboardy/node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-jxa/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/secretlint/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.14.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.1.tgz", + "integrity": "sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.6.tgz", + "integrity": "sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.14.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/os-locale/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/copy-props": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/vinyl-sourcemap/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/normalize-url": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/vscode-nls-dev/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@redhat-developer/page-objects/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/vscode-test/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/vscode-extension-tester/node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "license": "MIT", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "engines": { + "vscode": "^1.82.0" + } + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/test-cli/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/targz/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/@types/vscode": { + "version": "1.109.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz", + "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "license": "MIT", + "peer": true, + "dependencies": { + "serialize-javascript": "^6.0.2", + "yargs-unparser": "^2.0.0", + "js-yaml": "^4.1.0", + "yargs": "^17.7.2", + "log-symbols": "^4.1.0", + "diff": "^7.0.0", + "yargs-parser": "^21.1.1", + "is-path-inside": "^3.0.3", + "ms": "^2.1.3", + "supports-color": "^8.1.1", + "chokidar": "^4.0.1", + "picocolors": "^1.1.1", + "strip-json-comments": "^3.1.1", + "debug": "^4.3.5", + "minimatch": "^9.0.5", + "find-up": "^5.0.0", + "browser-stdout": "^1.3.1", + "escape-string-regexp": "^4.0.0", + "glob": "^10.4.5", + "workerpool": "^9.2.0", + "he": "^1.2.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undici": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.21.0.tgz", + "integrity": "sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@vscode/vsce/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/c8": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.1", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } + } + }, + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-typescript/node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jschardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-2.1.1.tgz", + "integrity": "sha512-pA5qG9Zwm8CBpGlK/lo2GE9jPxwqRgMV7Lzc/1iaPccw6v4Rhj8Zg2BTyrdmHmxlJojnbLupLeRnaPLsq03x6Q==", + "license": "LGPL-2.1+", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/vscode-nls-dev": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-4.0.4.tgz", + "integrity": "sha512-0KQUVkeRTmKVH4a96ZeD+1RgQV6k21YiBYykrvbMX62m6srPC6aU9CWuWT6zrMAB6qmy9sUD0/Bk6P/atLVMrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "clone": "^2.1.2", + "event-stream": "^3.3.4", + "fancy-log": "^1.3.3", + "glob": "^7.2.0", + "iconv-lite": "^0.6.3", + "is": "^3.3.0", + "source-map": "^0.6.1", + "typescript": "^4.5.4", + "vinyl": "^2.2.1", + "xml2js": "^0.5.0", + "yargs": "^17.3.0" + }, + "bin": { + "vscl": "lib/vscl.js" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-jxa/node_modules/type-fest": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.0.0.tgz", + "integrity": "sha512-BoEUnckjP9oiudy3KxlGdudtBAdJQ74Wp7dYwVPkUzBn+cVHOsBXh2zD2jLyqgbuJ1KMNriczZCI7lTBA94dFg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-jxa/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-typescript/node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/mochawesome/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/parse-json/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vscode/vsce/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@secretlint/core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-typescript/node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochawesome": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.4.tgz", + "integrity": "sha512-fucGSh8643QkSvNRFOaJ3+kfjF0FhA/YtvDncnRAG0A4oCtAzHIFkt/+SgsWil1uwoeT+Nu5fsAnrKkFtnPcZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.3.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "mocha": ">=7" + } + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mochawesome/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true, + "license": "MIT" + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/os-locale/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/c8/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", + "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@secretlint/formatter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vscode/vsce/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/run-jxa/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/test-cli/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/vscode-extension-tester/node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vscode/test-cli/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true, + "license": "MIT" + }, + "node_modules/c8/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] + }, + "node_modules/vscode-extension-tester/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/clipboardy/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/@vscode/vsce/node_modules/jackspeak": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.1.tgz", + "integrity": "sha512-GPBXyfcZSGujjddPeA+V34bW70ZJT7jzCEbloVasSH4yjiqWqXHX8iZQtZdVbOhc5esSeAIuiSmMutRZQB/olg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "license": "ISC" + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@vscode/vsce": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", + "license": "MIT", + "dependencies": { + "parse-semver": "^1.1.1", + "semver": "^7.5.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "jsonc-parser": "^3.2.0", + "@vscode/vsce-sign": "^2.0.0", + "url-join": "^4.0.1", + "cheerio": "^1.0.0-rc.9", + "hosted-git-info": "^4.0.2", + "secretlint": "^10.1.2", + "markdown-it": "^14.1.0", + "read": "^1.0.7", + "leven": "^3.1.0", + "typed-rest-client": "^1.8.4", + "mime": "^1.3.4", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "chalk": "^4.1.2", + "yauzl": "^2.3.1", + "yazl": "^2.2.2", + "xml2js": "^0.5.0", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "minimatch": "^3.0.3", + "@secretlint/node": "^10.1.2", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "tmp": "^0.2.3", + "glob": "^11.0.0", + "azure-devops-node-api": "^12.5.0", + "form-data": "^4.0.0", + "@azure/identity": "^4.1.0" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "keytar": "^7.7.0" + } + }, + "node_modules/run-sequence": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", + "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/run-jxa": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-jxa/-/run-jxa-3.0.0.tgz", + "integrity": "sha512-4f2CrY7H+sXkKXJn/cE6qRA3z+NMVO7zvlZ/nUV0e62yWftpiLAfw5eV9ZdomzWd2TXWwEIiGjAT57+lWIzzvA==", + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "macos-version": "^6.0.0", + "subsume": "^4.0.0", + "type-fest": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/run-sequence/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/gulp-typescript/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.0.tgz", + "integrity": "sha512-M8BLNtxNWRbRmJ8Iu+4j4qZLlE7Y75ldC42cvw9KPOFkFwY/KlSJuj9eeGmoB/k3QAAnuN3M35Z59+lBm1+C+g==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vscode/test-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unzipper/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@textlint/module-interop": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.1.tgz", + "integrity": "sha512-Y1jcFGCKNSmHxwsLO3mshOfLYX4Wavq2+w5BG6x5lGgZv0XrF1xxURRhbnhns4LzCu0fAcx6W+3V8/1bkyTZCw==", + "license": "MIT" + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stdout": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/@redhat-developer/page-objects/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@redhat-developer/locators": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/locators/-/locators-1.18.1.tgz", + "integrity": "sha512-fnb5prprb8jTzx9Vl2DiJq55XK7aZVwpDZV/iLY/pYsNWEn42/rLSyMUNDrvlhnFryqmVstmDUIr4eGE3iyDMw==", + "license": "Apache-2.0", + "peerDependencies": { + "@redhat-developer/page-objects": ">=1.0.0", + "selenium-webdriver": ">=4.6.1" + } + }, + "node_modules/powershell-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", + "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/ts-sinon/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@bazel/runfiles": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.5.0.tgz", + "integrity": "sha512-RzahvqTkfpY2jsDxo8YItPX+/iZ6hbiikw1YhE0bA9EKBR5Og8Pa6FHn9PO9M0zaXRVsr0GFQLKbB/0rzy9SzA==", + "license": "Apache-2.0" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gulp-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/@azu/style-format": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", + "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "license": "WTFPL", + "dependencies": { + "@azu/format-text": "^1.0.1" + } + }, + "node_modules/p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/gulp-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-test": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", + "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", + "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/@azure/msal-browser": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.1.tgz", + "integrity": "sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.14.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/gulp-typescript/node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-stream": "^6.1.0", + "vinyl-sourcemap": "^1.1.0", + "to-through": "^2.0.0", + "resolve-options": "^1.1.0", + "pumpify": "^1.3.5", + "remove-bom-buffer": "^3.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "fs-mkdirp-stream": "^1.0.0", + "object.assign": "^4.0.4", + "value-or-function": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "readable-stream": "^2.3.3", + "vinyl": "^2.0.0", + "is-valid-glob": "^1.0.0", + "through2": "^2.0.0", + "graceful-fs": "^4.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@secretlint/node/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/selenium-webdriver": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.40.0.tgz", + "integrity": "sha512-dU0QbnVKdPmoNP8OtMCazRdtU2Ux6Wl4FEpG1iwUbDeajJK1dBAywBLrC1D7YFRtogHzN96AbXBgBAJaarcysw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/SeleniumHQ" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/selenium" + } + ], + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@bazel/runfiles": "^6.5.0", + "jszip": "^3.10.1", + "tmp": "^0.2.5", + "ws": "^8.18.3" + }, + "engines": { + "node": ">= 20.0.0" + } + }, + "node_modules/@vscode/vsce/node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "license": "MIT", + "dependencies": { + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "license": "MIT" + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sarif-builder/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/run-jxa/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/c8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redhat-developer/page-objects/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/gulp-typescript/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/vscode-extension-tester/node_modules/locate-path": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", + "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sinon": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/clipboardy/node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async-settle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-typescript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", + "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^3.0.5", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.3" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/node-sarif-builder/node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", + "license": "MIT", + "dependencies": { + "@secretlint/types": "^10.2.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", + "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.1.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.2" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/secretlint/node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/vscode-extension-tester/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "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", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/clipboardy/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mochawesome/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "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", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/gulp-typescript/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", + "optional": true + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/c8/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vscode/vsce/node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "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", + "license": "BlueOak-1.0.0", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/mochawesome-report-generator/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/is": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.2.tgz", + "integrity": "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-5.2.1.tgz", + "integrity": "sha512-RWp4E/ivQAzgF4QSWA9sjeW+Bjo+U2SvebkDhNIfO7y65eGdXPUxMTdIKYsn+bxM3ItPHGm3e68Bv3fgQ3mARw==", + "license": "MIT", + "dependencies": { + "clipboard-image": "^0.1.0", + "execa": "^9.6.1", + "is-wayland": "^0.1.0", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0", + "powershell-utils": "^0.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@gulp-sourcemaps/identity-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", + "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^5.0.3", + "css": "^2.2.1", + "normalize-path": "^2.1.1", + "source-map": "^0.6.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/vscode-nls-dev/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/vscode-extension-tester/node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "license": "MIT", + "dependencies": { + "node-sarif-builder": "^3.2.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", + "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.1", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.13.2" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/vscode-test/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mochawesome-report-generator/node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/mochawesome/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-wrap/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/run-jxa/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/tslint": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", + "integrity": "sha512-yA5YmWkzQoMF/fOA6TjkJlJniZxpo7cneTvdQEJj7blUd7YsR23gcOC5caM2MP186hTrhpSf1VSuygnikerwmQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.27.2" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" + } + }, + "node_modules/vscode-test/node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vscode/test-cli/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index 1fb1caee..3a7d6251 100644 --- a/package.json +++ b/package.json @@ -1,671 +1,685 @@ { - "name": "autolispext", - "displayName": "AutoCAD AutoLISP Extension", - "description": "This is a vscode extension for AutoCAD AutoLISP", - "version": "1.6.3", - "license": "SEE LICENSE IN LICENSE.md", - "bugs": { - "url": "https://github.com/Autodesk-AutoCAD/AutoLispExt/issues" - }, - "repository": { - "type": "git", - "url": "https://github.com/Autodesk-AutoCAD/AutoLispExt" - }, - "homepage": "https://github.com/Autodesk-AutoCAD/AutoLispExt", - "engines": { - "vscode": "^1.57.0" - }, - "publisher": "Autodesk", - "keywords": [ - "lisp", - "autolisp", - "dcl" - ], - "categories": [ - "Debuggers", - "Programming Languages", - "Formatters", - "Snippets" - ], - "icon": "images/adsk_lisp.png", - "main": "./out/extension", - "files": [ - "autolispext.vsix" - ], - "activationEvents": [ - "onDebug", - "onUri", - "onCommand:autolisp.loadActiveFile", - "onLanguage:autolisp", - "onLanguage:autolispdcl", - "onView:Autolisp-ProjectView" - ], - "contributes": { - "commands": [ - { - "command": "autolisp.loadActiveFile", - "category": "AutoLISP", - "title": "%autolispext.loadcurrentfile.title%" - }, - { - "command": "autolisp.openWebHelp", - "category": "AutoLISP", - "title": "%autolispext.openwebhelp.title%" - }, - { - "command": "autolisp.insertFoldingRegion", - "category": "AutoLISP", - "title": "%autolispext.regionsnippet.title%" - }, - { - "command": "autolisp.generateDocumentation", - "category": "AutoLISP", - "title": "%autolispext.commentdefun.title%" - }, - { - "command": "autolisp.createProject", - "category": "AutoLISP", - "title": "%autolispext.project.createproject.title%", - "icon": { - "dark": "images/dark/Create_Project.svg", - "light": "images/light/Create_Project.svg" - } - }, - { - "command": "autolisp.openProject", - "category": "AutoLISP", - "title": "%autolispext.project.openproject.title%", - "icon": { - "dark": "images/dark/Open_Project.svg", - "light": "images/light/Open_Project.svg" - } - }, - { - "command": "autolisp.closeProject", - "category": "AutoLISP", - "title": "%autolispext.project.closeproject.title%", - "icon": { - "dark": "images/dark/close.svg", - "light": "images/light/close.svg" - } - }, - { - "command": "autolisp.addFile2Project", - "category": "AutoLISP", - "title": "%autolispext.project.addfile.title%", - "icon": { - "dark": "images/dark/Add_LISP_File.svg", - "light": "images/light/Add_LISP_File.svg" - } - }, - { - "command": "autolisp.addWorkspaceFile2Project", - "category": "AutoLISP", - "title": "%autolispext.project.addworkspacefile.title%", - "icon": { - "dark": "images/dark/Add_LISP_File.svg", - "light": "images/light/Add_LISP_File.svg" - } - }, - { - "command": "autolisp.removeFileFromProject", - "category": "AutoLISP", - "title": "%autolispext.project.removefile.title%", - "icon": { - "dark": "images/dark/Remove_LISP_File.svg", - "light": "images/light/Remove_LISP_File.svg" - } - }, - { - "command": "autolisp.SaveProject", - "title": "%autolispext.project.saveproject.title%", - "category": "AutoLISP", - "icon": { - "dark": "images/dark/Save_Project.svg", - "light": "images/light/Save_Project.svg" - } - }, - { - "command": "autolisp.SaveAll", - "title": "%autolispext.project.saveall.title%", - "category": "AutoLISP", - "icon": { - "dark": "images/dark/Save_Project.svg", - "light": "images/light/Save_Project.svg" - } - }, - { - "command": "autolisp.refresh", - "category": "AutoLISP", - "title": "%autolispext.project.refresh.title%", - "icon": { - "dark": "images/dark/Refresh.svg", - "light": "images/light/Refresh.svg" - } - }, - { - "command": "autolisp.findInProject", - "category": "AutoLISP", - "title": "%autolispext.project.findinproject.title%", - "icon": { - "dark": "images/dark/Find.svg", - "light": "images/light/Find.svg" - } - }, - { - "command": "autolisp.replaceInProject", - "category": "AutoLISP", - "title": "%autolispext.project.replaceinproject.title%", - "icon": { - "dark": "images/dark/Replace.svg", - "light": "images/light/Replace.svg" - } - }, - { - "command": "autolisp.stopSearch", - "category": "AutoLISP", - "title": "%autolispext.project.stopsearch.title%", - "icon": { - "dark": "images/dark/search-stop.svg", - "light": "images/light/search-stop.svg" - } - }, - { - "command": "autolisp.clearSearchResults", - "category": "AutoLISP", - "title": "%autolispext.project.clearsearchresults.title%", - "icon": { - "dark": "images/dark/Clean.svg", - "light": "images/light/Clean.svg" - } - } - ], - "configuration": { - "type": "object", - "title": "%autolispext.configuration.title%", - "properties": { - "autolispext.format.MaxLineChars": { - "type": "number", - "default": 85, - "description": "%autolispext.configuration.maxlinechars.desc%" - }, - "autolispext.format.NarrowStyleIndent": { - "type": "number", - "default": 2, - "description": "%autolispext.configuration.narrowstyleindent.desc%" - }, - "autolispext.format.CloseParenthesisStyle": { - "type": "string", - "enum": [ - "Same line", - "New line with outer indentation" - ], - "default": "New line with outer indentation", - "description": "%autolispext.configuration.closeparenstyle.desc%" - }, - "autolispext.format.LongListFormatStyle": { - "type": "string", - "enum": [ - "Single column", - "Fill to margin" - ], - "default": "Fill to margin", - "description": "%autolispext.configuration.longlistformatstyle%" - }, - "autolispext.debug.AttachProcess": { - "type": "string", - "default": "", - "description": "%autolispext.configuration.attachprocess.desc%" - }, - "autolispext.debug.LaunchProgram": { - "type": "string", - "default": "", - "description": "%autolispext.configuration.launchprogram.desc%" - }, - "autolispext.debug.LaunchParameters": { - "type": "string", - "default": "", - "description": "%autolispext.configuration.launchparameters.desc%" - }, - "autolispext.help.TargetYear": { - "type": "string", - "enum": [ - "2018", - "2019", - "2020", - "2021", - "2022", - "2023", - "2024", - "2025" - ], - "default": "2025", - "description": "%autolispext.configuration.helptargetyear%" - } - } - }, - "configurationDefaults": { - "[lisp]": { - "files.autoGuessEncoding": true, - "editor.tabSize": 2, - "editor.detectIndentation": false, - "editor.quickSuggestions": { - "other": true, - "comments": false, - "strings": true - }, - "editor.wordBasedSuggestions": true, - "editor.autoIndent": "none", - "editor.formatOnType": true, - "files.encoding": "utf8", - "editor.suggest.localityBonus": true, - "editor.wordSeparators": "&#^()[]|;'\".", - "editor.suggestSelection": "recentlyUsed" - }, - "[autolisp]": { - "files.autoGuessEncoding": true, - "editor.tabSize": 2, - "editor.wordBasedSuggestions": true, - "editor.detectIndentation": false, - "editor.quickSuggestions": { - "other": true, - "comments": false, - "strings": true - }, - "editor.autoIndent": "none", - "editor.formatOnType": true, - "files.encoding": "utf8", - "editor.suggest.localityBonus": true, - "editor.wordSeparators": "&#^()[]|;'\".", - "editor.suggestSelection": "recentlyUsed" - }, - "[autolispdcl]": { - "files.autoGuessEncoding": true, - "editor.tabSize": 2, - "editor.detectIndentation": false, - "editor.quickSuggestions": { - "other": true, - "comments": false, - "strings": true - }, - "editor.wordBasedSuggestions": false, - "editor.suggest.showWords": false, - "editor.suggest.showProperties": false, - "editor.autoIndent": "brackets", - "files.encoding": "utf8", - "editor.suggest.localityBonus": false, - "editor.wordSeparators": "=;{}\":", - "editor.suggestSelection": "first", - "editor.suggest.insertMode": "insert", - "editor.suggest.snippetsPreventQuickSuggestions": false - } - }, - "breakpoints": [ - { - "language": "autolisp" - }, - { - "language": "autolispdcl" - }, - { - "language": "lisp" - } - ], - "languages": [ - { - "id": "autolisp", - "aliases": [ - "AutoLISP", - "autolisp" - ], - "extensions": [ - ".lsp", - ".mnl" - ], - "configuration": "./extension/smartBracket/language-configuration.json" - }, - { - "id": "autolispdcl", - "aliases": [ - "AutoLISPDCL", - "autolispdcl" - ], - "extensions": [ - ".dcl" - ], - "configuration": "./extension/smartBracket/language-configuration-dcl.json" - }, - { - "id": "autolispprj", - "aliases": [ - "AutoLISPPRJ" - ], - "extensions": [ - ".prj" - ] - } - ], - "grammars": [ - { - "language": "autolisp", - "scopeName": "source.autolisp", - "path": "./extension/syntaxes/autolisp.tmLanguage.json" - }, - { - "language": "autolispdcl", - "scopeName": "source.autolispdcl", - "path": "./extension/syntaxes/autolispdcl.tmLanguage.json" - } - ], - "snippets": [ - { - "language": "autolisp", - "path": "./snippets/snippets.json" - } - ], - "debuggers": [ - { - "type": "attachlisp", - "label": "AutoLISP Debug: Attach", - "windows": { - "program": "${lispadapterpath}" - }, - "languages": [ - "autolisp", - "autolispdcl" - ], - "configurationAttributes": { - "attach": { - "required": [ - "attributes" - ], - "properties": { - "attributes": { - "type": "object", - "description": "%autolispext.debug.attachconfig.desc%", - "default": "" - } - } - } - }, - "initialConfigurations": [ - { - "type": "attachlisp", - "request": "attach", - "name": "AutoLISP Debug: Attach", - "attributes": { - "//": "%autolispext.packagejson.changeattachproc%" - } - } - ], - "configurationSnippets": [ - { - "label": "AutoLISP Debug: Attach", - "description": "%autolispext.debug.config.snippet.desc%", - "body": { - "type": "attachlisp", - "request": "attach", - "name": "AutoLISP Debug: Attach", - "attributes": { - "//": "%autolispext.packagejson.changeattachproc%" - } - } - } - ] - }, - { - "type": "launchlisp", - "label": "AutoLISP Debug: Launch", - "languages": [ - { - "id": "autolisp", - "aliases": [ - "AutoLISP", - "autolisp" - ], - "extensions": [ - ".lsp", - ".mnl" - ], - "configuration": "./extension/smartBracket/language-configuration.json" - }, - { - "id": "autolispdcl", - "aliases": [ - "AutoLISPDCL", - "autolispdcl" - ], - "extensions": [ - ".dcl" - ], - "configuration": "./extension/smartBracket/language-configuration-dcl.json" - } - ], - "configurationAttributes": { - "launch": { - "required": [ - "attributes" - ], - "properties": { - "attributes": { - "type": "object", - "description": "%autolispext.debug.launchconfig.desc%", - "default": "" - } - } - } - }, - "initialConfigurations": [ - { - "type": "launchlisp", - "request": "launch", - "name": "AutoLISP Debug: Launch", - "attributes": { - "//": "%autolispext.packagejson.changelaunchprog%" - } - } - ], - "configurationSnippets": [ - { - "label": "AutoLISP Debug: Launch", - "description": "%autolispext.debug.config.snippet.desc%", - "body": { - "type": "launchlisp", - "request": "launch", - "name": "AutoLISP Debug: Launch", - "attributes": { - "//": "%autolispext.packagejson.changelaunchprog%" - } - } - } - ] - } - ], - "viewsContainers": { - "activitybar": [ - { - "id": "Autolisp-PMSideBar", - "title": "%autolispext.project.projectmanager.title%", - "icon": "images/Project_Management.svg" - } - ] - }, - "views": { - "Autolisp-PMSideBar": [ - { - "id": "Autolisp-ProjectView", - "name": "%autolispext.project.projectview.name%", - "when": "" - }, - { - "id": "Autolisp-FindReplaceView", - "name": "%autolispext.project.findreplaceview.name%", - "when": "" - } - ] - }, - "menus": { - "view/title": [ - { - "command": "autolisp.createProject", - "group": "navigation@1", - "when": "view == Autolisp-ProjectView" - }, - { - "command": "autolisp.openProject", - "group": "navigation@2", - "when": "view == Autolisp-ProjectView" - }, - { - "command": "autolisp.addFile2Project", - "group": "navigation@3", - "when": "view == Autolisp-ProjectView && autolisp.hasProject" - }, - { - "command": "autolisp.refresh", - "group": "navigation@6", - "when": "view == Autolisp-ProjectView && autolisp.hasProject" - }, - { - "command": "autolisp.closeProject", - "group": "navigation@7", - "when": "view == Autolisp-ProjectView && autolisp.hasProject" - }, - { - "command": "autolisp.findInProject", - "group": "navigation@1", - "when": "view == Autolisp-FindReplaceView" - }, - { - "command": "autolisp.replaceInProject", - "group": "navigation@2", - "when": "view == Autolisp-FindReplaceView" - }, - { - "command": "autolisp.stopSearch", - "group": "navigation@3", - "when": "view == Autolisp-FindReplaceView" - }, - { - "command": "autolisp.clearSearchResults", - "group": "navigation@4", - "when": "view == Autolisp-FindReplaceView" - } - ], - "view/item/context": [ - { - "when": "view == Autolisp-ProjectView && viewItem == project", - "command": "autolisp.addFile2Project", - "group": "navigation@1" - }, - { - "when": "view == Autolisp-ProjectView && viewItem == project", - "command": "autolisp.refresh", - "group": "navigation@2" - }, - { - "when": "view == Autolisp-ProjectView && viewItem == project", - "command": "autolisp.SaveProject", - "group": "navigation@3" - }, - { - "when": "view == Autolisp-ProjectView && viewItem == project", - "command": "autolisp.SaveAll", - "group": "navigation@4" - }, - { - "when": "view == Autolisp-ProjectView && viewItem == project", - "command": "autolisp.closeProject", - "group": "navigation@5" - }, - { - "when": "view == Autolisp-ProjectView && viewItem == lspFile", - "command": "autolisp.removeFileFromProject", - "group": "navigation@1" - } - ], - "editor/context": [ - { - "when": "resourceLangId == autolisp", - "command": "autolisp.loadActiveFile", - "group": "navigation@1" - }, - { - "when": "resourceLangId == autolisp || resourceLangId == autolispdcl", - "command": "autolisp.openWebHelp", - "group": "navigation@2" - }, - { - "when": "resourceLangId == autolisp || resourceLangId == autolispdcl", - "command": "autolisp.insertFoldingRegion", - "group": "navigation@3" - }, - { - "when": "resourceLangId == autolisp", - "command": "autolisp.generateDocumentation", - "group": "navigation@4" - } - ], - "explorer/context": [ - { - "when": "resourceLangId == autolisp && autolisp.hasProject", - "command": "autolisp.addWorkspaceFile2Project", - "group": "navigation@1" - }, - { - "when": "explorerResourceIsFolder && autolisp.hasProject", - "command": "autolisp.addWorkspaceFile2Project", - "group": "navigation@1" - } - ] - } - }, - "scripts": { - "compile": "tsc -p ./", - "watch": "tsc -p -watch ./", - "test": "npm run compile && node ./out/test/runTest.js", - "cc": "npm run compile && node ./out/test/runTest.js --codecoverage", - "e2etest": "npm run compile && extest setup-and-run -c 1.57.0 ./out/test/e2e/*.js -m ./out/test/e2e/config.js -u", - "preinstall": "npx npm-force-resolutions" - }, - "devDependencies": { - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "@types/chai": "^4.2.15", - "@types/fs-extra": "^8.1.0", - "@types/mocha": "^5.2.7", - "@types/node": "^14.14.6", - "@types/vscode": "^1.57.0", - "chai": "^4.2.0", - "del": "^4.1.1", - "event-stream": "^4.0.1", - "gulp": "^5.0.1", - "gulp-cli": "^3.1.0", - "gulp-filter": "^5.1.0", - "gulp-sourcemaps": "^2.6.5", - "gulp-typescript": "^5.0.1", - "mocha": "^6.1.4", - "mochawesome": "^7.0.1", - "nyc": "^15.1.0", - "run-sequence": "^2.2.1", - "source-map": "0.7.4", - "source-map-resolve": "0.6.0", - "ts-mock-imports": "^1.3.3", - "ts-node": "^9.1.1", - "ts-sinon": "^2.0.1", - "tslint": "5.11.0", - "typescript": "^4.5.5", - "vscode-extension-tester": "^4.2.4", - "vscode-nls-dev": "^3.2.6", - "vscode-test": "^1.4.1" - }, - "dependencies": { - "execa": "0.7.0", - "fs-extra": "^8.1.0", - "jschardet": "2.1.1", - "os-locale": "5.0.0", - "vsce": "^2.5.0", - "vscode-languageclient": "4.2.0", - "vscode-nls": "3.2.5", - "vscode-ripgrep": "1.5.8" - } + "activationEvents": [ + "onDebug", + "onUri" + ], + "keywords": [ + "autolisp", + "dcl", + "lisp" + ], + "categories": [ + "Debuggers", + "Formatters", + "Programming Languages", + "Snippets" + ], + "version": "1.6.3", + "publisher": "Autodesk", + "name": "autolispext", + "main": "./out/extension", + "icon": "images/adsk_lisp.png", + "license": "SEE LICENSE IN LICENSE.md", + "displayName": "AutoCAD AutoLISP Extension", + "description": "This is a vscode extension for AutoCAD AutoLISP", + "bugs": { + "url": "https://github.com/Autodesk-AutoCAD/AutoLispExt/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/Autodesk-AutoCAD/AutoLispExt" + }, + "homepage": "https://github.com/Autodesk-AutoCAD/AutoLispExt", + "engines": { + "vscode": "^1.109.0" + }, + "contributes": { + "commands": [ + { + "command": "autolisp.loadActiveFile", + "category": "AutoLISP", + "title": "%autolispext.loadcurrentfile.title%" + }, + { + "command": "autolisp.openWebHelp", + "category": "AutoLISP", + "title": "%autolispext.openwebhelp.title%" + }, + { + "command": "autolisp.insertFoldingRegion", + "category": "AutoLISP", + "title": "%autolispext.regionsnippet.title%" + }, + { + "command": "autolisp.generateDocumentation", + "category": "AutoLISP", + "title": "%autolispext.commentdefun.title%" + }, + { + "command": "autolisp.createProject", + "category": "AutoLISP", + "title": "%autolispext.project.createproject.title%", + "icon": { + "dark": "images/dark/Create_Project.svg", + "light": "images/light/Create_Project.svg" + } + }, + { + "command": "autolisp.openProject", + "category": "AutoLISP", + "title": "%autolispext.project.openproject.title%", + "icon": { + "dark": "images/dark/Open_Project.svg", + "light": "images/light/Open_Project.svg" + } + }, + { + "command": "autolisp.closeProject", + "category": "AutoLISP", + "title": "%autolispext.project.closeproject.title%", + "icon": { + "dark": "images/dark/close.svg", + "light": "images/light/close.svg" + } + }, + { + "command": "autolisp.addFile2Project", + "category": "AutoLISP", + "title": "%autolispext.project.addfile.title%", + "icon": { + "dark": "images/dark/Add_LISP_File.svg", + "light": "images/light/Add_LISP_File.svg" + } + }, + { + "command": "autolisp.addWorkspaceFile2Project", + "category": "AutoLISP", + "title": "%autolispext.project.addworkspacefile.title%", + "icon": { + "dark": "images/dark/Add_LISP_File.svg", + "light": "images/light/Add_LISP_File.svg" + } + }, + { + "command": "autolisp.removeFileFromProject", + "category": "AutoLISP", + "title": "%autolispext.project.removefile.title%", + "icon": { + "dark": "images/dark/Remove_LISP_File.svg", + "light": "images/light/Remove_LISP_File.svg" + } + }, + { + "command": "autolisp.SaveProject", + "title": "%autolispext.project.saveproject.title%", + "category": "AutoLISP", + "icon": { + "dark": "images/dark/Save_Project.svg", + "light": "images/light/Save_Project.svg" + } + }, + { + "command": "autolisp.SaveAll", + "title": "%autolispext.project.saveall.title%", + "category": "AutoLISP", + "icon": { + "dark": "images/dark/Save_Project.svg", + "light": "images/light/Save_Project.svg" + } + }, + { + "command": "autolisp.refresh", + "category": "AutoLISP", + "title": "%autolispext.project.refresh.title%", + "icon": { + "dark": "images/dark/Refresh.svg", + "light": "images/light/Refresh.svg" + } + }, + { + "command": "autolisp.findInProject", + "category": "AutoLISP", + "title": "%autolispext.project.findinproject.title%", + "icon": { + "dark": "images/dark/Find.svg", + "light": "images/light/Find.svg" + } + }, + { + "command": "autolisp.replaceInProject", + "category": "AutoLISP", + "title": "%autolispext.project.replaceinproject.title%", + "icon": { + "dark": "images/dark/Replace.svg", + "light": "images/light/Replace.svg" + } + }, + { + "command": "autolisp.stopSearch", + "category": "AutoLISP", + "title": "%autolispext.project.stopsearch.title%", + "icon": { + "dark": "images/dark/search-stop.svg", + "light": "images/light/search-stop.svg" + } + }, + { + "command": "autolisp.clearSearchResults", + "category": "AutoLISP", + "title": "%autolispext.project.clearsearchresults.title%", + "icon": { + "dark": "images/dark/Clean.svg", + "light": "images/light/Clean.svg" + } + } + ], + "configuration": { + "type": "object", + "title": "%autolispext.configuration.title%", + "properties": { + "autolispext.format.MaxLineChars": { + "type": "number", + "default": 85, + "description": "%autolispext.configuration.maxlinechars.desc%" + }, + "autolispext.format.NarrowStyleIndent": { + "type": "number", + "default": 2, + "description": "%autolispext.configuration.narrowstyleindent.desc%" + }, + "autolispext.format.CloseParenthesisStyle": { + "type": "string", + "enum": [ + "Same line", + "New line with outer indentation" + ], + "default": "New line with outer indentation", + "description": "%autolispext.configuration.closeparenstyle.desc%" + }, + "autolispext.format.LongListFormatStyle": { + "type": "string", + "enum": [ + "Single column", + "Fill to margin" + ], + "default": "Fill to margin", + "description": "%autolispext.configuration.longlistformatstyle%" + }, + "autolispext.debug.AttachProcess": { + "type": "string", + "default": "", + "description": "%autolispext.configuration.attachprocess.desc%" + }, + "autolispext.debug.LaunchProgram": { + "type": "string", + "default": "", + "description": "%autolispext.configuration.launchprogram.desc%" + }, + "autolispext.debug.LaunchParameters": { + "type": "string", + "default": "", + "description": "%autolispext.configuration.launchparameters.desc%" + }, + "autolispext.help.TargetYear": { + "type": "string", + "enum": [ + "2018", + "2019", + "2020", + "2021", + "2022", + "2023", + "2024", + "2025" + ], + "default": "2025", + "description": "%autolispext.configuration.helptargetyear%" + } + } + }, + "configurationDefaults": { + "[lisp]": { + "files.autoGuessEncoding": true, + "editor.tabSize": 2, + "editor.detectIndentation": false, + "editor.quickSuggestions": { + "other": true, + "comments": false, + "strings": true + }, + "editor.wordBasedSuggestions": "allDocuments", + "editor.autoIndent": "none", + "editor.formatOnType": true, + "files.encoding": "utf8", + "editor.suggest.localityBonus": true, + "editor.wordSeparators": "&#^()[]|;'\".", + "editor.suggestSelection": "recentlyUsed" + }, + "[autolisp]": { + "files.autoGuessEncoding": true, + "editor.tabSize": 2, + "editor.wordBasedSuggestions": "allDocuments", + "editor.detectIndentation": false, + "editor.quickSuggestions": { + "other": true, + "comments": false, + "strings": true + }, + "editor.autoIndent": "none", + "editor.formatOnType": true, + "files.encoding": "utf8", + "editor.suggest.localityBonus": true, + "editor.wordSeparators": "&#^()[]|;'\".", + "editor.suggestSelection": "recentlyUsed" + }, + "[autolispdcl]": { + "files.autoGuessEncoding": true, + "editor.tabSize": 2, + "editor.detectIndentation": false, + "editor.quickSuggestions": { + "other": true, + "comments": false, + "strings": true + }, + "editor.wordBasedSuggestions": "off", + "editor.suggest.showWords": false, + "editor.suggest.showProperties": false, + "editor.autoIndent": "brackets", + "files.encoding": "utf8", + "editor.suggest.localityBonus": false, + "editor.wordSeparators": "=;{}\":", + "editor.suggestSelection": "first", + "editor.suggest.insertMode": "insert", + "editor.suggest.snippetsPreventQuickSuggestions": false + } + }, + "snippets": [ + { + "language": "autolisp", + "path": "./snippets/snippets.json" + } + ], + "grammars": [ + { + "language": "autolisp", + "scopeName": "source.autolisp", + "path": "./extension/syntaxes/autolisp.tmLanguage.json" + }, + { + "language": "autolispdcl", + "scopeName": "source.autolispdcl", + "path": "./extension/syntaxes/autolispdcl.tmLanguage.json" + } + ], + "debuggers": [ + { + "type": "attachlisp", + "label": "AutoLISP Debug: Attach", + "windows": { + "program": "${lispadapterpath}" + }, + "languages": [ + "autolisp", + "autolispdcl" + ], + "configurationAttributes": { + "attach": { + "required": [ + "attributes" + ], + "properties": { + "attributes": { + "type": "object", + "description": "%autolispext.debug.attachconfig.desc%", + "default": "" + } + } + } + }, + "initialConfigurations": [ + { + "type": "attachlisp", + "request": "attach", + "name": "AutoLISP Debug: Attach", + "attributes": { + "//": "%autolispext.packagejson.changeattachproc%" + } + } + ], + "configurationSnippets": [ + { + "label": "AutoLISP Debug: Attach", + "description": "%autolispext.debug.config.snippet.desc%", + "body": { + "type": "attachlisp", + "request": "attach", + "name": "AutoLISP Debug: Attach", + "attributes": { + "//": "%autolispext.packagejson.changeattachproc%" + } + } + } + ] + }, + { + "type": "launchlisp", + "label": "AutoLISP Debug: Launch", + "languages": [ + { + "id": "autolisp", + "aliases": [ + "AutoLISP", + "autolisp" + ], + "extensions": [ + ".lsp", + ".mnl" + ], + "configuration": "./extension/smartBracket/language-configuration.json" + }, + { + "id": "autolispdcl", + "aliases": [ + "AutoLISPDCL", + "autolispdcl" + ], + "extensions": [ + ".dcl" + ], + "configuration": "./extension/smartBracket/language-configuration-dcl.json" + } + ], + "configurationAttributes": { + "launch": { + "required": [ + "attributes" + ], + "properties": { + "attributes": { + "type": "object", + "description": "%autolispext.debug.launchconfig.desc%", + "default": "" + } + } + } + }, + "initialConfigurations": [ + { + "type": "launchlisp", + "request": "launch", + "name": "AutoLISP Debug: Launch", + "attributes": { + "//": "%autolispext.packagejson.changelaunchprog%" + } + } + ], + "configurationSnippets": [ + { + "label": "AutoLISP Debug: Launch", + "description": "%autolispext.debug.config.snippet.desc%", + "body": { + "type": "launchlisp", + "request": "launch", + "name": "AutoLISP Debug: Launch", + "attributes": { + "//": "%autolispext.packagejson.changelaunchprog%" + } + } + } + ] + } + ], + "breakpoints": [ + { + "language": "autolisp" + }, + { + "language": "autolispdcl" + }, + { + "language": "lisp" + } + ], + "languages": [ + { + "id": "autolisp", + "aliases": [ + "AutoLISP", + "autolisp" + ], + "extensions": [ + ".lsp", + ".mnl" + ], + "configuration": "./extension/smartBracket/language-configuration.json" + }, + { + "id": "autolispdcl", + "aliases": [ + "AutoLISPDCL", + "autolispdcl" + ], + "extensions": [ + ".dcl" + ], + "configuration": "./extension/smartBracket/language-configuration-dcl.json" + }, + { + "id": "autolispprj", + "aliases": [ + "AutoLISPPRJ" + ], + "extensions": [ + ".prj" + ] + } + ], + "viewsContainers": { + "activitybar": [ + { + "id": "Autolisp-PMSideBar", + "title": "%autolispext.project.projectmanager.title%", + "icon": "images/Project_Management.svg" + } + ] + }, + "views": { + "Autolisp-PMSideBar": [ + { + "id": "Autolisp-ProjectView", + "name": "%autolispext.project.projectview.name%", + "icon": "", + "when": "true" + }, + { + "id": "Autolisp-FindReplaceView", + "name": "%autolispext.project.findreplaceview.name%", + "icon": "", + "when": "true" + } + ] + }, + "menus": { + "view/title": [ + { + "command": "autolisp.createProject", + "group": "navigation@1", + "when": "view == Autolisp-ProjectView" + }, + { + "command": "autolisp.openProject", + "group": "navigation@2", + "when": "view == Autolisp-ProjectView" + }, + { + "command": "autolisp.addFile2Project", + "group": "navigation@3", + "when": "view == Autolisp-ProjectView && autolisp.hasProject" + }, + { + "command": "autolisp.refresh", + "group": "navigation@6", + "when": "view == Autolisp-ProjectView && autolisp.hasProject" + }, + { + "command": "autolisp.closeProject", + "group": "navigation@7", + "when": "view == Autolisp-ProjectView && autolisp.hasProject" + }, + { + "command": "autolisp.findInProject", + "group": "navigation@1", + "when": "view == Autolisp-FindReplaceView" + }, + { + "command": "autolisp.replaceInProject", + "group": "navigation@2", + "when": "view == Autolisp-FindReplaceView" + }, + { + "command": "autolisp.stopSearch", + "group": "navigation@3", + "when": "view == Autolisp-FindReplaceView" + }, + { + "command": "autolisp.clearSearchResults", + "group": "navigation@4", + "when": "view == Autolisp-FindReplaceView" + } + ], + "view/item/context": [ + { + "when": "view == Autolisp-ProjectView && viewItem == project", + "command": "autolisp.addFile2Project", + "group": "navigation@1" + }, + { + "when": "view == Autolisp-ProjectView && viewItem == project", + "command": "autolisp.refresh", + "group": "navigation@2" + }, + { + "when": "view == Autolisp-ProjectView && viewItem == project", + "command": "autolisp.SaveProject", + "group": "navigation@3" + }, + { + "when": "view == Autolisp-ProjectView && viewItem == project", + "command": "autolisp.SaveAll", + "group": "navigation@4" + }, + { + "when": "view == Autolisp-ProjectView && viewItem == project", + "command": "autolisp.closeProject", + "group": "navigation@5" + }, + { + "when": "view == Autolisp-ProjectView && viewItem == lspFile", + "command": "autolisp.removeFileFromProject", + "group": "navigation@1" + } + ], + "editor/context": [ + { + "when": "resourceLangId == autolisp", + "command": "autolisp.loadActiveFile", + "group": "navigation@1" + }, + { + "when": "resourceLangId == autolisp || resourceLangId == autolispdcl", + "command": "autolisp.openWebHelp", + "group": "navigation@2" + }, + { + "when": "resourceLangId == autolisp || resourceLangId == autolispdcl", + "command": "autolisp.insertFoldingRegion", + "group": "navigation@3" + }, + { + "when": "resourceLangId == autolisp", + "command": "autolisp.generateDocumentation", + "group": "navigation@4" + } + ], + "explorer/context": [ + { + "when": "resourceLangId == autolisp && autolisp.hasProject", + "command": "autolisp.addWorkspaceFile2Project", + "group": "navigation@1" + }, + { + "when": "explorerResourceIsFolder && autolisp.hasProject", + "command": "autolisp.addWorkspaceFile2Project", + "group": "navigation@1" + } + ] + } + }, + "scripts": { + "compile": "tsc -p ./", + "watch": "tsc -p -watch ./", + "preinstall": "npx npm-force-resolutions", + "test": "npm run compile && node ./out/test/runTest.js", + "cc": "npm run compile && node ./out/test/runTest.js --codecoverage", + "e2etest": "npm run compile && extest setup-and-run -c 1.109.0 ./out/test/e2e/*.js -m ./out/test/e2e/config.js -u" + }, + "devDependencies": { + "source-map": "0.7.4", + "source-map-resolve": "0.6.0", + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@types/fs-extra": "^8.1.0", + "@types/mocha": "^5.2.7", + "@vscode/test-electron": "^2.5.2", + "chai": "^4.2.0", + "del": "^4.1.1", + "event-stream": "^4.0.1", + "gulp": "^5.0.1", + "gulp-cli": "^3.1.0", + "gulp-filter": "^5.1.0", + "gulp-sourcemaps": "^2.6.5", + "gulp-typescript": "^5.0.1", + "mochawesome": "^7.0.1", + "run-sequence": "^2.2.1", + "ts-mock-imports": "^1.3.3", + "ts-node": "^9.1.1", + "ts-sinon": "^2.0.1", + "tslint": "5.11.0", + "typescript": "^5.5.4", + "vscode-nls-dev": "^4.0.4", + "vscode-test": "^1.4.1", + "@types/chai": "^4.2.15", + "@types/node": "^25.2.1", + "@vscode/test-cli": "^0.0.12", + "mocha": "^11.3.0", + "nyc": "^15.1.0", + "@types/vscode": "^1.109.0" + }, + "overrides": { + "@redhat-developer/page-objects": { + "type-fest": "4.41.0" + }, + "got": { + "type-fest": "4.26.1" + }, + "run-jxa": { + "type-fest": "2.0.0" + }, + "hasha": { + "type-fest": "0.8.0" + }, + "selenium-webdriver": { + "ws": "^8.18.3" + } + }, + "dependencies": { + "execa": "1.0.0", + "jschardet": "2.1.1", + "os-locale": "5.0.0", + "vscode-languageclient": "9.0.1", + "vscode-nls": "3.2.5", + "vscode-ripgrep": "1.5.8", + "@vscode/vsce": "^3.7.1", + "fs-extra": "^8.1.0", + "vscode-extension-tester": "^8.0.0" + } } diff --git a/tsconfig.json b/tsconfig.json index 534bccef..c4c31c9d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { "module": "commonjs", - "target": "es6", + "target": "es2015", "outDir": "out", "rootDir": "extension/src", - "lib": [ "es6" ], + "lib": [ "es2015", "DOM" ], "sourceMap": true, "alwaysStrict": true }, From db55090a9854687ea35b6d315224b09192a2e4b9 Mon Sep 17 00:00:00 2001 From: ToneseekerMusical <105748910+ToneseekerMusical@users.noreply.github.com> Date: Tue, 10 Feb 2026 20:05:31 -0500 Subject: [PATCH 2/3] replaced substr, trimLeft, trimRight with substring, trimStart, trimEnd, updated a few tests that were looking for outdated parameters to use the new parameters. --- eslint.config.mjs | 10 + .../smartBracket/language-configuration.json | 58 +- extension/src/astObjects/sexpression.ts | 1662 +- .../src/completion/autocompletionProvider.ts | 297 +- extension/src/documents.ts | 111 +- extension/src/format/autoIndent.ts | 1068 +- extension/src/format/formatter.ts | 124 +- extension/src/format/listreader.ts | 762 +- extension/src/process/processTree.ts | 38 +- extension/src/project/addFile2Project.ts | 158 +- .../project/findReplace/applyReplacement.ts | 174 +- .../project/findReplace/openSearchResult.ts | 110 +- extension/src/project/findReplace/ripGrep.ts | 6 +- extension/src/project/openProject.ts | 334 +- extension/src/project/saveProject.ts | 254 +- extension/src/providers/renameProvider.ts | 24 +- extension/src/test/runTest.ts | 3 +- extension/src/test/suite/AutoIndent.test.ts | 13 + extension/src/test/suite/codeCoverage.ts | 10 +- extension/src/test/suite/index.ts | 23 +- .../suite/providers.renameProvider.test.ts | 43 +- package-lock.json | 18918 +++++++--------- package.json | 91 +- tsconfig.json | 31 +- 24 files changed, 11372 insertions(+), 12950 deletions(-) create mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..0e279b2d --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,10 @@ +// @ts-check + +import eslint from '@eslint/js'; +import { defineConfig } from 'eslint/config'; +import tseslint from 'typescript-eslint'; + +export default defineConfig( + eslint.configs.recommended, + tseslint.configs.recommended, +); \ No newline at end of file diff --git a/extension/smartBracket/language-configuration.json b/extension/smartBracket/language-configuration.json index 2893a666..c4781cbf 100644 --- a/extension/smartBracket/language-configuration.json +++ b/extension/smartBracket/language-configuration.json @@ -1,30 +1,30 @@ { - "comments": { - "blockComment": [ ";|", "|;" ], - "lineComment": { "comment": ";" } - }, - "brackets": [ - ["(", ")"], - ["[", "]"] - ], - "autoClosingPairs": [ - {"open": "(", "close": ")"}, - {"open": "[", "close": "]"}, - {"open": "\"","close": "\"", "notIn": ["string"]}, - {"open": "#|", "close": "|#"}, - {"open": ";|", "close": "|;"} - ], - "surroundingPairs": [ - ["\"", "\""], - ["(", ")"], - ["[","]"], - ["#|", "|#"], - [";|", "|;"] - ], - "folding": { - "markers": { - "start": "^\\s*;\\s*#?region\\b", - "end": "^\\s*;\\s*#?endregion\\b" - } - } -} \ No newline at end of file + "comments": { + "blockComment": [";|", "|;"], + "lineComment": { "comment": ";" } + }, + "brackets": [ + ["(", ")"], + ["[", "]"] + ], + "autoClosingPairs": [ + { "open": "(", "close": ")" }, + { "open": "[", "close": "]" }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "#|", "close": "|#" }, + { "open": ";|", "close": "|;" } + ], + "surroundingPairs": [ + ["\"", "\""], + ["(", ")"], + ["[", "]"], + ["#|", "|#"], + [";|", "|;"] + ], + "folding": { + "markers": { + "start": "^\\s*;\\s*#?region\\b", + "end": "^\\s*;\\s*#?endregion\\b" + } + } +} diff --git a/extension/src/astObjects/sexpression.ts b/extension/src/astObjects/sexpression.ts index 6053ffef..dcc6485b 100644 --- a/extension/src/astObjects/sexpression.ts +++ b/extension/src/astObjects/sexpression.ts @@ -7,845 +7,845 @@ import { LispAtom } from './lispAtom'; // Use the Sexpression when you need associated tooling that can preserve whitespace // In all other cases, the LispContainer object has much better analytical tooling -enum LongListFmts{ - kSingleColumn, - kWideStyleSingleCol, - kFitToMargin - } - - let gMaxLineChars = 80; - let gIndentSpaces = 2; - let gClosedParenInSameLine = true; - let gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; - let gHasSetLongListFormat = false; - export function longListFormatAsSingleColum() { - gLongListFormatAsSingleColumn = LongListFmts.kSingleColumn; - gHasSetLongListFormat = true; - } - export function resetLongListFormatAsSingleColum() { - gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; - gHasSetLongListFormat = false; - } - - export function indentationForNarrowStyle(): number { - return gIndentSpaces; - } +enum LongListFmts { + kSingleColumn, + kWideStyleSingleCol, + kFitToMargin +} + +let gMaxLineChars = 80; +let gIndentSpaces = 2; +let gClosedParenInSameLine = true; +let gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; +let gHasSetLongListFormat = false; +export function longListFormatAsSingleColum() { + gLongListFormatAsSingleColumn = LongListFmts.kSingleColumn; + gHasSetLongListFormat = true; +} +export function resetLongListFormatAsSingleColum() { + gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; + gHasSetLongListFormat = false; +} + +export function indentationForNarrowStyle(): number { + return gIndentSpaces; +} class CustomRes { - succ: boolean = false; - res: string = undefined; + succ: boolean = false; + res: string = undefined; } interface CustomFormatCallback { (startColumn: number, index: number): CustomRes } class CustomFmtHandler { - fmtCallback: CustomFormatCallback; - constructor(handler: CustomFormatCallback) { - this.fmtCallback = handler; - } + fmtCallback: CustomFormatCallback; + constructor(handler: CustomFormatCallback) { + this.fmtCallback = handler; + } } export class Sexpression extends LispAtom { - atoms: Array; - linefeed: string; - - constructor() { - super(0, 0, ""); - this.atoms = new Array(); - this.linefeed = "\n"; - } - - setAtoms(atoms: Array): void { - this.atoms = atoms; - } - - addAtom(item) { - this.atoms.push(item); - } - - static getRawText(sexpr: Sexpression): string { - let ret = ''; - - if (!sexpr.atoms) - return ret; - - for (let atom of sexpr.atoms) { - if (atom instanceof Sexpression) { - ret += this.getRawText(atom as Sexpression); - } - else { - ret += atom.symbol; - } - ret += ' '; - } - - return ret; - } - - getAtomFromPos(loc: Position): LispAtom { - var line = loc.line; - var col = loc.character; - for (var i = 0; i < this.atoms.length; i++) { - if (this.atoms[i] instanceof Sexpression) { - var sexpr = this.atoms[i] as Sexpression; - var atom = sexpr.getAtomFromPos(loc); - if (atom != null) - return atom; - } - else { - if (line === this.atoms[i].line - && col >= this.atoms[i].column - && col <= this.atoms[i].column + this.atoms[i].length()) - return this.atoms[i]; - } - } - - return null; - } - - length(): number { - let res = 0; - this.atoms.forEach(atom => { - res += atom.length(); - }); - return res; - } - - symbLine(last: boolean = true): number { - if (this.atoms.length == 0) - return -1; - - if (last) { - let lastAtom = this.atoms[this.atoms.length - 1]; - return lastAtom.symbLine(); - } else { - return this.atoms[0].symbLine(); - } - } - - - size(): number { - return this.atoms.length; - } - - atomsCount(): number { - let count = 0; - for (let index = 0; index < this.atoms.length; index++) { - if (this.atoms[index] instanceof Sexpression) { - let subExpr = this.atoms[index] as Sexpression; - count += subExpr.atomsCount(); - } - else if (!this.atoms[index].isLeftParen() - && !this.atoms[index].isRightParen()) - count += 1; - } - return count; - } - - private addNewLine(numBlanks: number): string { - let res = ""; - res += this.linefeed; - res += " ".repeat(numBlanks); - return res; - } - - private isRightParenAtIndex(index: number): boolean { - if (index == this.atoms.length - 1 && this.atoms[index].isRightParen()) { - return true; - } - return false; - } - - private isMultilineString(res: string): boolean { - if (res.indexOf("\n") > -1 || res.indexOf(this.linefeed) > -1) { - return true; - } - return false; - } - - private formatSetq(startColumn: number): string { - // compute the "variable" column width - let secondColumnWidth = 0; - let realAtoms: number[] = []; - for (let i = 0; i < this.atoms.length; i++) { - if (this.atoms[i].isComment()) - continue; - realAtoms.push(i); - } - for (let m = 2; m < realAtoms.length; m += 2) { - let index = realAtoms[m]; - if (this.atoms[index].length() > secondColumnWidth) - secondColumnWidth = this.atoms[index].length(); - } - - let res = ""; - - let firstLine = ""; - // ( symbol - let cont = Sexpression.format(this.atoms[0], startColumn); - firstLine += cont; - - // handle comment - let startIndex = 1; - for (; startIndex < this.atoms.length; startIndex++) { - if (this.atoms[startIndex].isComment()) { - firstLine += Sexpression.format(this.atoms[startIndex], startColumn); - firstLine += this.addNewLine(startColumn + 1); - } - else { - // setq symbol - cont = Sexpression.format(this.atoms[startIndex], startColumn); - firstLine += cont; - firstLine += " "; - break; - } - } - - res += firstLine; - - let setqPrefixLength = 6; // (setq length, no regard the comment length - let variblesColumnPos = startColumn + setqPrefixLength; - let lastVariableIndex = 0; - let hasCloseParen = false; - for (let i = startIndex + 1; i < this.atoms.length; i++) { - - if (this.isRightParenAtIndex(i)) { - hasCloseParen = true; - break; - } - - if (this.atoms[i].isComment()) { - res += " " + Sexpression.format(this.atoms[i], startColumn); - res += this.addNewLine(variblesColumnPos); - continue; - } - - let atomIndex = realAtoms.indexOf(i); - if (atomIndex % 2 == 0) { - // varaible column - let varColumn = Sexpression.format(this.atoms[i], variblesColumnPos); - res += varColumn; - - lastVariableIndex = i; - } else if (atomIndex > -1) { - // value column - let varColumn = Sexpression.format(this.atoms[lastVariableIndex], variblesColumnPos); - let numspaces = secondColumnWidth - varColumn.length; - if (realAtoms.indexOf(i - 1) == -1) { - numspaces = secondColumnWidth; - } - res += " ".repeat(numspaces); - res += " "; - - // The 1 is the 1 blank space - res += Sexpression.format(this.atoms[i], variblesColumnPos + secondColumnWidth + 1); - - let nextAtom = this.atoms[i + 1]; - if (!this.isRightParenAtIndex(i + 1) && nextAtom && !nextAtom.isComment()) { - res += this.addNewLine(variblesColumnPos); - } - } - } - - // Last atom maybe ) - if (hasCloseParen) { - - let closeParenStr = this.formatLastAtom(startColumn, variblesColumnPos, this.isMultilineString(res)); - // Try to remove the extra line feed if the last atom is comment - if (closeParenStr.startsWith(this.linefeed)) { - let lastlinefeed = res.lastIndexOf(this.linefeed); - if (lastlinefeed > 0) { - let laststr = res.substr(lastlinefeed); - laststr = laststr.trimRight(); - if (laststr.length == 0) { - res = res.trimRight(); - } - } - } - res += closeParenStr; - } - - return res; - } - - public formatListToFillMargin(startColumn: number, alignCol?: number): string { - let res = ""; - - let leftMargin = gMaxLineChars - startColumn; - let line = Sexpression.format(this.atoms[0], startColumn); - let lineLen = line.length + startColumn; - let firstColWidth = line.length > 8 ? gIndentSpaces : line.length; - let secondColWidth = 0; - let alignWidth = firstColWidth; - let hasCloseParen = false; - for (let i = 1; i < this.atoms.length; i++) { - - if (this.isRightParenAtIndex(i)) { - hasCloseParen = true; - break; - } - - let realLineCont = line.trim(); - let trylayoutCont = Sexpression.format(this.atoms[i], lineLen); - let col = trylayoutCont.search("\n"); - let thisColWidth = col == -1 ? this.atoms[i].length() : col; - let isProperLength = (): boolean => { - if (realLineCont.length + thisColWidth < leftMargin) - return true; - return false; - } - - if (!this.atoms[i].isLineComment() && isProperLength()) { - - line += trylayoutCont; - line += " "; - lineLen += trylayoutCont.length + 1; - - if (secondColWidth == 0) { - secondColWidth = firstColWidth + this.atoms[i].length() + 1; - if (alignCol != undefined) { - alignWidth = secondColWidth; - } - } - - } else if (this.atoms[i].isLineComment()) { - - res += line; - if (!this.atoms[i - 1].isLineComment() - && this.atoms[i].symbLine() != this.atoms[i - 1].symbLine()) { - res += this.addNewLine(startColumn + alignWidth); - } - res += Sexpression.format(this.atoms[i], startColumn + alignWidth); - if (i + 1 < this.atoms.length && !this.isRightParenAtIndex(i + 1)) - res += this.addNewLine(startColumn + alignWidth); - - line = ""; - - lineLen = startColumn; - } else { - res += line; - - line = ""; - line += this.addNewLine(startColumn + alignWidth); - line += Sexpression.format(this.atoms[i], startColumn + alignWidth); - line += " " - lineLen = line.length; - } - } - - if (line != "") - res += line; - - // Last atom may be ) - if (hasCloseParen) { - // trim the extra blanks before ) - res = res.trimRight(); - res += this.formatLastAtom(startColumn, startColumn, this.isMultilineString(res)); - } - - return res; - } - - public formatListAsColumn(startColumn: number, alignCol?: number): string { - if (gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol) - return this.formatList(startColumn, 2, false, 1); - - if (startColumn + this.length() + this.atomsCount() < gMaxLineChars) - return this.formatAsPlainStyle(startColumn); - - return this.formatListToFillMargin(startColumn, alignCol); - } - - private formatDefun(startColumn: number): string { - let handledParam = false; - let paramListFormatter = (startColumn: number, index: number): CustomRes => { - let atom = this.atoms[index]; - if (!handledParam && atom instanceof Sexpression) { - handledParam = true; - let expr = atom as Sexpression; - return { succ: true, res: expr.formatListAsColumn(startColumn) }; - } else return { succ: false, res: undefined }; - } - - let paramsCustomCall = new CustomFmtHandler(paramListFormatter); - let firstlineatoms = 4; - let res = this.formatList(startColumn, firstlineatoms, false, undefined, paramsCustomCall); - return res; - } - - private formatLastAtom(startColumn: number, columnWidth: number, addedNewLine?: boolean): string { - let res = ""; - let lastAtom = this.atoms[this.atoms.length - 1]; - if (lastAtom.isRightParen()) { - if (!addedNewLine || gClosedParenInSameLine) { - if (!this.atoms[this.atoms.length - 2].isLineComment()) - return res += Sexpression.format(lastAtom, 0); - } - } - - if (lastAtom.isRightParen()) - columnWidth = startColumn; - res += this.addNewLine(columnWidth); - - res += Sexpression.format(lastAtom, columnWidth); - - return res; - } - - private formatLambda(startColumn: number): string { - let handledParam = false; - let paramListFormatter = (startColumn: number, index: number): CustomRes => { - let atom = this.atoms[index]; - if (!handledParam && atom instanceof Sexpression) { - handledParam = true; - let expr = atom as Sexpression; - let res; - if (expr.canBeFormatAsPlain(startColumn)) - res = expr.formatAsPlainStyle(startColumn); - else res = expr.formatListAsColumn(startColumn); - return { succ: true, res: res }; - } else return { succ: false, res: undefined }; - } - - let paramsCustomCall = new CustomFmtHandler(paramListFormatter); - let res = this.formatList(startColumn, 3, false, undefined, paramsCustomCall); - return res; - } - - - private formatList(startColumn: number, firstlineAtomCount: number, isCond?: boolean, alignIndex?: number, - customFmtHander?: CustomFmtHandler): string { - let res = ""; - let firstcolumnWdith = 0; - let lastIndex = firstlineAtomCount; - - let alignItemIndex = 2; - if (alignIndex) - alignItemIndex = alignIndex; - - let firstLine = ""; - let prevAtom = ""; - for (let i = 0; i < firstlineAtomCount && i < this.atoms.length - 1; i++) { - - if (startColumn + firstLine.length > gMaxLineChars) { - lastIndex = i; - break; - } - if (this.atoms[i].isLineComment()) { - lastIndex = i; - break; - } - let cont; - let cusRes = new CustomRes(); - if (customFmtHander) { - cusRes = customFmtHander.fmtCallback(startColumn + firstLine.length, i); - } - if (cusRes.succ) - cont = cusRes.res; - else { - cont = Sexpression.format(this.atoms[i], startColumn + firstLine.length, isCond); - // There is no space for plain format, so it needs to do narrow style format - if (prevAtom != "(" && prevAtom != "\'") { - if (cont.indexOf("\n") != -1) { - firstcolumnWdith = gIndentSpaces; - lastIndex = i; - break; - } - } - } - - firstLine += cont; - prevAtom = cont; - if (cont != "(" && cont != "\'") - firstLine += " "; - - if (i < alignItemIndex) - firstcolumnWdith = firstLine.length; - lastIndex = i + 1; - } - res += firstLine; - - let hasCloseParen = false; - if (alignIndex == undefined || !alignIndex) { - if (firstcolumnWdith > gIndentSpaces) - firstcolumnWdith = gIndentSpaces; - } - let columnWidth = startColumn + firstcolumnWdith; - - for (let j = lastIndex; j < this.atoms.length; j++) { - if (this.isRightParenAtIndex(j)) { - hasCloseParen = true; - break; - } - - if (this.atoms[j].isLineComment() && this.atoms[j - 1].symbLine() == this.atoms[j].symbLine()) { - let comment = Sexpression.format(this.atoms[j], columnWidth); - res += " " + comment; - continue; - } - - let prevAtom = j - 1; - if (prevAtom >= 0) { - let m = this.atoms[j - 1].symbLine(true) + 1; - let curAtomLine = this.atoms[j].symbLine(false); - for (; m < curAtomLine; m++) { - res += this.linefeed; - } - } - if (j != lastIndex || firstlineAtomCount != 1) { - res += this.addNewLine(columnWidth); - } - - let thisatom; - let cusRes = new CustomRes(); - if (customFmtHander) { - cusRes = customFmtHander.fmtCallback(columnWidth, j); - } - if (cusRes.succ) - thisatom = cusRes.res; - else - thisatom = Sexpression.format(this.atoms[j], columnWidth, isCond); - - res += thisatom; - } - - // Last atom may be ) - if (hasCloseParen) { - let str2Append = this.formatLastAtom(startColumn, columnWidth, this.isMultilineString(res)); - if(str2Append === ')') - res = res.trimRight(); // to avoid extra whitespace before the closing paren. - res += str2Append; - } - - return res; - } - - private formatForeach(startColumn: number): string { - return this.formatList(startColumn, 4); - } - - public formatAsPlainStyle(startColumn: number): string { - let res = ""; - let startPos = startColumn; - for (let i = 0; i < this.atoms.length; i++) { - let cont = Sexpression.format(this.atoms[i], startPos); - res += cont; - startPos += cont.length; - - if (this.atoms[i].isLineComment()) { - res += this.addNewLine(startColumn); - startPos = startColumn; - continue; - } - - if (!this.atoms[i].isLeftParen() - && i < this.atoms.length - 1 - && !this.atoms[i + 1].isRightParen()) { - res += " "; - startPos += 1; - } - } - return res; - } - - private isQuote(): boolean { - if (this.atoms.length < 2 || this.atoms[0].symbol != "\'") - return false; - return true; - } - private formatQuote(startColumn: number): string { - let quoteBody = this.atoms.slice(1); - let quoteExpr = new Sexpression(); - quoteExpr.setAtoms(quoteBody); - - let purgeAtoms = quoteExpr.isPureList(); - - if (purgeAtoms && !this.canBeFormatAsPlain(startColumn)) - return "\'" + quoteExpr.formatListAsColumn(startColumn + 1); - else - return "\'" + Sexpression.format(quoteExpr, startColumn + 1, true); - } - - private formatListAsNarrowStyle(startColumn: number): string { - return this.formatList(startColumn, 2, false); - } - - private formatListAsWideStyle(startColumn: number): string { - return this.formatList(startColumn, 3, false, 2); - } - - private isDotPairs(): boolean { - if (this.atoms.length == 5) { - for (let i = 0; i < this.atoms.length; i++) { - let atom = this.atoms[i]; - if (atom instanceof LispAtom) { - if (atom.symbol == ".") - return true; - } - } - } - return false; - } - - private getLispOperator(): LispAtom { - if (!this.atoms[0].isLeftParen()) - return this.atoms[0]; - for (let i = 1; i < this.atoms.length; i++) { - if (!this.atoms[i].isComment()) - return this.atoms[i]; - } - } - - public isPureList(): boolean { - for (let i = 0; i < this.atoms.length; i++) { - if (this.atoms[i] instanceof Sexpression) - return false; - } - - return true; - } - - public isPureLongList(): boolean { - if (this.atoms.length > 7) { - return this.isPureList(); - } - - return false; - } - - private isSameLineInRawText(): boolean { - let line = this.atoms[0].line; - - for (let i = 1; i < this.atoms.length; i++) { - if (this.atoms.length - 1 == i) { - if (this.atoms[i].isRightParen()) - break; - } - if (this.atoms[i].line != line) - return false; - } - - return true; - } - - // wide style formatting only applies to the case which fit the conditions: - // 1. The operator is public autolisp APIs - // 2. The operator and its first operand are in the same line before formatting - // - shouldFormatWideStyle(startColumn: number): boolean { - if (this.atoms.length < 3) - return false; - - let nearEndLine = (index: number): boolean => { - if (index > gMaxLineChars * 0.8) - return true; - - return false; - } - // function parameters long list is controled in defun formatter - if (this.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol && !nearEndLine(startColumn)) - return true; - - let op = this.getLispOperator(); - let opName = op.symbol.toLowerCase(); - if (!isInternalAutoLispOp(opName)) - return false; - - if (this.canBeFormatAsPlain(startColumn)) - return false; - - let opIndex = 0; - if (this.atoms[0].isLeftParen()) - opIndex = 1; - - if (this.atoms[opIndex].line == this.atoms[opIndex + 1].line) - return true; - - return false; - } - - private canBeFormatAsPlain(startColumn: number): boolean { - // Even if the expression is short, but in the raw text there is a linefeed, then - // it formats as nonplain style. - if (!this.isSameLineInRawText()) - return false; - - let op = this.getLispOperator(); - if (op == undefined) - return true; - let opsym = op.symbol; - - // setq can not layout in the same line - if (opsym == "setq") { - if (this.size() > 5) - return false - } - - for (let i = 2; i < this.atoms.length; i++) { - if (this.atoms[i] instanceof Sexpression) { - let subSxpr = this.atoms[i] as Sexpression; - if (!subSxpr.canBeFormatAsPlain(startColumn)) - return false; - } - else if (this.atoms[i].isLineComment() && i < this.atoms.length - 1) - return false; - } - - let tryFmtStr = Sexpression.format(op, startColumn); - if (tryFmtStr.indexOf("\n") != -1) - return false; - - if (this.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol) - return false; - - if (startColumn + this.length() + this.atomsCount() < gMaxLineChars) - return true; - - return false; - } - - public isValidSexpr(): boolean { - if (this.atoms.length === 0) { - return true; - } - - for (let i = 0; i < this.atoms.length; i++) { - const lispObj = this.atoms[i]; - if (lispObj instanceof Sexpression && !lispObj.isValidSexpr()) { - return false; - } - } - - if (this.isQuote()) { - let quoteBody = this.atoms.slice(1); - let quoteExpr = new Sexpression(); - quoteExpr.setAtoms(quoteBody); - return quoteExpr.isValidSexpr(); - } - - let hasLeftParen = this.atoms[0].isLeftParen(); - let hasRightParen = this.atoms[this.atoms.length - 1].isRightParen(); - if (hasLeftParen === hasRightParen) { - return true; - } - return false; - } - - /* There are 3 formating styles: - NARROW FORMATTING STYLE - Looks like - ;-------------------------------------------------- - (XXXX - yyyy - ...) - ;-------------------------------------------------- - PLAIN FORMATTING STYLE - The expression is formatted in PLAIN STYLE if its opening and - closing parenthesis stands on the same text line. - WIDE FORMATTING STYLE - Looks like - ;-------------------------------------------------- - (XXXX yyyy - ...) - ;-------------------------------------------------- */ - // - // - // The formatter has two seperate steps: - // a. Tokenize: break into the lisp code into individual syntax atoms - // b. Assemable the astObjects to expected format - // - // For the second phase it is a recursive algorithm. It layouts the astObjects from top to bottom, - // from left to right. And it follows the bellow rules to handle the individual cases: - // 1. For the Autolisp builtin APIs if the operator and the first operand are in the same - // before formatting, it will use "wide format style". For other cases it uses the "Narrow - // format style". - // 2. function parameters and the pure long list can be layout single column or fit to margin - // 3. If the space is enough, use the plain format style except the keywords mentioned in 1 - // 4. Dot pairs as (test . 1234) should always as plain style - // 5. Line comments (; ;; ;;; ;_) stay at the same line before formatting, - // If it is in one line, it has the same indent in that scope. - // And we treat the block comments as a common atom - // - // All the atom index start from 0, and include the left parenthes - static format(exp: LispAtom|Sexpression, startColumn: number, asCond?: boolean): string { - if (exp instanceof Sexpression) { - let length = exp.length(); - if (exp.isDotPairs()) { - return exp.formatAsPlainStyle(startColumn); - } - else if (exp.isQuote()) { - return exp.formatQuote(startColumn); - } - else if (length > 4) { - let lispOperator = exp.getLispOperator(); - if (exp.atoms[0].isLeftParen() && - !exp.canBeFormatAsPlain(startColumn)) { - - let opName = lispOperator.symbol.toLowerCase(); - - if (opName == "if" || opName == "repeat" || opName == "while") - return exp.formatList(startColumn, 3); - if (opName == "lambda") - return exp.formatLambda(startColumn); - else if (opName == "cond") - return exp.formatList(startColumn, 2, true); - else if (opName == "setq") { - return exp.formatSetq(startColumn); - } - else if (opName === "foreach" || opName === "vlax-for") { - return exp.formatForeach(startColumn); - } - else if (opName == "defun" || opName == "defun-q") { - return exp.formatDefun(startColumn); - } else if (exp.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kFitToMargin) - return exp.formatListAsColumn(startColumn, 3); - - if (asCond) { - // cond branch internal expression align with the outer left parenthes - return exp.formatList(startColumn, 1); - } - - if (exp.shouldFormatWideStyle(startColumn)) - return exp.formatListAsWideStyle(startColumn); - else { - return exp.formatListAsNarrowStyle(startColumn); - } - } - } - - return exp.formatAsPlainStyle(startColumn); - } else { // was LispAtom - return exp.symbol; - } - } - - formatting(startColumn: number, linefeed?: string): string { - - gMaxLineChars = maximumLineChars(); - if (gMaxLineChars < 60) - gMaxLineChars = 60; - - gIndentSpaces = indentSpaces(); - if (gIndentSpaces < 1) - gIndentSpaces = 1; - else if (gIndentSpaces > 6) - gIndentSpaces = 6; - - let parenStyle = closeParenStyle(); - if (parenStyle.toString().toLowerCase() == "same line") - gClosedParenInSameLine = true; - else gClosedParenInSameLine = false; - - if (!gHasSetLongListFormat) { - let listFmtStyle = longListFormatStyle(); - if (listFmtStyle.toString().toLowerCase() == "single column") - gLongListFormatAsSingleColumn = LongListFmts.kWideStyleSingleCol; - else gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; - } - - if (linefeed) - this.linefeed = linefeed; - - return Sexpression.format(this, startColumn); - } + atoms: Array; + linefeed: string; + + constructor() { + super(0, 0, ""); + this.atoms = new Array(); + this.linefeed = "\n"; + } + + setAtoms(atoms: Array): void { + this.atoms = atoms; + } + + addAtom(item) { + this.atoms.push(item); + } + + static getRawText(sexpr: Sexpression): string { + let ret = ''; + + if (!sexpr.atoms) + return ret; + + for (let atom of sexpr.atoms) { + if (atom instanceof Sexpression) { + ret += this.getRawText(atom as Sexpression); + } + else { + ret += atom.symbol; + } + ret += ' '; + } + + return ret; + } + + getAtomFromPos(loc: Position): LispAtom { + var line = loc.line; + var col = loc.character; + for (var i = 0; i < this.atoms.length; i++) { + if (this.atoms[i] instanceof Sexpression) { + var sexpr = this.atoms[i] as Sexpression; + var atom = sexpr.getAtomFromPos(loc); + if (atom != null) + return atom; + } + else { + if (line === this.atoms[i].line + && col >= this.atoms[i].column + && col <= this.atoms[i].column + this.atoms[i].length()) + return this.atoms[i]; + } + } + + return null; + } + + length(): number { + let res = 0; + this.atoms.forEach(atom => { + res += atom.length(); + }); + return res; + } + + symbLine(last: boolean = true): number { + if (this.atoms.length == 0) + return -1; + + if (last) { + let lastAtom = this.atoms[this.atoms.length - 1]; + return lastAtom.symbLine(); + } else { + return this.atoms[0].symbLine(); + } + } + + + size(): number { + return this.atoms.length; + } + + atomsCount(): number { + let count = 0; + for (let index = 0; index < this.atoms.length; index++) { + if (this.atoms[index] instanceof Sexpression) { + let subExpr = this.atoms[index] as Sexpression; + count += subExpr.atomsCount(); + } + else if (!this.atoms[index].isLeftParen() + && !this.atoms[index].isRightParen()) + count += 1; + } + return count; + } + + private addNewLine(numBlanks: number): string { + let res = ""; + res += this.linefeed; + res += " ".repeat(numBlanks); + return res; + } + + private isRightParenAtIndex(index: number): boolean { + if (index == this.atoms.length - 1 && this.atoms[index].isRightParen()) { + return true; + } + return false; + } + + private isMultilineString(res: string): boolean { + if (res.indexOf("\n") > -1 || res.indexOf(this.linefeed) > -1) { + return true; + } + return false; + } + + private formatSetq(startColumn: number): string { + // compute the "variable" column width + let secondColumnWidth = 0; + let realAtoms: number[] = []; + for (let i = 0; i < this.atoms.length; i++) { + if (this.atoms[i].isComment()) + continue; + realAtoms.push(i); + } + for (let m = 2; m < realAtoms.length; m += 2) { + let index = realAtoms[m]; + if (this.atoms[index].length() > secondColumnWidth) + secondColumnWidth = this.atoms[index].length(); + } + + let res = ""; + + let firstLine = ""; + // ( symbol + let cont = Sexpression.format(this.atoms[0], startColumn); + firstLine += cont; + + // handle comment + let startIndex = 1; + for (; startIndex < this.atoms.length; startIndex++) { + if (this.atoms[startIndex].isComment()) { + firstLine += Sexpression.format(this.atoms[startIndex], startColumn); + firstLine += this.addNewLine(startColumn + 1); + } + else { + // setq symbol + cont = Sexpression.format(this.atoms[startIndex], startColumn); + firstLine += cont; + firstLine += " "; + break; + } + } + + res += firstLine; + + let setqPrefixLength = 6; // (setq length, no regard the comment length + let variblesColumnPos = startColumn + setqPrefixLength; + let lastVariableIndex = 0; + let hasCloseParen = false; + for (let i = startIndex + 1; i < this.atoms.length; i++) { + + if (this.isRightParenAtIndex(i)) { + hasCloseParen = true; + break; + } + + if (this.atoms[i].isComment()) { + res += " " + Sexpression.format(this.atoms[i], startColumn); + res += this.addNewLine(variblesColumnPos); + continue; + } + + let atomIndex = realAtoms.indexOf(i); + if (atomIndex % 2 == 0) { + // varaible column + let varColumn = Sexpression.format(this.atoms[i], variblesColumnPos); + res += varColumn; + + lastVariableIndex = i; + } else if (atomIndex > -1) { + // value column + let varColumn = Sexpression.format(this.atoms[lastVariableIndex], variblesColumnPos); + let numspaces = secondColumnWidth - varColumn.length; + if (realAtoms.indexOf(i - 1) == -1) { + numspaces = secondColumnWidth; + } + res += " ".repeat(numspaces); + res += " "; + + // The 1 is the 1 blank space + res += Sexpression.format(this.atoms[i], variblesColumnPos + secondColumnWidth + 1); + + let nextAtom = this.atoms[i + 1]; + if (!this.isRightParenAtIndex(i + 1) && nextAtom && !nextAtom.isComment()) { + res += this.addNewLine(variblesColumnPos); + } + } + } + + // Last atom maybe ) + if (hasCloseParen) { + + let closeParenStr = this.formatLastAtom(startColumn, variblesColumnPos, this.isMultilineString(res)); + // Try to remove the extra line feed if the last atom is comment + if (closeParenStr.startsWith(this.linefeed)) { + let lastlinefeed = res.lastIndexOf(this.linefeed); + if (lastlinefeed > 0) { + let laststr = res.substring(lastlinefeed); + laststr = laststr.trimEnd(); + if (laststr.length == 0) { + res = res.trimEnd(); + } + } + } + res += closeParenStr; + } + + return res; + } + + public formatListToFillMargin(startColumn: number, alignCol?: number): string { + let res = ""; + + let leftMargin = gMaxLineChars - startColumn; + let line = Sexpression.format(this.atoms[0], startColumn); + let lineLen = line.length + startColumn; + let firstColWidth = line.length > 8 ? gIndentSpaces : line.length; + let secondColWidth = 0; + let alignWidth = firstColWidth; + let hasCloseParen = false; + for (let i = 1; i < this.atoms.length; i++) { + + if (this.isRightParenAtIndex(i)) { + hasCloseParen = true; + break; + } + + let realLineCont = line.trim(); + let trylayoutCont = Sexpression.format(this.atoms[i], lineLen); + let col = trylayoutCont.search("\n"); + let thisColWidth = col == -1 ? this.atoms[i].length() : col; + let isProperLength = (): boolean => { + if (realLineCont.length + thisColWidth < leftMargin) + return true; + return false; + } + + if (!this.atoms[i].isLineComment() && isProperLength()) { + + line += trylayoutCont; + line += " "; + lineLen += trylayoutCont.length + 1; + + if (secondColWidth == 0) { + secondColWidth = firstColWidth + this.atoms[i].length() + 1; + if (alignCol != undefined) { + alignWidth = secondColWidth; + } + } + + } else if (this.atoms[i].isLineComment()) { + + res += line; + if (!this.atoms[i - 1].isLineComment() + && this.atoms[i].symbLine() != this.atoms[i - 1].symbLine()) { + res += this.addNewLine(startColumn + alignWidth); + } + res += Sexpression.format(this.atoms[i], startColumn + alignWidth); + if (i + 1 < this.atoms.length && !this.isRightParenAtIndex(i + 1)) + res += this.addNewLine(startColumn + alignWidth); + + line = ""; + + lineLen = startColumn; + } else { + res += line; + + line = ""; + line += this.addNewLine(startColumn + alignWidth); + line += Sexpression.format(this.atoms[i], startColumn + alignWidth); + line += " " + lineLen = line.length; + } + } + + if (line != "") + res += line; + + // Last atom may be ) + if (hasCloseParen) { + // trim the extra blanks before ) + res = res.trimEnd(); + res += this.formatLastAtom(startColumn, startColumn, this.isMultilineString(res)); + } + + return res; + } + + public formatListAsColumn(startColumn: number, alignCol?: number): string { + if (gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol) + return this.formatList(startColumn, 2, false, 1); + + if (startColumn + this.length() + this.atomsCount() < gMaxLineChars) + return this.formatAsPlainStyle(startColumn); + + return this.formatListToFillMargin(startColumn, alignCol); + } + + private formatDefun(startColumn: number): string { + let handledParam = false; + let paramListFormatter = (startColumn: number, index: number): CustomRes => { + let atom = this.atoms[index]; + if (!handledParam && atom instanceof Sexpression) { + handledParam = true; + let expr = atom as Sexpression; + return { succ: true, res: expr.formatListAsColumn(startColumn) }; + } else return { succ: false, res: undefined }; + } + + let paramsCustomCall = new CustomFmtHandler(paramListFormatter); + let firstlineatoms = 4; + let res = this.formatList(startColumn, firstlineatoms, false, undefined, paramsCustomCall); + return res; + } + + private formatLastAtom(startColumn: number, columnWidth: number, addedNewLine?: boolean): string { + let res = ""; + let lastAtom = this.atoms[this.atoms.length - 1]; + if (lastAtom.isRightParen()) { + if (!addedNewLine || gClosedParenInSameLine) { + if (!this.atoms[this.atoms.length - 2].isLineComment()) + return res += Sexpression.format(lastAtom, 0); + } + } + + if (lastAtom.isRightParen()) + columnWidth = startColumn; + res += this.addNewLine(columnWidth); + + res += Sexpression.format(lastAtom, columnWidth); + + return res; + } + + private formatLambda(startColumn: number): string { + let handledParam = false; + let paramListFormatter = (startColumn: number, index: number): CustomRes => { + let atom = this.atoms[index]; + if (!handledParam && atom instanceof Sexpression) { + handledParam = true; + let expr = atom as Sexpression; + let res; + if (expr.canBeFormatAsPlain(startColumn)) + res = expr.formatAsPlainStyle(startColumn); + else res = expr.formatListAsColumn(startColumn); + return { succ: true, res: res }; + } else return { succ: false, res: undefined }; + } + + let paramsCustomCall = new CustomFmtHandler(paramListFormatter); + let res = this.formatList(startColumn, 3, false, undefined, paramsCustomCall); + return res; + } + + + private formatList(startColumn: number, firstlineAtomCount: number, isCond?: boolean, alignIndex?: number, + customFmtHander?: CustomFmtHandler): string { + let res = ""; + let firstcolumnWdith = 0; + let lastIndex = firstlineAtomCount; + + let alignItemIndex = 2; + if (alignIndex) + alignItemIndex = alignIndex; + + let firstLine = ""; + let prevAtom = ""; + for (let i = 0; i < firstlineAtomCount && i < this.atoms.length - 1; i++) { + + if (startColumn + firstLine.length > gMaxLineChars) { + lastIndex = i; + break; + } + if (this.atoms[i].isLineComment()) { + lastIndex = i; + break; + } + let cont; + let cusRes = new CustomRes(); + if (customFmtHander) { + cusRes = customFmtHander.fmtCallback(startColumn + firstLine.length, i); + } + if (cusRes.succ) + cont = cusRes.res; + else { + cont = Sexpression.format(this.atoms[i], startColumn + firstLine.length, isCond); + // There is no space for plain format, so it needs to do narrow style format + if (prevAtom != "(" && prevAtom != "\'") { + if (cont.indexOf("\n") != -1) { + firstcolumnWdith = gIndentSpaces; + lastIndex = i; + break; + } + } + } + + firstLine += cont; + prevAtom = cont; + if (cont != "(" && cont != "\'") + firstLine += " "; + + if (i < alignItemIndex) + firstcolumnWdith = firstLine.length; + lastIndex = i + 1; + } + res += firstLine; + + let hasCloseParen = false; + if (alignIndex == undefined || !alignIndex) { + if (firstcolumnWdith > gIndentSpaces) + firstcolumnWdith = gIndentSpaces; + } + let columnWidth = startColumn + firstcolumnWdith; + + for (let j = lastIndex; j < this.atoms.length; j++) { + if (this.isRightParenAtIndex(j)) { + hasCloseParen = true; + break; + } + + if (this.atoms[j].isLineComment() && this.atoms[j - 1].symbLine() == this.atoms[j].symbLine()) { + let comment = Sexpression.format(this.atoms[j], columnWidth); + res += " " + comment; + continue; + } + + let prevAtom = j - 1; + if (prevAtom >= 0) { + let m = this.atoms[j - 1].symbLine(true) + 1; + let curAtomLine = this.atoms[j].symbLine(false); + for (; m < curAtomLine; m++) { + res += this.linefeed; + } + } + if (j != lastIndex || firstlineAtomCount != 1) { + res += this.addNewLine(columnWidth); + } + + let thisatom; + let cusRes = new CustomRes(); + if (customFmtHander) { + cusRes = customFmtHander.fmtCallback(columnWidth, j); + } + if (cusRes.succ) + thisatom = cusRes.res; + else + thisatom = Sexpression.format(this.atoms[j], columnWidth, isCond); + + res += thisatom; + } + + // Last atom may be ) + if (hasCloseParen) { + let str2Append = this.formatLastAtom(startColumn, columnWidth, this.isMultilineString(res)); + if (str2Append === ')') + res = res.trimEnd(); // to avoid extra whitespace before the closing paren. + res += str2Append; + } + + return res; + } + + private formatForeach(startColumn: number): string { + return this.formatList(startColumn, 4); + } + + public formatAsPlainStyle(startColumn: number): string { + let res = ""; + let startPos = startColumn; + for (let i = 0; i < this.atoms.length; i++) { + let cont = Sexpression.format(this.atoms[i], startPos); + res += cont; + startPos += cont.length; + + if (this.atoms[i].isLineComment()) { + res += this.addNewLine(startColumn); + startPos = startColumn; + continue; + } + + if (!this.atoms[i].isLeftParen() + && i < this.atoms.length - 1 + && !this.atoms[i + 1].isRightParen()) { + res += " "; + startPos += 1; + } + } + return res; + } + + private isQuote(): boolean { + if (this.atoms.length < 2 || this.atoms[0].symbol != "\'") + return false; + return true; + } + private formatQuote(startColumn: number): string { + let quoteBody = this.atoms.slice(1); + let quoteExpr = new Sexpression(); + quoteExpr.setAtoms(quoteBody); + + let purgeAtoms = quoteExpr.isPureList(); + + if (purgeAtoms && !this.canBeFormatAsPlain(startColumn)) + return "\'" + quoteExpr.formatListAsColumn(startColumn + 1); + else + return "\'" + Sexpression.format(quoteExpr, startColumn + 1, true); + } + + private formatListAsNarrowStyle(startColumn: number): string { + return this.formatList(startColumn, 2, false); + } + + private formatListAsWideStyle(startColumn: number): string { + return this.formatList(startColumn, 3, false, 2); + } + + private isDotPairs(): boolean { + if (this.atoms.length == 5) { + for (let i = 0; i < this.atoms.length; i++) { + let atom = this.atoms[i]; + if (atom instanceof LispAtom) { + if (atom.symbol == ".") + return true; + } + } + } + return false; + } + + private getLispOperator(): LispAtom { + if (!this.atoms[0].isLeftParen()) + return this.atoms[0]; + for (let i = 1; i < this.atoms.length; i++) { + if (!this.atoms[i].isComment()) + return this.atoms[i]; + } + } + + public isPureList(): boolean { + for (let i = 0; i < this.atoms.length; i++) { + if (this.atoms[i] instanceof Sexpression) + return false; + } + + return true; + } + + public isPureLongList(): boolean { + if (this.atoms.length > 7) { + return this.isPureList(); + } + + return false; + } + + private isSameLineInRawText(): boolean { + let line = this.atoms[0].line; + + for (let i = 1; i < this.atoms.length; i++) { + if (this.atoms.length - 1 == i) { + if (this.atoms[i].isRightParen()) + break; + } + if (this.atoms[i].line != line) + return false; + } + + return true; + } + + // wide style formatting only applies to the case which fit the conditions: + // 1. The operator is public autolisp APIs + // 2. The operator and its first operand are in the same line before formatting + // + shouldFormatWideStyle(startColumn: number): boolean { + if (this.atoms.length < 3) + return false; + + let nearEndLine = (index: number): boolean => { + if (index > gMaxLineChars * 0.8) + return true; + + return false; + } + // function parameters long list is controled in defun formatter + if (this.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol && !nearEndLine(startColumn)) + return true; + + let op = this.getLispOperator(); + let opName = op.symbol.toLowerCase(); + if (!isInternalAutoLispOp(opName)) + return false; + + if (this.canBeFormatAsPlain(startColumn)) + return false; + + let opIndex = 0; + if (this.atoms[0].isLeftParen()) + opIndex = 1; + + if (this.atoms[opIndex].line == this.atoms[opIndex + 1].line) + return true; + + return false; + } + + private canBeFormatAsPlain(startColumn: number): boolean { + // Even if the expression is short, but in the raw text there is a linefeed, then + // it formats as nonplain style. + if (!this.isSameLineInRawText()) + return false; + + let op = this.getLispOperator(); + if (op == undefined) + return true; + let opsym = op.symbol; + + // setq can not layout in the same line + if (opsym == "setq") { + if (this.size() > 5) + return false + } + + for (let i = 2; i < this.atoms.length; i++) { + if (this.atoms[i] instanceof Sexpression) { + let subSxpr = this.atoms[i] as Sexpression; + if (!subSxpr.canBeFormatAsPlain(startColumn)) + return false; + } + else if (this.atoms[i].isLineComment() && i < this.atoms.length - 1) + return false; + } + + let tryFmtStr = Sexpression.format(op, startColumn); + if (tryFmtStr.indexOf("\n") != -1) + return false; + + if (this.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol) + return false; + + if (startColumn + this.length() + this.atomsCount() < gMaxLineChars) + return true; + + return false; + } + + public isValidSexpr(): boolean { + if (this.atoms.length === 0) { + return true; + } + + for (let i = 0; i < this.atoms.length; i++) { + const lispObj = this.atoms[i]; + if (lispObj instanceof Sexpression && !lispObj.isValidSexpr()) { + return false; + } + } + + if (this.isQuote()) { + let quoteBody = this.atoms.slice(1); + let quoteExpr = new Sexpression(); + quoteExpr.setAtoms(quoteBody); + return quoteExpr.isValidSexpr(); + } + + let hasLeftParen = this.atoms[0].isLeftParen(); + let hasRightParen = this.atoms[this.atoms.length - 1].isRightParen(); + if (hasLeftParen === hasRightParen) { + return true; + } + return false; + } + + /* There are 3 formating styles: + NARROW FORMATTING STYLE + Looks like + ;-------------------------------------------------- + (XXXX + yyyy + ...) + ;-------------------------------------------------- + PLAIN FORMATTING STYLE + The expression is formatted in PLAIN STYLE if its opening and + closing parenthesis stands on the same text line. + WIDE FORMATTING STYLE + Looks like + ;-------------------------------------------------- + (XXXX yyyy + ...) + ;-------------------------------------------------- */ + // + // + // The formatter has two seperate steps: + // a. Tokenize: break into the lisp code into individual syntax atoms + // b. Assemable the astObjects to expected format + // + // For the second phase it is a recursive algorithm. It layouts the astObjects from top to bottom, + // from left to right. And it follows the bellow rules to handle the individual cases: + // 1. For the Autolisp builtin APIs if the operator and the first operand are in the same + // before formatting, it will use "wide format style". For other cases it uses the "Narrow + // format style". + // 2. function parameters and the pure long list can be layout single column or fit to margin + // 3. If the space is enough, use the plain format style except the keywords mentioned in 1 + // 4. Dot pairs as (test . 1234) should always as plain style + // 5. Line comments (; ;; ;;; ;_) stay at the same line before formatting, + // If it is in one line, it has the same indent in that scope. + // And we treat the block comments as a common atom + // + // All the atom index start from 0, and include the left parenthes + static format(exp: LispAtom | Sexpression, startColumn: number, asCond?: boolean): string { + if (exp instanceof Sexpression) { + let length = exp.length(); + if (exp.isDotPairs()) { + return exp.formatAsPlainStyle(startColumn); + } + else if (exp.isQuote()) { + return exp.formatQuote(startColumn); + } + else if (length > 4) { + let lispOperator = exp.getLispOperator(); + if (exp.atoms[0].isLeftParen() && + !exp.canBeFormatAsPlain(startColumn)) { + + let opName = lispOperator.symbol.toLowerCase(); + + if (opName == "if" || opName == "repeat" || opName == "while") + return exp.formatList(startColumn, 3); + if (opName == "lambda") + return exp.formatLambda(startColumn); + else if (opName == "cond") + return exp.formatList(startColumn, 2, true); + else if (opName == "setq") { + return exp.formatSetq(startColumn); + } + else if (opName === "foreach" || opName === "vlax-for") { + return exp.formatForeach(startColumn); + } + else if (opName == "defun" || opName == "defun-q") { + return exp.formatDefun(startColumn); + } else if (exp.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kFitToMargin) + return exp.formatListAsColumn(startColumn, 3); + + if (asCond) { + // cond branch internal expression align with the outer left parenthes + return exp.formatList(startColumn, 1); + } + + if (exp.shouldFormatWideStyle(startColumn)) + return exp.formatListAsWideStyle(startColumn); + else { + return exp.formatListAsNarrowStyle(startColumn); + } + } + } + + return exp.formatAsPlainStyle(startColumn); + } else { // was LispAtom + return exp.symbol; + } + } + + formatting(startColumn: number, linefeed?: string): string { + + gMaxLineChars = maximumLineChars(); + if (gMaxLineChars < 60) + gMaxLineChars = 60; + + gIndentSpaces = indentSpaces(); + if (gIndentSpaces < 1) + gIndentSpaces = 1; + else if (gIndentSpaces > 6) + gIndentSpaces = 6; + + let parenStyle = closeParenStyle(); + if (parenStyle.toString().toLowerCase() == "same line") + gClosedParenInSameLine = true; + else gClosedParenInSameLine = false; + + if (!gHasSetLongListFormat) { + let listFmtStyle = longListFormatStyle(); + if (listFmtStyle.toString().toLowerCase() == "single column") + gLongListFormatAsSingleColumn = LongListFmts.kWideStyleSingleCol; + else gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; + } + + if (linefeed) + this.linefeed = linefeed; + + return Sexpression.format(this, startColumn); + } } diff --git a/extension/src/completion/autocompletionProvider.ts b/extension/src/completion/autocompletionProvider.ts index 062d658c..2b617e14 100644 --- a/extension/src/completion/autocompletionProvider.ts +++ b/extension/src/completion/autocompletionProvider.ts @@ -1,172 +1,171 @@ import * as vscode from 'vscode'; import * as os from 'os'; import { isCursorInDoubleQuoteExpr } from "../format/autoIndent"; -import { AutoLispExt} from "../context"; +import { AutoLispExt } from "../context"; export function isInternalAutoLispOp(item: string): boolean { - if (!item) - return false; - - for (let i = 0; i < AutoLispExt.Resources.internalLispFuncs.length; i++) { - if (AutoLispExt.Resources.internalLispFuncs[i] === item) - return true; - } - return false; + if (!item) + return false; + + for (let i = 0; i < AutoLispExt.Resources.internalLispFuncs.length; i++) { + if (AutoLispExt.Resources.internalLispFuncs[i] === item) + return true; + } + return false; } export function getCmdAndVarsCompletionCandidates(allCandiates: string[], word: string, userInputIsUpper: boolean): Array { - var hasUnderline = false; - if (word[0] == "_") { - hasUnderline = true; - word = word.substring(1); - } - - var hasDash = false; - if (word[0] == "-") { - hasDash = true; - } - - let suggestions: Array = []; - allCandiates.forEach((item) => { - var candidate = item; - if (userInputIsUpper) - candidate = item.toUpperCase(); - else - candidate = item.toLowerCase(); - - if (candidate.startsWith(word)) { - var label = candidate; - - // The _ symbol has special mean in AutoCAD commands, so we add the prefix if it matches the command name - if (hasUnderline) - label = "_" + label; - - const completion = new vscode.CompletionItem(label); - - // to work around the middle dash case issue in vscode, when insert it ignores the dash - if (hasDash) - completion.insertText = label.substring(1); - - suggestions.push(completion); - } - }); - - return suggestions; + var hasUnderline = false; + if (word[0] == "_") { + hasUnderline = true; + word = word.substring(1); + } + + var hasDash = false; + if (word[0] == "-") { + hasDash = true; + } + + let suggestions: Array = []; + allCandiates.forEach((item) => { + var candidate = item; + if (userInputIsUpper) + candidate = item.toUpperCase(); + else + candidate = item.toLowerCase(); + + if (candidate.startsWith(word)) { + var label = candidate; + + // The _ symbol has special mean in AutoCAD commands, so we add the prefix if it matches the command name + if (hasUnderline) + label = "_" + label; + + const completion = new vscode.CompletionItem(label); + + // to work around the middle dash case issue in vscode, when insert it ignores the dash + if (hasDash) + completion.insertText = label.substring(1); + + suggestions.push(completion); + } + }); + + return suggestions; } function getCompletionCandidates(allCandiates: string[], word: string, userInputIsUpper: boolean): Array { - let suggestions: Array = []; - allCandiates.forEach((item) => { - var candidate = item; - if (userInputIsUpper) - candidate = item.toUpperCase(); - else - candidate = item.toLowerCase(); - - if (candidate.startsWith(word)) { - var label = candidate; - const completion = new vscode.CompletionItem(label); - suggestions.push(completion); - } - }); - - return suggestions; + let suggestions: Array = []; + allCandiates.forEach((item) => { + var candidate = item; + if (userInputIsUpper) + candidate = item.toUpperCase(); + else + candidate = item.toLowerCase(); + + if (candidate.startsWith(word)) { + var label = candidate; + const completion = new vscode.CompletionItem(label); + suggestions.push(completion); + } + }); + + return suggestions; } export function getMatchingWord(document: vscode.TextDocument, position: vscode.Position): [string, boolean] { - let linetext = document.lineAt(position).text; - - let word = document.getText(document.getWordRangeAtPosition(position)); - let wordSep = " &#^()[]|;'\"."; - - // Autolisp has special word range rules and now VScode has some issues to check the "word" range, - // so it needs this logic to check the REAL word range - let pos = position.character; - pos -= 2; - let length = 1; - let hasSetLen = false; - for (; pos >= 0; pos--) { - let ch = linetext.charAt(pos); - if (wordSep.includes(ch)) { - if (!hasSetLen) - length = word.length; - word = linetext.substr(pos + 1, length); - break; - } - length++; - hasSetLen = true; - } - - var isupper = () => { - var lastCh = word.slice(-1); - var upper = lastCh.toUpperCase(); - if (upper != lastCh.toLowerCase() && upper == lastCh) - return true; - return false; - } - var inputIsUpper = isupper(); - if (inputIsUpper) - word = word.toUpperCase(); - else word = word.toLowerCase(); - - return [word, inputIsUpper]; + let linetext = document.lineAt(position).text; + + let word = document.getText(document.getWordRangeAtPosition(position)); + let wordSep = " &#^()[]|;'\"."; + + // Autolisp has special word range rules and now VScode has some issues to check the "word" range, + // so it needs this logic to check the REAL word range + let pos = position.character; + pos -= 2; + let length = 1; + let hasSetLen = false; + for (; pos >= 0; pos--) { + let ch = linetext.charAt(pos); + if (wordSep.includes(ch)) { + if (!hasSetLen) + length = word.length; + word = linetext.substring(pos + 1, length); + break; + } + length++; + hasSetLen = true; + } + + var isupper = () => { + var lastCh = word.slice(-1); + var upper = lastCh.toUpperCase(); + if (upper != lastCh.toLowerCase() && upper == lastCh) + return true; + return false; + } + var inputIsUpper = isupper(); + if (inputIsUpper) + word = word.toUpperCase(); + else word = word.toLowerCase(); + + return [word, inputIsUpper]; } export function getLispAndDclCompletions(document: vscode.TextDocument, word: string, isupper: boolean): vscode.CompletionItem[] { - let currentLSPDoc = document.fileName; - let ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); - let candidatesItems = AutoLispExt.Resources.internalLispFuncs; - if (ext === ".DCL") { - candidatesItems = AutoLispExt.Resources.internalDclKeys; - } - let allSuggestions: Array = []; - allSuggestions = getCompletionCandidates(candidatesItems, word, isupper); - - if (os.platform() === "win32") { - return allSuggestions; - } - else { - return allSuggestions.filter(function(suggestion) { - for (var prefix of AutoLispExt.Resources.winOnlyListFuncPrefix) { - if (suggestion.label.toString().startsWith(prefix)) { - return false; - } - } - return true; - }); - } - return allSuggestions; + let currentLSPDoc = document.fileName; + let ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); + let candidatesItems = AutoLispExt.Resources.internalLispFuncs; + if (ext === ".DCL") { + candidatesItems = AutoLispExt.Resources.internalDclKeys; + } + let allSuggestions: Array = []; + allSuggestions = getCompletionCandidates(candidatesItems, word, isupper); + + if (os.platform() === "win32") { + return allSuggestions; + } + else { + return allSuggestions.filter(function (suggestion) { + for (var prefix of AutoLispExt.Resources.winOnlyListFuncPrefix) { + if (suggestion.label.toString().startsWith(prefix)) { + return false; + } + } + return true; + }); + } } export function registerAutoCompletionProviders() { - vscode.languages.registerCompletionItemProvider(['autolisp', 'lsp', 'autolispdcl'], { - - provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) { - - try { - let linetext = document.lineAt(position).text; - if (linetext.startsWith(";") || linetext.startsWith(";;") - || linetext.startsWith("#|")) { - return []; - } - - let [inputword, userInputIsUpper] = getMatchingWord(document, position); - if (inputword.length == 0) - return []; - - var isInDoubleQuote = isCursorInDoubleQuoteExpr(document, position); - if (isInDoubleQuote) { - var cmds = getCmdAndVarsCompletionCandidates(AutoLispExt.Resources.allCmdsAndSysvars, inputword, userInputIsUpper); - return cmds; - } - - return getLispAndDclCompletions(document, inputword, userInputIsUpper); - } - catch (err) { - return []; - } - } - }); + vscode.languages.registerCompletionItemProvider(['autolisp', 'lsp', 'autolispdcl'], { + + provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) { + + try { + let linetext = document.lineAt(position).text; + if (linetext.startsWith(";") || linetext.startsWith(";;") + || linetext.startsWith("#|")) { + return []; + } + + let [inputword, userInputIsUpper] = getMatchingWord(document, position); + if (inputword.length == 0) + return []; + + var isInDoubleQuote = isCursorInDoubleQuoteExpr(document, position); + if (isInDoubleQuote) { + var cmds = getCmdAndVarsCompletionCandidates(AutoLispExt.Resources.allCmdsAndSysvars, inputword, userInputIsUpper); + return cmds; + } + + return getLispAndDclCompletions(document, inputword, userInputIsUpper); + } + catch (err) { + return []; + } + } + }); } \ No newline at end of file diff --git a/extension/src/documents.ts b/extension/src/documents.ts index c4223ed3..1fd71519 100644 --- a/extension/src/documents.ts +++ b/extension/src/documents.ts @@ -2,10 +2,10 @@ import * as vscode from 'vscode'; import { ReadonlyDocument } from "./project/readOnlyDocument"; import { AutoLispExt } from './context'; -import { ProjectTreeProvider } from "./project/projectTree"; -import * as fs from 'fs-extra'; +import { ProjectTreeProvider } from "./project/projectTree"; +import * as fs from 'fs-extra'; import { glob } from 'glob'; -import {DocumentServices} from './services/documentServices'; +import { DocumentServices } from './services/documentServices'; import { SymbolManager } from './symbols'; @@ -24,14 +24,14 @@ interface DocumentSources { } -namespace DocumentSources{ +namespace DocumentSources { export function create(source: Origins, path: string): DocumentSources; export function create(source: Origins, nDoc: vscode.TextDocument): DocumentSources; export function create(source: Origins, iDoc: ReadonlyDocument): DocumentSources; - export function create(source: Origins, context: vscode.TextDocument|ReadonlyDocument|string): DocumentSources { + export function create(source: Origins, context: vscode.TextDocument | ReadonlyDocument | string): DocumentSources { if (context instanceof ReadonlyDocument) { return { native: null, internal: context, flags: new Set([source]) }; - } else if (typeof(context) === 'string') { + } else if (typeof (context) === 'string') { return { native: null, internal: ReadonlyDocument.open(context), flags: new Set([source]) }; } else { return { native: context, internal: ReadonlyDocument.getMemoryDocument(context), flags: new Set([source]) }; @@ -41,7 +41,7 @@ namespace DocumentSources{ let _instance: DocumentManager; -export class DocumentManager{ +export class DocumentManager { private _cached: Map = new Map(); private _watchers: vscode.FileSystemWatcher[] = []; @@ -61,40 +61,40 @@ export class DocumentManager{ // spread the array to make sure outside influences can't actually change its values. return [...this._excludes]; } - - get OpenedDocuments(): ReadonlyDocument[] { - return this.getOpenedAsReadonlyDocuments(); + + get OpenedDocuments(): ReadonlyDocument[] { + return this.getOpenedAsReadonlyDocuments(); } - get WorkspaceDocuments(): ReadonlyDocument[] { - return this.getWorkspaceDocuments(); + get WorkspaceDocuments(): ReadonlyDocument[] { + return this.getWorkspaceDocuments(); } - get ProjectDocuments(): ReadonlyDocument[] { - return this.getProjectDocuments(); + get ProjectDocuments(): ReadonlyDocument[] { + return this.getProjectDocuments(); } - get ActiveDocument(): ReadonlyDocument { + get ActiveDocument(): ReadonlyDocument { if (vscode.window.activeTextEditor) { - const key = this.documentConsumeOrValidate(vscode.window.activeTextEditor.document, Origins.OPENED); + const key = this.documentConsumeOrValidate(vscode.window.activeTextEditor.document, Origins.OPENED); return this._cached.get(key)?.internal; } else { return null; - } + } } - - get ActiveTextDocument(): vscode.TextDocument { + + get ActiveTextDocument(): vscode.TextDocument { return vscode.window.activeTextEditor?.document; } - get OpenedTextDocuments(): vscode.TextDocument[] { + get OpenedTextDocuments(): vscode.TextDocument[] { return [...this._cached.values()] - .filter(p => p.native && p.flags.has(Origins.OPENED)) - .map(p => p.native); + .filter(p => p.native && p.flags.has(Origins.OPENED)) + .map(p => p.native); } - private get cacheKeys(): string [] { + private get cacheKeys(): string[] { return [...this._cached.keys()]; } private get projectKeys(): string[] { const result: string[] = []; - if (ProjectTreeProvider.hasProjectOpened()){ + if (ProjectTreeProvider.hasProjectOpened()) { ProjectTreeProvider.instance().projectNode.sourceFiles.forEach(x => { result.push(DocumentServices.normalizeFilePath(x.filePath)); }); @@ -103,22 +103,25 @@ export class DocumentManager{ } // General purpose methods for identifying the scope of work for a given document type - getSelectorType(fspath: string): string { + getSelectorType(fspath: string): string { return DocumentServices.getSelectorType(fspath); } - + // This function is called once on startup, but again by relevant workspace events using the bind(this) to maintain proper context private updateExcludes() { this._excludes = []; const wsExcludes = AutoLispExt.Resources.getWorkspaceExcludeGlobs(); - wsExcludes.forEach(entry => { + wsExcludes.forEach(async entry => { if (entry.excluded) { - glob(entry.glob, { cwd: entry.root, nocase: true, realpath: true }, (err, mlst) => { - if (!err) { - this._excludes.push(...mlst.map(p => DocumentServices.normalizeFilePath(p))); + try { + const file = await glob(entry.glob, { cwd: entry.root, nocase: true, realpath: true }); + this._excludes.push(...file.map(p => DocumentServices.normalizeFilePath(p))); + } catch { + (err) => { + console.error(err) } - }); + } } }); // Nulling this value informs the bind(this) workspace events they are allowed to queue up the event again. @@ -126,9 +129,9 @@ export class DocumentManager{ } - private tryUpdateInternal(sources: DocumentSources){ + private tryUpdateInternal(sources: DocumentSources) { if (sources.native && (!sources.internal || !sources.internal.equal(sources.native))) { - sources.internal = ReadonlyDocument.getMemoryDocument(sources.native); + sources.internal = ReadonlyDocument.getMemoryDocument(sources.native); if (DocumentServices.hasUnverifiedGlobalizers(sources.internal)) { // symbol mapping actually takes slightly more time than parsing, so the goal is // to keep a persistent representation of anything containing @global exported @@ -162,7 +165,7 @@ export class DocumentManager{ } private documentConsumeOrValidate(doc: vscode.TextDocument, flag: Origins, key?: string): string { - if (!key){ + if (!key) { key = DocumentServices.normalizeFilePath(doc.fileName); } @@ -185,10 +188,10 @@ export class DocumentManager{ } getDocument(nDoc: vscode.TextDocument): ReadonlyDocument { - const key = this.documentConsumeOrValidate(nDoc, Origins.OPENED); + const key = this.documentConsumeOrValidate(nDoc, Origins.OPENED); return this._cached.get(key)?.internal; } - + tryGetDocument(fsPath: string): ReadonlyDocument { // This is something of a hack to query an existing document from a randomly acquired file path. // ultimately, if the LSP file exists, it will return a document, but it may or may not be part @@ -205,7 +208,7 @@ export class DocumentManager{ if (ProjectTreeProvider.hasProjectOpened()) { this.projectKeys.forEach(key => { this.pathConsumeOrValidate(key, Origins.PROJECT); - if (this._cached.has(key)){ + if (this._cached.has(key)) { result.push(this._cached.get(key).internal); } }); @@ -219,7 +222,7 @@ export class DocumentManager{ const result: ReadonlyDocument[] = []; this.cacheKeys.forEach(key => { const sources = this._cached.get(key); - if (sources.native && sources.flags.has(Origins.OPENED)){ + if (sources.native && sources.flags.has(Origins.OPENED)) { this.tryUpdateInternal(sources); result.push(sources.internal); } @@ -249,7 +252,7 @@ export class DocumentManager{ w.dispose(); }); this._watchers.length = 0; - + // load current workspace file.exclude & search.exclude settings glob targets this.updateExcludes(); @@ -268,7 +271,7 @@ export class DocumentManager{ // The impact of creating read-only documents was stress tested with a root workspace folder containing 10mb of *.LSP files // and the memory footprint from just the ReadonlyDocument's increased the memory (sustained) by less than 50mb vscode.workspace.findFiles("**").then((items: vscode.Uri[]) => { - items.forEach((fileUri: vscode.Uri) => { + items.forEach((fileUri: vscode.Uri) => { this.pathConsumeOrValidate(fileUri.fsPath, Origins.WSPACE); }); }); @@ -279,7 +282,7 @@ export class DocumentManager{ this.pathConsumeOrValidate(key, Origins.PROJECT); }); } - + if (vscode.workspace.workspaceFolders) { this.setupFileSystemWatchers(); } @@ -294,32 +297,32 @@ export class DocumentManager{ AutoLispExt.Subscriptions.push(watcher.onDidDelete((e: vscode.Uri) => { const key = DocumentServices.normalizeFilePath(e.fsPath); const prjs = this.projectKeys; - if (this._cached.has(key)){ + if (this._cached.has(key)) { const sources = this._cached.get(key); - if (prjs.includes(key) || sources.flags.has(Origins.OPENED)){ + if (prjs.includes(key) || sources.flags.has(Origins.OPENED)) { this._cached.delete(key); } else { sources.flags.delete(Origins.WSPACE); - } + } } })); - - + + AutoLispExt.Subscriptions.push(watcher.onDidCreate((e: vscode.Uri) => { const key = DocumentServices.normalizeFilePath(e.fsPath); this.pathConsumeOrValidate(key, Origins.WSPACE); // New files require the file.exclude & search.exclude settings to be re-evaluated - if (this._delayedGlobEvent === null) { - this._delayedGlobEvent = this.updateExcludes; + if (this._delayedGlobEvent === null) { + this._delayedGlobEvent = this.updateExcludes; setTimeout(this._delayedGlobEvent.bind(this), 3000); } })); - + AutoLispExt.Subscriptions.push(watcher.onDidChange((e: vscode.Uri) => { const key = DocumentServices.normalizeFilePath(e.fsPath); this.pathConsumeOrValidate(key, Origins.WSPACE); - if (e.fsPath.toUpperCase().endsWith('SETTINGS.JSON') && this._delayedGlobEvent === null) { - this._delayedGlobEvent = this.updateExcludes; + if (e.fsPath.toUpperCase().endsWith('SETTINGS.JSON') && this._delayedGlobEvent === null) { + this._delayedGlobEvent = this.updateExcludes; setTimeout(this._delayedGlobEvent.bind(this), 3000); } })); @@ -339,7 +342,7 @@ export class DocumentManager{ // onDidCreateFiles These will get captured by the workspace.onDidOpenTextDocument event // onDidRenameFiles These are captured by the onDidOpenTextDocument/onDidCloseTextDocument and/or the FileSystemWatcher.onDidCreate/onDidDelete events // onDidSaveTextDocument Unnecessary because this can only relate to opened documents and we already cached the vscode.TextDocument reference during onDidOpenTextDocument - + // **Behavioral Documentation** // Scenario 1: Opened (workspace or non-workspace) *.LSP document // workspace.onDidOpenTextDocument @@ -421,7 +424,7 @@ export class DocumentManager{ // AutoLispExt.Subscriptions.push(vscode.workspace.onDidChangeWorkspaceFolders(async (e: vscode.WorkspaceFoldersChangeEvent) => { // this.initialize(); // })); - + // Create FileSystemWatcher's & build the workspace blueprint this.initialize(); @@ -429,7 +432,7 @@ export class DocumentManager{ const source = this._cached.get(DocumentServices.normalizeFilePath(e.fileName)); source?.flags.delete(Origins.OPENED); })); - + AutoLispExt.Subscriptions.push(vscode.workspace.onDidOpenTextDocument((e: vscode.TextDocument) => { this.documentConsumeOrValidate(e, Origins.OPENED); })); diff --git a/extension/src/format/autoIndent.ts b/extension/src/format/autoIndent.ts index de18ffdf..34e00906 100644 --- a/extension/src/format/autoIndent.ts +++ b/extension/src/format/autoIndent.ts @@ -7,704 +7,704 @@ import { CursorPosition } from './listreader'; import { LispAtom } from '../astObjects/lispAtom'; export class ElementRange { - constructor() { - this.startPos = null; - this.endPos = null; - this.quoted = false; - } - - getRange(document: vscode.TextDocument): vscode.Range{ - return new vscode.Range(document.positionAt(this.startPos.offsetInDocument), document.positionAt(this.endPos.offsetInDocument + 1)); - } - - startPos: format.CursorPosition; - endPos: format.CursorPosition; - quoted: boolean; + constructor() { + this.startPos = null; + this.endPos = null; + this.quoted = false; + } + + getRange(document: vscode.TextDocument): vscode.Range { + return new vscode.Range(document.positionAt(this.startPos.offsetInDocument), document.positionAt(this.endPos.offsetInDocument + 1)); + } + + startPos: format.CursorPosition; + endPos: format.CursorPosition; + quoted: boolean; } class ContainerElements { - containerParens: ElementRange[] = null; - containerBlockComment: ElementRange = null; + containerParens: ElementRange[] = null; + containerBlockComment: ElementRange = null; } class BasicSemantics { - operator: LispAtom = null; - operands: Array = new Array(); + operator: LispAtom = null; + operands: Array = new Array(); - operatorLowerCase: string = null; - leftParenPos: vscode.Position = null; + operatorLowerCase: string = null; + leftParenPos: vscode.Position = null; - static parse(exprInfo: ElementRange, document: vscode.TextDocument): BasicSemantics { - //parse plain text - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); + static parse(exprInfo: ElementRange, document: vscode.TextDocument): BasicSemantics { + //parse plain text + let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); - let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); + let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); - let readerStartPos = new CursorPosition(); - readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 - readerStartPos.offsetInDocument = exprInfo.startPos.offsetInDocument; //the start position in doc - let reader = new format.ListReader(sexpr, readerStartPos, document); + let readerStartPos = new CursorPosition(); + readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 + readerStartPos.offsetInDocument = exprInfo.startPos.offsetInDocument; //the start position in doc + let reader = new format.ListReader(sexpr, readerStartPos, document); - let lispLists = reader.tokenize(); + let lispLists = reader.tokenize(); - if ((lispLists == null) || (lispLists.atoms == null) || (lispLists.atoms.length == 0)) - return null; + if ((lispLists == null) || (lispLists.atoms == null) || (lispLists.atoms.length == 0)) + return null; - if (lispLists.atoms[0].isLeftParen() == false) { - console.log("ListReader didn't provide expected result.\n") - return null; - } + if (lispLists.atoms[0].isLeftParen() == false) { + console.log("ListReader didn't provide expected result.\n") + return null; + } - //find operator - let operator: LispAtom = null; - let nextIndex = 0; - for (let i = 1; i < lispLists.atoms.length; i++) { - if (lispLists.atoms[i].isComment()) - continue; //ignore comment + //find operator + let operator: LispAtom = null; + let nextIndex = 0; + for (let i = 1; i < lispLists.atoms.length; i++) { + if (lispLists.atoms[i].isComment()) + continue; //ignore comment - if (lispLists.atoms[i].isRightParen()) - break; //expression closed + if (lispLists.atoms[i].isRightParen()) + break; //expression closed - operator = lispLists.atoms[i]; - nextIndex = i + 1; - break; - } + operator = lispLists.atoms[i]; + nextIndex = i + 1; + break; + } - if ((operator == null) || (operator.symbol == null) || (operator.symbol == "")) - return null; + if ((operator == null) || (operator.symbol == null) || (operator.symbol == "")) + return null; - let ret = new BasicSemantics(); - ret.operator = operator; - ret.operatorLowerCase = operator.symbol.toLowerCase(); - ret.leftParenPos = startPos2d; + let ret = new BasicSemantics(); + ret.operator = operator; + ret.operatorLowerCase = operator.symbol.toLowerCase(); + ret.leftParenPos = startPos2d; - for (; nextIndex < lispLists.atoms.length; nextIndex++) { - if (lispLists.atoms[nextIndex].isRightParen())//expression closed - break; + for (; nextIndex < lispLists.atoms.length; nextIndex++) { + if (lispLists.atoms[nextIndex].isRightParen())//expression closed + break; - if (lispLists.atoms[nextIndex].isComment()) - continue; + if (lispLists.atoms[nextIndex].isComment()) + continue; - ret.operands.push(lispLists.atoms[nextIndex]); - } + ret.operands.push(lispLists.atoms[nextIndex]); + } - return ret; - } + return ret; + } } function getTabSize(): number { - let editor = vscode.window.activeTextEditor; + let editor = vscode.window.activeTextEditor; - if (editor) - return editor.options.tabSize; + if (editor) + return editor.options.tabSize; - return 2; + return 2; } function character2Column(charPosInLine: number, line: number, document: TextDocument): number { - let tabsize = getTabSize(); + let tabsize = getTabSize(); - if (line >= document.lineCount) { - console.log("invalid line number;\n"); - return charPosInLine; - } + if (line >= document.lineCount) { + console.log("invalid line number;\n"); + return charPosInLine; + } - let lineText = document.lineAt(line).text; + let lineText = document.lineAt(line).text; - let column = 0; - for (let i = 0; i < charPosInLine; i++) { - if (lineText.charAt(i) == '\t') - column += tabsize; - else - column++; - } + let column = 0; + for (let i = 0; i < charPosInLine; i++) { + if (lineText.charAt(i) == '\t') + column += tabsize; + else + column++; + } - return column; + return column; } function getNumber_Lambda(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - let operator = semantics.operator; - if (operator == null) return -1; + let operator = semantics.operator; + if (operator == null) return -1; - if (semantics.operatorLowerCase != "lambda") - return -1; + if (semantics.operatorLowerCase != "lambda") + return -1; - let column = character2Column(operator.column, operator.line, document); + let column = character2Column(operator.column, operator.line, document); - if (semantics.operands.length == 0) { - //assuming user is adding argument list, which should align after "lambda " - return column + operator.symbol.length + 1; - } + if (semantics.operands.length == 0) { + //assuming user is adding argument list, which should align after "lambda " + return column + operator.symbol.length + 1; + } - let argList = semantics.operands[0]; - if (isPosBetween(cursorPos2d, operator.line, operator.column, argList.line, argList.column)) { - //it's after the start of function name and before the argument list - //align with function name - return column + operator.symbol.length + 1; - } + let argList = semantics.operands[0]; + if (isPosBetween(cursorPos2d, operator.line, operator.column, argList.line, argList.column)) { + //it's after the start of function name and before the argument list + //align with function name + return column + operator.symbol.length + 1; + } - return -1; //leave it to default case handler + return -1; //leave it to default case handler } function getNumber_Defun(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - let operator = semantics.operator; - if (operator == null) return -1; + let operator = semantics.operator; + if (operator == null) return -1; - if ((semantics.operatorLowerCase != "defun") && - (semantics.operatorLowerCase != "defun-q")) - return -1; + if ((semantics.operatorLowerCase != "defun") && + (semantics.operatorLowerCase != "defun-q")) + return -1; - if (semantics.operands.length == 0) { - let column = character2Column(operator.column, operator.line, document); + if (semantics.operands.length == 0) { + let column = character2Column(operator.column, operator.line, document); - //assuming user is adding function name, which should be after, e.g., "defun " - return column + operator.symbol.length + 1; - } + //assuming user is adding function name, which should be after, e.g., "defun " + return column + operator.symbol.length + 1; + } - let funName = semantics.operands[0]; + let funName = semantics.operands[0]; - if (isPosBetween(cursorPos2d, operator.line, operator.column, funName.line, funName.column)) { - let column = character2Column(operator.column, operator.line, document); + if (isPosBetween(cursorPos2d, operator.line, operator.column, funName.line, funName.column)) { + let column = character2Column(operator.column, operator.line, document); - //cursor is after the start of defun, and before the function name - //1 column after the end of operator - return column + operator.symbol.length + 1; - } + //cursor is after the start of defun, and before the function name + //1 column after the end of operator + return column + operator.symbol.length + 1; + } - if (semantics.operands.length == 1) { - let column = character2Column(funName.column, funName.line, document); + if (semantics.operands.length == 1) { + let column = character2Column(funName.column, funName.line, document); - //it's after the start of function name; argument list missing - //assume user is adding argument list, which should align with function name - return column; - } + //it's after the start of function name; argument list missing + //assume user is adding argument list, which should align with function name + return column; + } - let argList = semantics.operands[1]; - if (isPosBetween(cursorPos2d, funName.line, funName.column, argList.line, argList.column)) { - let column = character2Column(funName.column, funName.line, document); + let argList = semantics.operands[1]; + if (isPosBetween(cursorPos2d, funName.line, funName.column, argList.line, argList.column)) { + let column = character2Column(funName.column, funName.line, document); - //it's after the start of function name and before the argument list - //align with function name - return column; - } + //it's after the start of function name and before the argument list + //align with function name + return column; + } - return -1; //leave it to default case handler + return -1; //leave it to default case handler } function getNumber_Defun_ArgList(document: vscode.TextDocument, exprInfo: ElementRange, parentParenExpr: ElementRange): number { - let parentSemantics = BasicSemantics.parse(parentParenExpr, document); - if (parentSemantics == null) return -1; + let parentSemantics = BasicSemantics.parse(parentParenExpr, document); + if (parentSemantics == null) return -1; - let parentOperator = parentSemantics.operator; - if (parentOperator == null) return -1; + let parentOperator = parentSemantics.operator; + if (parentOperator == null) return -1; - if ((parentSemantics.operatorLowerCase != "defun") && - (parentSemantics.operatorLowerCase != "defun-q") && - (parentSemantics.operatorLowerCase != "lambda")) - return -1; + if ((parentSemantics.operatorLowerCase != "defun") && + (parentSemantics.operatorLowerCase != "defun-q") && + (parentSemantics.operatorLowerCase != "lambda")) + return -1; - let directChildren = parentSemantics.operands; + let directChildren = parentSemantics.operands; - //find the starting ( of argument list - for (let i = 0; i < directChildren.length; i++) { - if ((directChildren[i] instanceof Sexpression) == false) - continue; + //find the starting ( of argument list + for (let i = 0; i < directChildren.length; i++) { + if ((directChildren[i] instanceof Sexpression) == false) + continue; - let subLists = directChildren[i]; - for (let j = 0; j < subLists.atoms.length; j++) { - if (subLists.atoms[j].isLeftParen() == false) - continue; + let subLists = directChildren[i]; + for (let j = 0; j < subLists.atoms.length; j++) { + if (subLists.atoms[j].isLeftParen() == false) + continue; - //found it - let pos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - if (pos2d.line != directChildren[i].line) - return -1; + //found it + let pos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + if (pos2d.line != directChildren[i].line) + return -1; - if (pos2d.character != directChildren[i].column) - return -1; + if (pos2d.character != directChildren[i].column) + return -1; - //now the exprInfo represents the range of ([argument list]) of defun + //now the exprInfo represents the range of ([argument list]) of defun - let column = character2Column(directChildren[i].column, directChildren[i].line, document); + let column = character2Column(directChildren[i].column, directChildren[i].line, document); - return column + 1;//horizontally right after the ( of argument list - } - } + return column + 1;//horizontally right after the ( of argument list + } + } - return -1; + return -1; } //check if cursorPos2d is after [line, column] function isPosAfter(cursorPos2d: Position, line: number, column: number): boolean { - if (cursorPos2d.line < line) - return false; + if (cursorPos2d.line < line) + return false; - if (cursorPos2d.line == line) { - if (cursorPos2d.character <= column) - return false; - } + if (cursorPos2d.line == line) { + if (cursorPos2d.character <= column) + return false; + } - return true; + return true; } //check if cursorPos2d is between [line1, column1] and [line2, column2] function isPosBetween(cursorPos2d: Position, line1: number, column1: number, line2: number, column2: number): boolean { - if (isPosAfter(cursorPos2d, line1, column1) == false) - return false; + if (isPosAfter(cursorPos2d, line1, column1) == false) + return false; - //now cursorPos2d is after [line1, column1] + //now cursorPos2d is after [line1, column1] - if (cursorPos2d.line > line2) - return false; + if (cursorPos2d.line > line2) + return false; - if (cursorPos2d.line == line2) { - if (cursorPos2d.character > column2) - return false; - } + if (cursorPos2d.line == line2) { + if (cursorPos2d.character > column2) + return false; + } - //now cursorPos2d is before or at [line2, column2] - //if cursofPos2d is at [line2,column2], when typing sth. new, it's still between the left and right atoms - return true; + //now cursorPos2d is before or at [line2, column2] + //if cursofPos2d is at [line2,column2], when typing sth. new, it's still between the left and right atoms + return true; } function getIdentationForWideFormatStyle(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - if (semantics.operands.length == 0) - return -1; //to deal with default logic + if (semantics.operands.length == 0) + return -1; //to deal with default logic - //if it's after the first operand, align with it - if (isPosAfter(cursorPos2d, semantics.operands[0].line, semantics.operands[0].column)) { - let column = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); + //if it's after the first operand, align with it + if (isPosAfter(cursorPos2d, semantics.operands[0].line, semantics.operands[0].column)) { + let column = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); - return column; - } + return column; + } - return -1; + return -1; } function getNumber_SetQ(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - let operandNumBeforePos = -1; - - if (semantics.operands.length == 0) - return -1; //to deal with default logic - - //get the number of operands before current position to determine it should be a variable or value if I - //add a new atom here - for (let i = 0; i < semantics.operands.length - 1; i++) { - //check if it's between the beginnings of operand[i] and operand[i+1] - let operand1 = semantics.operands[i]; - let operand2 = semantics.operands[i + 1]; - if (isPosBetween(cursorPos2d, operand1.line, operand1.column, operand2.line, operand2.column) == false) - continue; - - operandNumBeforePos = i + 1; - break; - } - - if (operandNumBeforePos == -1) { - //check if it's after the beginning of last operand - let lastOperand = semantics.operands[semantics.operands.length - 1]; - - if (isPosAfter(cursorPos2d, lastOperand.line, lastOperand.column)) - operandNumBeforePos = semantics.operands.length; - } - - if (operandNumBeforePos == -1) - return -1; - - - let firstOperandStartColumn = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); - - if ((operandNumBeforePos % 2) == 0) { - //it's a variable - return firstOperandStartColumn; - } - else { - //it's a value - return firstOperandStartColumn + 1; - } + let operandNumBeforePos = -1; + + if (semantics.operands.length == 0) + return -1; //to deal with default logic + + //get the number of operands before current position to determine it should be a variable or value if I + //add a new atom here + for (let i = 0; i < semantics.operands.length - 1; i++) { + //check if it's between the beginnings of operand[i] and operand[i+1] + let operand1 = semantics.operands[i]; + let operand2 = semantics.operands[i + 1]; + if (isPosBetween(cursorPos2d, operand1.line, operand1.column, operand2.line, operand2.column) == false) + continue; + + operandNumBeforePos = i + 1; + break; + } + + if (operandNumBeforePos == -1) { + //check if it's after the beginning of last operand + let lastOperand = semantics.operands[semantics.operands.length - 1]; + + if (isPosAfter(cursorPos2d, lastOperand.line, lastOperand.column)) + operandNumBeforePos = semantics.operands.length; + } + + if (operandNumBeforePos == -1) + return -1; + + + let firstOperandStartColumn = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); + + if ((operandNumBeforePos % 2) == 0) { + //it's a variable + return firstOperandStartColumn; + } + else { + //it's a value + return firstOperandStartColumn + 1; + } } function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, parentParenExpr: ElementRange, - cursorPos2d: Position): number { - if (parentParenExpr != null) { - let num = getNumber_Defun_ArgList(document, exprInfo, parentParenExpr); - if (num >= 0) - return num; - } - - let semantics = BasicSemantics.parse(exprInfo, document); - - let operator: LispAtom = (semantics != null) ? semantics.operator : null; - - if ((operator == null) || (operator.symbol == null)) { - //align right after the beginning ( if there's no operator at all; - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - - let column = character2Column(startPos2d.character, startPos2d.line, document); - return column + 1; - } - - if (exprInfo.quoted && (semantics.operatorLowerCase != "lambda")) { - //align right after the beginning ( if: - //1) the beginning ( is after operator ' and - //2) the operator of () is not lambda - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - - let column = character2Column(startPos2d.character, startPos2d.line, document); - return column + 1; - } - - if (operator.symbol.startsWith('"') || operator.symbol.startsWith("'")) { - //first atom is a string or after ' - //just align with it - - let column = character2Column(operator.column, operator.line, document); - return column; - } - - let leftParenCol = character2Column(semantics.leftParenPos.character, semantics.leftParenPos.line, document); - let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); - if (cursorPos2d.line == endPos2d.line) { - let textBehindCursor = document.getText(new vscode.Range(cursorPos2d, endPos2d)); - textBehindCursor = textBehindCursor.trim(); - if (textBehindCursor.startsWith(")")) - return leftParenCol; - } - - let charCol: number = -1; - switch (semantics.operatorLowerCase) { - case "setq": - charCol = getNumber_SetQ(document, cursorPos2d, semantics); - if (charCol >= 0) - return charCol; - break; - - case "defun": - case "defun-q": - charCol = getNumber_Defun(document, cursorPos2d, semantics); - if (charCol >= 0) - return charCol; - break; - - case "lambda": - charCol = getNumber_Lambda(document, cursorPos2d, semantics); - if (charCol >= 0) - return charCol; - break; - - // All the following keywords using Narrow format style - case "if": - case "cond": - case "while": - case "repeat": - case "foreach": - case "progn": - return indentationForNarrowStyle() + semantics.leftParenPos.character; - - default: - let sexpr = new Sexpression(); - let atoms = new Array(); - atoms = atoms.concat(semantics.operator); - atoms = atoms.concat(semantics.operands); - sexpr.setAtoms(atoms); - - if (sexpr.shouldFormatWideStyle(cursorPos2d.character)) { - charCol = getIdentationForWideFormatStyle(document, cursorPos2d, semantics); - if (charCol >= 0) - return charCol; - } - break; - } - - //the default case: align to Narrow format style: - //(theOperator xxx - // auto indent pos) - return leftParenCol + indentationForNarrowStyle(); + cursorPos2d: Position): number { + if (parentParenExpr != null) { + let num = getNumber_Defun_ArgList(document, exprInfo, parentParenExpr); + if (num >= 0) + return num; + } + + let semantics = BasicSemantics.parse(exprInfo, document); + + let operator: LispAtom = (semantics != null) ? semantics.operator : null; + + if ((operator == null) || (operator.symbol == null)) { + //align right after the beginning ( if there's no operator at all; + let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + + let column = character2Column(startPos2d.character, startPos2d.line, document); + return column + 1; + } + + if (exprInfo.quoted && (semantics.operatorLowerCase != "lambda")) { + //align right after the beginning ( if: + //1) the beginning ( is after operator ' and + //2) the operator of () is not lambda + let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + + let column = character2Column(startPos2d.character, startPos2d.line, document); + return column + 1; + } + + if (operator.symbol.startsWith('"') || operator.symbol.startsWith("'")) { + //first atom is a string or after ' + //just align with it + + let column = character2Column(operator.column, operator.line, document); + return column; + } + + let leftParenCol = character2Column(semantics.leftParenPos.character, semantics.leftParenPos.line, document); + let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); + if (cursorPos2d.line == endPos2d.line) { + let textBehindCursor = document.getText(new vscode.Range(cursorPos2d, endPos2d)); + textBehindCursor = textBehindCursor.trim(); + if (textBehindCursor.startsWith(")")) + return leftParenCol; + } + + let charCol: number = -1; + switch (semantics.operatorLowerCase) { + case "setq": + charCol = getNumber_SetQ(document, cursorPos2d, semantics); + if (charCol >= 0) + return charCol; + break; + + case "defun": + case "defun-q": + charCol = getNumber_Defun(document, cursorPos2d, semantics); + if (charCol >= 0) + return charCol; + break; + + case "lambda": + charCol = getNumber_Lambda(document, cursorPos2d, semantics); + if (charCol >= 0) + return charCol; + break; + + // All the following keywords using Narrow format style + case "if": + case "cond": + case "while": + case "repeat": + case "foreach": + case "progn": + return indentationForNarrowStyle() + semantics.leftParenPos.character; + + default: + let sexpr = new Sexpression(); + let atoms = new Array(); + atoms = atoms.concat(semantics.operator); + atoms = atoms.concat(semantics.operands); + sexpr.setAtoms(atoms); + + if (sexpr.shouldFormatWideStyle(cursorPos2d.character)) { + charCol = getIdentationForWideFormatStyle(document, cursorPos2d, semantics); + if (charCol >= 0) + return charCol; + } + break; + } + + //the default case: align to Narrow format style: + //(theOperator xxx + // auto indent pos) + return leftParenCol + indentationForNarrowStyle(); } function getIndentationInBlockComment(document: vscode.TextDocument, commentRange: ElementRange, cursorNewPos2d: Position): string { - let startPos2d = document.positionAt(commentRange.startPos.offsetInDocument); - - let indentNum = startPos2d.character + 2;//default alignment: horizontally after ;| - - //now, check if the block comment has multiple lines; if true, and the old cursor pos is not on the first line, - //the new line should align with the old line - let cursorOldLine = cursorNewPos2d.line - 1; - if (cursorOldLine > startPos2d.line) { - let textLastLine = document.lineAt(cursorOldLine).text; - let trimmedText = textLastLine.trimLeft(); - indentNum = textLastLine.length - trimmedText.length; - } - else if (cursorOldLine == startPos2d.line) { - let textLastLine = document.lineAt(cursorOldLine).text; - let charNumBeforeRealComment = startPos2d.character + 2; - textLastLine = textLastLine.substr(charNumBeforeRealComment); - - let trimmedText = textLastLine.trimLeft(); - indentNum = charNumBeforeRealComment + textLastLine.length - trimmedText.length; - } - - let indentStr = ""; - for (let i = 0; i < indentNum; i++) - indentStr += " "; - - return indentStr; + let startPos2d = document.positionAt(commentRange.startPos.offsetInDocument); + + let indentNum = startPos2d.character + 2;//default alignment: horizontally after ;| + + //now, check if the block comment has multiple lines; if true, and the old cursor pos is not on the first line, + //the new line should align with the old line + let cursorOldLine = cursorNewPos2d.line - 1; + if (cursorOldLine > startPos2d.line) { + let textLastLine = document.lineAt(cursorOldLine).text; + let trimmedText = textLastLine.trimStart(); + indentNum = textLastLine.length - trimmedText.length; + } + else if (cursorOldLine == startPos2d.line) { + let textLastLine = document.lineAt(cursorOldLine).text; + let charNumBeforeRealComment = startPos2d.character + 2; + textLastLine = textLastLine.substring(charNumBeforeRealComment); + + let trimmedText = textLastLine.trimStart(); + indentNum = charNumBeforeRealComment + textLastLine.length - trimmedText.length; + } + + let indentStr = ""; + for (let i = 0; i < indentNum; i++) + indentStr += " "; + + return indentStr; } export function getIndentation(document: TextDocument, containerInfo: ContainerElements, cursorPos2d: Position): string { - if (containerInfo.containerBlockComment != null) - return getIndentationInBlockComment(document, containerInfo.containerBlockComment, cursorPos2d); + if (containerInfo.containerBlockComment != null) + return getIndentationInBlockComment(document, containerInfo.containerBlockComment, cursorPos2d); - let exprInfoArray: ElementRange[] = containerInfo.containerParens; - if ((exprInfoArray == null) || (exprInfoArray.length == 0)) - return ""; //no identation for top level text + let exprInfoArray: ElementRange[] = containerInfo.containerParens; + if ((exprInfoArray == null) || (exprInfoArray.length == 0)) + return ""; //no identation for top level text - let parentParenExpr: ElementRange = null; - if (exprInfoArray.length > 1) - parentParenExpr = exprInfoArray[1]; + let parentParenExpr: ElementRange = null; + if (exprInfoArray.length > 1) + parentParenExpr = exprInfoArray[1]; - let num = getWhiteSpaceNumber(document, exprInfoArray[0], parentParenExpr, cursorPos2d); - if (num == -1) { - console.log("failed to parse paren expression.\n"); - return ""; - } + let num = getWhiteSpaceNumber(document, exprInfoArray[0], parentParenExpr, cursorPos2d); + if (num == -1) { + console.log("failed to parse paren expression.\n"); + return ""; + } - let ret = ""; - for (let i = 0; i < num; i++) - ret += " "; + let ret = ""; + for (let i = 0; i < num; i++) + ret += " "; - return ret; + return ret; } function createContainerBlockCommentInfo(commentStartPos: CursorPosition, nextPos2Scan: CursorPosition, cursorPos: number, - document: vscode.TextDocument, docText: string): ElementRange { - if (cursorPos < (commentStartPos.offsetInDocument + 2)) - return null; + document: vscode.TextDocument, docText: string): ElementRange { + if (cursorPos < (commentStartPos.offsetInDocument + 2)) + return null; - if (nextPos2Scan == null) { - //the block comment is not finished; the whole rest doc after ;| is inside the comment - let endPos = new CursorPosition(); - endPos.offsetInDocument = docText.length; - endPos.offsetInSelection = docText.length - commentStartPos.delta(); + if (nextPos2Scan == null) { + //the block comment is not finished; the whole rest doc after ;| is inside the comment + let endPos = new CursorPosition(); + endPos.offsetInDocument = docText.length; + endPos.offsetInSelection = docText.length - commentStartPos.delta(); - let coverBlockComment = new ElementRange(); - coverBlockComment.startPos = commentStartPos; - coverBlockComment.endPos = endPos; + let coverBlockComment = new ElementRange(); + coverBlockComment.startPos = commentStartPos; + coverBlockComment.endPos = endPos; - return coverBlockComment; - } + return coverBlockComment; + } - if (cursorPos > nextPos2Scan.offsetInDocument) - return null;//nextPos2Scan if after the end of comment; it's just a rough check to quickly exclude most impossible cases + if (cursorPos > nextPos2Scan.offsetInDocument) + return null;//nextPos2Scan if after the end of comment; it's just a rough check to quickly exclude most impossible cases - let commentStartPos2d = document.positionAt(commentStartPos.offsetInDocument); - let commentEndPos2d = document.positionAt(nextPos2Scan.offsetInDocument); - let commentText = document.getText(new vscode.Range(commentStartPos2d, commentEndPos2d)); + let commentStartPos2d = document.positionAt(commentStartPos.offsetInDocument); + let commentEndPos2d = document.positionAt(nextPos2Scan.offsetInDocument); + let commentText = document.getText(new vscode.Range(commentStartPos2d, commentEndPos2d)); - if (commentText.endsWith("|;") == false) - console.log("unexpected end of a block comment"); + if (commentText.endsWith("|;") == false) + console.log("unexpected end of a block comment"); - if (cursorPos <= (commentStartPos.offsetInDocument + commentText.length - 2)) { - let coverBlockComment = new ElementRange(); - coverBlockComment.startPos = commentStartPos; - coverBlockComment.endPos = nextPos2Scan; + if (cursorPos <= (commentStartPos.offsetInDocument + commentText.length - 2)) { + let coverBlockComment = new ElementRange(); + coverBlockComment.startPos = commentStartPos; + coverBlockComment.endPos = nextPos2Scan; - return coverBlockComment; - } + return coverBlockComment; + } - //console.log("check if it can be avoided\n"); + //console.log("check if it can be avoided\n"); - return null; + return null; } export function findContainers(document: vscode.TextDocument, cursorPos2d: Position): ContainerElements { - let docAsString = document.getText(); - let cursorPos = document.offsetAt(cursorPos2d); + let docAsString = document.getText(); + let cursorPos = document.offsetAt(cursorPos2d); - let docStringLength = docAsString.length; + let docStringLength = docAsString.length; - let parenPairs = new Array();//temp array to find ( ... ) expression - let coverParenPairs = new Array(); //( ... ) expressions that are ancestors of current position - let coverBlockComment: ElementRange = null; + let parenPairs = new Array();//temp array to find ( ... ) expression + let coverParenPairs = new Array(); //( ... ) expressions that are ancestors of current position + let coverBlockComment: ElementRange = null; - let isPrevCharQuote = false;//inside operator ' - for (let pos = 0; pos < docStringLength; /*startPosInString++*/) { - let char = docAsString.charAt(pos); - let nextChar = (pos < (docStringLength - 1)) ? docAsString.charAt(pos + 1) : null; + let isPrevCharQuote = false;//inside operator ' + for (let pos = 0; pos < docStringLength; /*startPosInString++*/) { + let char = docAsString.charAt(pos); + let nextChar = (pos < (docStringLength - 1)) ? docAsString.charAt(pos + 1) : null; - if ((pos > cursorPos) && (parenPairs.length == 0)) { - //it's behind the given position, and there's no closing ) to look for; - //let's quit. - break; - } + if ((pos > cursorPos) && (parenPairs.length == 0)) { + //it's behind the given position, and there's no closing ) to look for; + //let's quit. + break; + } - //highest priority - if (char == ';') { - let commentStartPos = format.CursorPosition.create(pos, pos); + //highest priority + if (char == ';') { + let commentStartPos = format.CursorPosition.create(pos, pos); - let nextPos2Scan = format.ListReader.findEndOfComment(document, docAsString, commentStartPos); + let nextPos2Scan = format.ListReader.findEndOfComment(document, docAsString, commentStartPos); - if ((nextChar == '|') && (coverBlockComment == null)) { - //check if cursor is in this block comment, and if true, create an ElementRange to keep this information - coverBlockComment = createContainerBlockCommentInfo(commentStartPos, nextPos2Scan, cursorPos, document, docAsString); - } + if ((nextChar == '|') && (coverBlockComment == null)) { + //check if cursor is in this block comment, and if true, create an ElementRange to keep this information + coverBlockComment = createContainerBlockCommentInfo(commentStartPos, nextPos2Scan, cursorPos, document, docAsString); + } - if (nextPos2Scan == null) //doc ended or not found - break; + if (nextPos2Scan == null) //doc ended or not found + break; - pos = nextPos2Scan.offsetInDocument; - continue; - } + pos = nextPos2Scan.offsetInDocument; + continue; + } - //getting here means you're not in a comment + //getting here means you're not in a comment - //2nd highest priority - if (char == '"') { - isPrevCharQuote = false; + //2nd highest priority + if (char == '"') { + isPrevCharQuote = false; - let stringStartPos = format.CursorPosition.create(pos, pos); + let stringStartPos = format.CursorPosition.create(pos, pos); - let nextPos2Scan = format.ListReader.findEndOfDoubleQuoteString(document, docAsString, stringStartPos); + let nextPos2Scan = format.ListReader.findEndOfDoubleQuoteString(document, docAsString, stringStartPos); - if (nextPos2Scan == null) //doc ended or not found - break; + if (nextPos2Scan == null) //doc ended or not found + break; - pos = nextPos2Scan.offsetInDocument; - continue; - } + pos = nextPos2Scan.offsetInDocument; + continue; + } - if (char == '\'') { - isPrevCharQuote = true; - pos++; - continue; - } + if (char == '\'') { + isPrevCharQuote = true; + pos++; + continue; + } - let curCharQuoted = false; - if (format.ListReader.isEmpty(char, nextChar) == false) { - curCharQuoted = isPrevCharQuote; + let curCharQuoted = false; + if (format.ListReader.isEmpty(char, nextChar) == false) { + curCharQuoted = isPrevCharQuote; - isPrevCharQuote = false; - } + isPrevCharQuote = false; + } - //getting here means you're in neither comment nor string with double quotes + //getting here means you're in neither comment nor string with double quotes - if (char == '(') { - let anExpr = new ElementRange(); - anExpr.quoted = curCharQuoted; - anExpr.startPos = format.CursorPosition.create(pos, pos); - parenPairs.push(anExpr); + if (char == '(') { + let anExpr = new ElementRange(); + anExpr.quoted = curCharQuoted; + anExpr.startPos = format.CursorPosition.create(pos, pos); + parenPairs.push(anExpr); - pos++; - continue; - } + pos++; + continue; + } - if (char == ')') { - if (parenPairs.length <= 0) { - //a ) that has no starting (; let's ignore it - pos++; - continue; - } + if (char == ')') { + if (parenPairs.length <= 0) { + //a ) that has no starting (; let's ignore it + pos++; + continue; + } - let parenExpr = parenPairs.pop(); - parenExpr.endPos = format.CursorPosition.create(pos, pos); + let parenExpr = parenPairs.pop(); + parenExpr.endPos = format.CursorPosition.create(pos, pos); - //now check if it covers current position - if ((cursorPos > parenExpr.startPos.offsetInDocument) && - (cursorPos <= parenExpr.endPos.offsetInDocument)) { - //note the if cursor is on the closing ), we take it as inside an expression, as new input will be before ) - coverParenPairs.push(parenExpr); - } + //now check if it covers current position + if ((cursorPos > parenExpr.startPos.offsetInDocument) && + (cursorPos <= parenExpr.endPos.offsetInDocument)) { + //note the if cursor is on the closing ), we take it as inside an expression, as new input will be before ) + coverParenPairs.push(parenExpr); + } - pos++; - continue; - } + pos++; + continue; + } - pos++; - continue; - }//end of the for loop based scan + pos++; + continue; + }//end of the for loop based scan - while (true) { - if (parenPairs.length == 0) - break; + while (true) { + if (parenPairs.length == 0) + break; - let expr = parenPairs.pop(); - if (expr.endPos != null) - continue; + let expr = parenPairs.pop(); + if (expr.endPos != null) + continue; - //it's an expression that is not ended; it contains current position too - expr.endPos = format.CursorPosition.create(docAsString.length - 1, docAsString.length - 1); - coverParenPairs.push(expr); - } + //it's an expression that is not ended; it contains current position too + expr.endPos = format.CursorPosition.create(docAsString.length - 1, docAsString.length - 1); + coverParenPairs.push(expr); + } - let containerInfo = new ContainerElements(); - containerInfo.containerParens = coverParenPairs; - containerInfo.containerBlockComment = coverBlockComment; + let containerInfo = new ContainerElements(); + containerInfo.containerParens = coverParenPairs; + containerInfo.containerBlockComment = coverBlockComment; - return containerInfo; + return containerInfo; } export function isCursorInDoubleQuoteExpr(document: vscode.TextDocument, position: vscode.Position): boolean { - try { - var syntaxContainers = findContainers(document, position); - var firstLevelContainer = syntaxContainers.containerParens.pop(); + try { + var syntaxContainers = findContainers(document, position); + var firstLevelContainer = syntaxContainers.containerParens.pop(); - let startPos2d = document.positionAt(firstLevelContainer.startPos.offsetInDocument); - let endPos2d = document.positionAt(firstLevelContainer.endPos.offsetInDocument + 1); + let startPos2d = document.positionAt(firstLevelContainer.startPos.offsetInDocument); + let endPos2d = document.positionAt(firstLevelContainer.endPos.offsetInDocument + 1); - let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); + let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); - let readerStartPos = new CursorPosition(); - readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 - readerStartPos.offsetInDocument = firstLevelContainer.startPos.offsetInDocument; //the start position in doc - let reader = new format.ListReader(sexpr, readerStartPos, document); + let readerStartPos = new CursorPosition(); + readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 + readerStartPos.offsetInDocument = firstLevelContainer.startPos.offsetInDocument; //the start position in doc + let reader = new format.ListReader(sexpr, readerStartPos, document); - let lispLists = reader.tokenize(); - var atomAtCursor = lispLists.getAtomFromPos(position); - if (atomAtCursor != null && atomAtCursor.symbol.startsWith("\"")) - return true; - } catch (err) { - - } + let lispLists = reader.tokenize(); + var atomAtCursor = lispLists.getAtomFromPos(position); + if (atomAtCursor != null && atomAtCursor.symbol.startsWith("\"")) + return true; + } catch (err) { - return false; + } + + return false; } export function subscribeOnEnterEvent() { - vscode.languages.registerOnTypeFormattingEditProvider( - ['autolisp', 'lisp'], - { - provideOnTypeFormattingEdits(document: vscode.TextDocument, position2d: Position, ch: string): vscode.TextEdit[] { - if (ch != '\n') - return []; - - let edits = new Array(); - - try { - //step 1: work out the indentation and fill white spaces in the new line - //step 1.1, search for all parentheses that contain current posistion - let containerInfo = findContainers(document, position2d); - - //step 1.2, work out the correctly indented text string of the given line - let lineOldText = document.lineAt(position2d.line).text; - let lineNoLeftPadding = lineOldText.trimLeft(); - let leftblanks = lineOldText.length - lineNoLeftPadding.length; - let leftblanksPos = new vscode.Position(position2d.line, leftblanks); - - let lineIndentation = getIndentation(document, containerInfo, position2d); - let lineStartPos2d = new vscode.Position(position2d.line, 0); - - edits.push(TextEdit.delete(new vscode.Range(lineStartPos2d, leftblanksPos))); - edits.push(TextEdit.insert(lineStartPos2d, lineIndentation)); - - } catch (err) { - vscode.window.showInformationMessage("It met some errors to compute the identation."); - } - - return edits; - } - }, - '\n' - ); + vscode.languages.registerOnTypeFormattingEditProvider( + ['autolisp', 'lisp'], + { + provideOnTypeFormattingEdits(document: vscode.TextDocument, position2d: Position, ch: string): vscode.TextEdit[] { + if (ch != '\n') + return []; + + let edits = new Array(); + + try { + //step 1: work out the indentation and fill white spaces in the new line + //step 1.1, search for all parentheses that contain current posistion + let containerInfo = findContainers(document, position2d); + + //step 1.2, work out the correctly indented text string of the given line + let lineOldText = document.lineAt(position2d.line).text; + let lineNoLeftPadding = lineOldText.trimStart(); + let leftblanks = lineOldText.length - lineNoLeftPadding.length; + let leftblanksPos = new vscode.Position(position2d.line, leftblanks); + + let lineIndentation = getIndentation(document, containerInfo, position2d); + let lineStartPos2d = new vscode.Position(position2d.line, 0); + + edits.push(TextEdit.delete(new vscode.Range(lineStartPos2d, leftblanksPos))); + edits.push(TextEdit.insert(lineStartPos2d, lineIndentation)); + + } catch (err) { + vscode.window.showInformationMessage("It met some errors to compute the identation."); + } + + return edits; + } + }, + '\n' + ); } \ No newline at end of file diff --git a/extension/src/format/formatter.ts b/extension/src/format/formatter.ts index e57d9489..1a14d369 100644 --- a/extension/src/format/formatter.ts +++ b/extension/src/format/formatter.ts @@ -7,78 +7,78 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export class LispFormatter { - public static format(document: vscode.TextDocument, selectedRange:vscode.Selection): string { - let textString: string = ""; - let selectionStartOffset = 0;//the position in the whole doc of the first char of the text selected to format + public static format(document: vscode.TextDocument, selectedRange: vscode.Selection): string { + let textString: string = ""; + let selectionStartOffset = 0;//the position in the whole doc of the first char of the text selected to format - let fileParser: LispParser = undefined; + let fileParser: LispParser = undefined; - if (selectedRange != null) { - textString = document.getText(selectedRange); - selectionStartOffset = document.offsetAt(selectedRange.start); + if (selectedRange != null) { + textString = document.getText(selectedRange); + selectionStartOffset = document.offsetAt(selectedRange.start); - fileParser = new LispParser(document); - } - else { - textString = document.getText(); - } - if (textString.length == 0) - return ""; + fileParser = new LispParser(document); + } + else { + textString = document.getText(); + } + if (textString.length == 0) + return ""; - try { - let parser = new LispParser(document); - parser.tokenizeString(textString, selectionStartOffset); - if (fileParser) - fileParser.tokenizeString(document.getText(), 0); + try { + let parser = new LispParser(document); + parser.tokenizeString(textString, selectionStartOffset); + if (fileParser) + fileParser.tokenizeString(document.getText(), 0); - return this.formatGut(document, parser, textString, fileParser); - } catch (e) { - vscode.window.showErrorMessage(e.message); - return textString; - } - } + return this.formatGut(document, parser, textString, fileParser); + } catch (e) { + vscode.window.showErrorMessage(e.message); + return textString; + } + } - private static formatGut(document: vscode.TextDocument, parser: LispParser, origCopy: string, fileParser?: LispParser): string { - let atoms = parser.atomsForest; - if (atoms.length == 0) - return origCopy; + private static formatGut(document: vscode.TextDocument, parser: LispParser, origCopy: string, fileParser?: LispParser): string { + let atoms = parser.atomsForest; + if (atoms.length == 0) + return origCopy; - let formattedstring = ""; - let linefeed = LispParser.getEOL(document); - for (let i = 0; i < atoms.length; i++) { - if (atoms[i] instanceof Sexpression) { - let lispLists = atoms[i] as Sexpression; + let formattedstring = ""; + let linefeed = LispParser.getEOL(document); + for (let i = 0; i < atoms.length; i++) { + if (atoms[i] instanceof Sexpression) { + let lispLists = atoms[i] as Sexpression; - let firstAtom = lispLists.atoms[0]; - let isTopLevelAtom = true; - if (fileParser) - isTopLevelAtom = fileParser.isTopLevelAtom(firstAtom.line, firstAtom.column); + let firstAtom = lispLists.atoms[0]; + let isTopLevelAtom = true; + if (fileParser) + isTopLevelAtom = fileParser.isTopLevelAtom(firstAtom.line, firstAtom.column); - let startColumn = firstAtom.column; - if (isTopLevelAtom) - startColumn = 0; + let startColumn = firstAtom.column; + if (isTopLevelAtom) + startColumn = 0; - let formatstr = lispLists.formatting(startColumn, linefeed); - if (formatstr.length == 0) { - let msg = localize("autolispext.formatter.errors", "It meets some errors when formatting"); - throw new Error(msg); - } + let formatstr = lispLists.formatting(startColumn, linefeed); + if (formatstr.length == 0) { + let msg = localize("autolispext.formatter.errors", "It meets some errors when formatting"); + throw new Error(msg); + } - if (isTopLevelAtom && formattedstring.length > 0) { - let lastCh = formattedstring.substr(-1); - if (lastCh != "\n") { - formattedstring = formattedstring.trimRight(); - if (formattedstring != linefeed && formattedstring.length > 0) - formattedstring += linefeed; - } - } + if (isTopLevelAtom && formattedstring.length > 0) { + let lastCh = formattedstring.substring(-1); + if (lastCh != "\n") { + formattedstring = formattedstring.trimEnd(); + if (formattedstring != linefeed && formattedstring.length > 0) + formattedstring += linefeed; + } + } - formattedstring += formatstr; - } else { - // This branch maybe comment, spaces, line breaks or alone atoms - formattedstring += atoms[i].toString(); - } - } - return formattedstring; - } + formattedstring += formatstr; + } else { + // This branch maybe comment, spaces, line breaks or alone atoms + formattedstring += atoms[i].toString(); + } + } + return formattedstring; + } } diff --git a/extension/src/format/listreader.ts b/extension/src/format/listreader.ts index 73c70158..01e85c5a 100644 --- a/extension/src/format/listreader.ts +++ b/extension/src/format/listreader.ts @@ -14,424 +14,424 @@ import { LispAtom } from '../astObjects/lispAtom'; // ) export class CursorPosition { - offsetInSelection: number; - offsetInDocument: number; + offsetInSelection: number; + offsetInDocument: number; - constructor() { - this.offsetInSelection = -1; - this.offsetInDocument = -1; - } + constructor() { + this.offsetInSelection = -1; + this.offsetInDocument = -1; + } - static create(offsetInSelection: number, offsetInDocument: number) { - let ret = new CursorPosition(); - ret.offsetInSelection = offsetInSelection; - ret.offsetInDocument = offsetInDocument; + static create(offsetInSelection: number, offsetInDocument: number) { + let ret = new CursorPosition(); + ret.offsetInSelection = offsetInSelection; + ret.offsetInDocument = offsetInDocument; - return ret; - } + return ret; + } - delta(): number { - return this.offsetInDocument - this.offsetInSelection; - } + delta(): number { + return this.offsetInDocument - this.offsetInSelection; + } } class StringInputStream { - pos: number; - line: number; - col: number; - text: string; - len: number; - constructor(text: string, pos2d: vscode.Position) { - this.pos = 0; - this.line = pos2d.line; - this.col = pos2d.character; - this.text = text; - this.len = text.length; - } - - peek(incr?: number) { - let pos = this.pos; - if (incr != undefined) - pos += incr; - - if (pos < this.len) - return this.text.charAt(pos); - return null; - }; - - next() { - if (this.pos < this.len) { - var ch = this.text.charAt(this.pos++); - if (ch == "\n") { - ++this.line; - this.col = 0; - } else { - if (ch != '\r') - ++this.col; - } - return ch; - } - return null; - } - - nextString(length: number): string { - if (length <= 0) { - console.log("it's meaningless to substring with 0 or negative length\n"); - return ""; - } - - let startPos = this.pos; - let posAfterString = this.pos + length; - - if (posAfterString > this.len) { - posAfterString = this.len; - } - - length = posAfterString - startPos; - - let ret = ""; - for (let i = 0; i < length; i++) - ret += this.next(); - - return ret; - } - - currentOffset(): number { - return this.pos; - } - - ignore(charNum: number) { - this.pos += charNum; - if (this.pos > this.len) - this.pos = this.len; - } + pos: number; + line: number; + col: number; + text: string; + len: number; + constructor(text: string, pos2d: vscode.Position) { + this.pos = 0; + this.line = pos2d.line; + this.col = pos2d.character; + this.text = text; + this.len = text.length; + } + + peek(incr?: number) { + let pos = this.pos; + if (incr != undefined) + pos += incr; + + if (pos < this.len) + return this.text.charAt(pos); + return null; + }; + + next() { + if (this.pos < this.len) { + var ch = this.text.charAt(this.pos++); + if (ch == "\n") { + ++this.line; + this.col = 0; + } else { + if (ch != '\r') + ++this.col; + } + return ch; + } + return null; + } + + nextString(length: number): string { + if (length <= 0) { + console.log("it's meaningless to substring with 0 or negative length\n"); + return ""; + } + + let startPos = this.pos; + let posAfterString = this.pos + length; + + if (posAfterString > this.len) { + posAfterString = this.len; + } + + length = posAfterString - startPos; + + let ret = ""; + for (let i = 0; i < length; i++) + ret += this.next(); + + return ret; + } + + currentOffset(): number { + return this.pos; + } + + ignore(charNum: number) { + this.pos += charNum; + if (this.pos > this.len) + this.pos = this.len; + } } export class ListReader { - input: StringInputStream; - cachedLists: Array; - document: vscode.TextDocument; - startPosInDoc: CursorPosition; - - constructor(text: string, startPos: CursorPosition, curDoc: vscode.TextDocument) { - let trimmedStr = text.trimLeft(); - let lengthOfLeftTrim = text.length - trimmedStr.length; - - let startPos2D = curDoc.positionAt(startPos.offsetInDocument); - this.input = new StringInputStream(text.trimRight(), startPos2D); - this.input.ignore(lengthOfLeftTrim); - - this.cachedLists = new Array(); - this.document = curDoc; - this.startPosInDoc = startPos; - } - - next() { return this.input.next(); }; - peek(incr?: number) { return this.input.peek(incr); }; - - readWhen(pred) { - let buf = "", ch; - while ((ch = this.peek()) && pred(ch)) { - buf += this.next(); - } - return buf; - } - static isEmpty(ch: string, chNext: string): boolean { - switch (ch) { - case " ": - case "\n": - case "\t": - case "\x0C": - case "\xA0": - case "\u2028": - case "\u2029": - return true; - } - let linefeed = ch == '\r' && chNext == '\n'; - if (linefeed) - return true; - return false; - } - isBlank(ch: string): boolean { - return ListReader.isEmpty(ch, this.peek(1)); - } - - skipBlanks() { - this.readWhen((ch) => { - if (this.isBlank(ch)) - return true; - let linefeed = ch == '\r' && this.peek(1) == '\n'; - if (linefeed) - return true; - }); - } - - readString() { - let sline = this.input.line; - let scol = this.input.col; - - assert(this.peek() == "\""); - - let startPoint = new CursorPosition(); - startPoint.offsetInSelection = this.input.currentOffset(); - startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); - let stringLength = ListReader.getLengthOfStringSym(this.document, this.input.text, startPoint); - - let res = this.input.nextString(stringLength); - - let lastList = this.cachedLists[this.cachedLists.length - 1]; - lastList.addAtom(new LispAtom(sline, scol, res)); - } - - readSymbol() { - let sline = this.input.line; - let scol = this.input.col; - - let firstCh = this.next(); - let res = this.readWhen((ch) => { - - if (this.isBlank(ch)) - return false; - - switch (ch) { - case ")": - case "(": - case ";": - case "\"": - case "\'": - return false; - default: - return true; - } - }); - res = firstCh + res; - - let lastList = this.cachedLists[this.cachedLists.length - 1]; - lastList.addAtom(new LispAtom(sline, scol, res)); - } - - readQuote() { - let quote = this.next(); - this.skipBlanks(); - return this.readList(new LispAtom(this.input.line, this.input.col, quote)); - } - - readEndList() { - this.next(); - let lastList = this.cachedLists[this.cachedLists.length - 1]; - lastList.addAtom(new LispAtom(this.input.line, this.input.col, ")")); - this.cachedLists.pop(); - } - - readComment() { - let sline = this.input.line; - let scol = this.input.col; - - let startPoint = new CursorPosition(); - startPoint.offsetInSelection = this.input.currentOffset(); - startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); - let commentLength = ListReader.getCommentLength(this.document, this.input.text, startPoint); - - let res = this.input.nextString(commentLength); - res = res.trimRight(); - let lastList = this.cachedLists[this.cachedLists.length - 1]; - lastList.addAtom(new LispAtom(sline, scol, res)); - } - - readList(prefixAtom?: LispAtom) { - let sexpr = new Sexpression(); - sexpr.line = this.input.line; - sexpr.column = this.input.col; - - if (prefixAtom != undefined) - sexpr.addAtom(prefixAtom); - let parenAtom = "("; - sexpr.addAtom(new LispAtom(this.input.line, this.input.col, parenAtom)); - this.cachedLists.push(sexpr); - this.next(); - - while (true) { - - this.skipBlanks(); - let ch = this.peek(); - - if (ch == null) - break; - else if (ch == ")") { - this.readEndList(); - break; - } - - switch (ch) { - case "(": - let subList = this.readList(); - sexpr.addAtom(subList); - continue; - - case ";": - this.readComment(); - continue; - - case "\"": - this.readString(); - continue; - - case "\'": - let nextCh = this.peek(1); - if (nextCh != "(") { - this.readSymbol(); - } - else { - let quoteList = this.readQuote(); - sexpr.addAtom(quoteList); - } - continue; - - default: - this.readSymbol(); - continue; - } - } - return sexpr; - } - - tokenize() { - return this.readList(); - } - - //return the length of a comment - including the chars that start and end a comment - static getCommentLength(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): number { - let endPos = ListReader.findEndOfComment(document, stringInRange, startPosOffset); - - if (endPos == null) { - endPos = new CursorPosition(); - endPos.offsetInSelection = stringInRange.length; - endPos.offsetInDocument = stringInRange.length + startPosOffset.delta(); - } - - return endPos.offsetInSelection - startPosOffset.offsetInSelection; - } - - //startPosOffset: offset of the starting ; of a comment - //stringInRange: either the text selected in editor, or the entire document as a string if nothing is selected - // - //return the position right after the ending char of current comment - //return null if the end is out of range or missing - static findEndOfComment(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { - let inRangeStringLength = stringInRange.length; - - if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; - return null; //the given range ends with a comment - - if (stringInRange.charAt(startPosOffset.offsetInSelection + 1) == '|') { - //it's starting a block comment with a ;| - - //searching for the ending of comment - - //the shortest block comment is ;||; with length == 4, so: - if ((startPosOffset.offsetInSelection + 4) > inRangeStringLength) - //the rest part of the given range is less than 2 characters; won't have a |; to end the comment - return null; //let's take the rest as part of an incomplete comment - - var endingOfComment = stringInRange.indexOf("|;", startPosOffset.offsetInSelection + 2); - - if (endingOfComment < (startPosOffset.offsetInSelection + 2)) { - //no ending |; found; the LSP in the given range is in problem and let's take the whole rest part as a block comment - return null; - } - - //return the offset of the char that is right after current block comment + input: StringInputStream; + cachedLists: Array; + document: vscode.TextDocument; + startPosInDoc: CursorPosition; + + constructor(text: string, startPos: CursorPosition, curDoc: vscode.TextDocument) { + let trimmedStr = text.trimStart(); + let lengthOfLeftTrim = text.length - trimmedStr.length; + + let startPos2D = curDoc.positionAt(startPos.offsetInDocument); + this.input = new StringInputStream(text.trimEnd(), startPos2D); + this.input.ignore(lengthOfLeftTrim); + + this.cachedLists = new Array(); + this.document = curDoc; + this.startPosInDoc = startPos; + } + + next() { return this.input.next(); }; + peek(incr?: number) { return this.input.peek(incr); }; + + readWhen(pred) { + let buf = "", ch; + while ((ch = this.peek()) && pred(ch)) { + buf += this.next(); + } + return buf; + } + static isEmpty(ch: string, chNext: string): boolean { + switch (ch) { + case " ": + case "\n": + case "\t": + case "\x0C": + case "\xA0": + case "\u2028": + case "\u2029": + return true; + } + let linefeed = ch == '\r' && chNext == '\n'; + if (linefeed) + return true; + return false; + } + isBlank(ch: string): boolean { + return ListReader.isEmpty(ch, this.peek(1)); + } + + skipBlanks() { + this.readWhen((ch) => { + if (this.isBlank(ch)) + return true; + let linefeed = ch == '\r' && this.peek(1) == '\n'; + if (linefeed) + return true; + }); + } + + readString() { + let sline = this.input.line; + let scol = this.input.col; + + assert(this.peek() == "\""); + + let startPoint = new CursorPosition(); + startPoint.offsetInSelection = this.input.currentOffset(); + startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); + let stringLength = ListReader.getLengthOfStringSym(this.document, this.input.text, startPoint); + + let res = this.input.nextString(stringLength); + + let lastList = this.cachedLists[this.cachedLists.length - 1]; + lastList.addAtom(new LispAtom(sline, scol, res)); + } + + readSymbol() { + let sline = this.input.line; + let scol = this.input.col; + + let firstCh = this.next(); + let res = this.readWhen((ch) => { + + if (this.isBlank(ch)) + return false; + + switch (ch) { + case ")": + case "(": + case ";": + case "\"": + case "\'": + return false; + default: + return true; + } + }); + res = firstCh + res; + + let lastList = this.cachedLists[this.cachedLists.length - 1]; + lastList.addAtom(new LispAtom(sline, scol, res)); + } + + readQuote() { + let quote = this.next(); + this.skipBlanks(); + return this.readList(new LispAtom(this.input.line, this.input.col, quote)); + } + + readEndList() { + this.next(); + let lastList = this.cachedLists[this.cachedLists.length - 1]; + lastList.addAtom(new LispAtom(this.input.line, this.input.col, ")")); + this.cachedLists.pop(); + } + + readComment() { + let sline = this.input.line; + let scol = this.input.col; + + let startPoint = new CursorPosition(); + startPoint.offsetInSelection = this.input.currentOffset(); + startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); + let commentLength = ListReader.getCommentLength(this.document, this.input.text, startPoint); + + let res = this.input.nextString(commentLength); + res = res.trimEnd(); + let lastList = this.cachedLists[this.cachedLists.length - 1]; + lastList.addAtom(new LispAtom(sline, scol, res)); + } + + readList(prefixAtom?: LispAtom) { + let sexpr = new Sexpression(); + sexpr.line = this.input.line; + sexpr.column = this.input.col; + + if (prefixAtom != undefined) + sexpr.addAtom(prefixAtom); + let parenAtom = "("; + sexpr.addAtom(new LispAtom(this.input.line, this.input.col, parenAtom)); + this.cachedLists.push(sexpr); + this.next(); + + while (true) { + + this.skipBlanks(); + let ch = this.peek(); + + if (ch == null) + break; + else if (ch == ")") { + this.readEndList(); + break; + } + + switch (ch) { + case "(": + let subList = this.readList(); + sexpr.addAtom(subList); + continue; + + case ";": + this.readComment(); + continue; + + case "\"": + this.readString(); + continue; + + case "\'": + let nextCh = this.peek(1); + if (nextCh != "(") { + this.readSymbol(); + } + else { + let quoteList = this.readQuote(); + sexpr.addAtom(quoteList); + } + continue; + + default: + this.readSymbol(); + continue; + } + } + return sexpr; + } + + tokenize() { + return this.readList(); + } + + //return the length of a comment - including the chars that start and end a comment + static getCommentLength(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): number { + let endPos = ListReader.findEndOfComment(document, stringInRange, startPosOffset); + + if (endPos == null) { + endPos = new CursorPosition(); + endPos.offsetInSelection = stringInRange.length; + endPos.offsetInDocument = stringInRange.length + startPosOffset.delta(); + } + + return endPos.offsetInSelection - startPosOffset.offsetInSelection; + } + + //startPosOffset: offset of the starting ; of a comment + //stringInRange: either the text selected in editor, or the entire document as a string if nothing is selected + // + //return the position right after the ending char of current comment + //return null if the end is out of range or missing + static findEndOfComment(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { + let inRangeStringLength = stringInRange.length; + + if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; + return null; //the given range ends with a comment + + if (stringInRange.charAt(startPosOffset.offsetInSelection + 1) == '|') { + //it's starting a block comment with a ;| + + //searching for the ending of comment + + //the shortest block comment is ;||; with length == 4, so: + if ((startPosOffset.offsetInSelection + 4) > inRangeStringLength) + //the rest part of the given range is less than 2 characters; won't have a |; to end the comment + return null; //let's take the rest as part of an incomplete comment + + var endingOfComment = stringInRange.indexOf("|;", startPosOffset.offsetInSelection + 2); + + if (endingOfComment < (startPosOffset.offsetInSelection + 2)) { + //no ending |; found; the LSP in the given range is in problem and let's take the whole rest part as a block comment + return null; + } + + //return the offset of the char that is right after current block comment - let endPos = new CursorPosition(); - endPos.offsetInSelection = endingOfComment + 2; - endPos.offsetInDocument = endPos.offsetInSelection + startPosOffset.delta(); + let endPos = new CursorPosition(); + endPos.offsetInSelection = endingOfComment + 2; + endPos.offsetInDocument = endPos.offsetInSelection + startPosOffset.delta(); - return endPos; - } + return endPos; + } - //else, the rest of current line is a comment + //else, the rest of current line is a comment - //skip the rest of current line - var cursorPos2d = document.positionAt(startPosOffset.offsetInDocument); + //skip the rest of current line + var cursorPos2d = document.positionAt(startPosOffset.offsetInDocument); - if (cursorPos2d.line >= (document.lineCount - 1)) { - //there's no next line - return null; //the rest of the given range is a comment - } + if (cursorPos2d.line >= (document.lineCount - 1)) { + //there's no next line + return null; //the rest of the given range is a comment + } - //not the final line; continue to scan the next line - let next = new vscode.Position(cursorPos2d.line + 1, 0); + //not the final line; continue to scan the next line + let next = new vscode.Position(cursorPos2d.line + 1, 0); - let nextCharOffsetInDoc = document.offsetAt(next); + let nextCharOffsetInDoc = document.offsetAt(next); - let endPos = new CursorPosition(); - endPos.offsetInDocument = nextCharOffsetInDoc; - endPos.offsetInSelection = nextCharOffsetInDoc - startPosOffset.delta(); + let endPos = new CursorPosition(); + endPos.offsetInDocument = nextCharOffsetInDoc; + endPos.offsetInSelection = nextCharOffsetInDoc - startPosOffset.delta(); - return endPos;//return the next offset in string, not the offset in doc - } + return endPos;//return the next offset in string, not the offset in doc + } - //return the length of a string with double quotes - including the starting and ending " - static getLengthOfStringSym(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): number { - let endPos = ListReader.findEndOfDoubleQuoteString(document, stringInRange, startPosOffset); + //return the length of a string with double quotes - including the starting and ending " + static getLengthOfStringSym(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): number { + let endPos = ListReader.findEndOfDoubleQuoteString(document, stringInRange, startPosOffset); - if (endPos == null) { - endPos = new CursorPosition(); - endPos.offsetInSelection = stringInRange.length; - endPos.offsetInDocument = stringInRange.length + startPosOffset.delta(); - } + if (endPos == null) { + endPos = new CursorPosition(); + endPos.offsetInSelection = stringInRange.length; + endPos.offsetInDocument = stringInRange.length + startPosOffset.delta(); + } - return endPos.offsetInSelection - startPosOffset.offsetInSelection; - } + return endPos.offsetInSelection - startPosOffset.offsetInSelection; + } - //startPosOffset: offset of the starting " of a text string - //stringInRange: either the text selected in editor, or the entire document as a string if nothing is selected - // - //return the position right after the ending " - //return null if the ending " is out of range or missing - static findEndOfDoubleQuoteString(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { - let inRangeStringLength = stringInRange.length; + //startPosOffset: offset of the starting " of a text string + //stringInRange: either the text selected in editor, or the entire document as a string if nothing is selected + // + //return the position right after the ending " + //return null if the ending " is out of range or missing + static findEndOfDoubleQuoteString(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { + let inRangeStringLength = stringInRange.length; - if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; - return null; + if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; + return null; - let posAfterComment = -1; + let posAfterComment = -1; - for (let curPos = startPosOffset.offsetInSelection + 1; curPos < inRangeStringLength; curPos++) { - let char = stringInRange.charAt(curPos); + for (let curPos = startPosOffset.offsetInSelection + 1; curPos < inRangeStringLength; curPos++) { + let char = stringInRange.charAt(curPos); - if (char == '"') { - posAfterComment = curPos + 1; - break; - } + if (char == '"') { + posAfterComment = curPos + 1; + break; + } - if (char != '\\') - continue; + if (char != '\\') + continue; - //it's escaping the next char + //it's escaping the next char - if (curPos >= (inRangeStringLength - 1)) - break;//there's no next char in given range; the given string ends here + if (curPos >= (inRangeStringLength - 1)) + break;//there's no next char in given range; the given string ends here - //well, it's the escaping char, but it's also the last char before EOL - if ((stringInRange.charAt(curPos + 1) == '\r') || - (stringInRange.charAt(curPos + 1) == '\n')) - continue; //simply igore this '\' which escapes nothing + //well, it's the escaping char, but it's also the last char before EOL + if ((stringInRange.charAt(curPos + 1) == '\r') || + (stringInRange.charAt(curPos + 1) == '\n')) + continue; //simply igore this '\' which escapes nothing - curPos++;//escape the escaped char - } + curPos++;//escape the escaped char + } - if (posAfterComment == -1) - return null; + if (posAfterComment == -1) + return null; - let nextPos = new CursorPosition(); - nextPos.offsetInSelection = posAfterComment; - nextPos.offsetInDocument = posAfterComment + startPosOffset.delta(); + let nextPos = new CursorPosition(); + nextPos.offsetInSelection = posAfterComment; + nextPos.offsetInDocument = posAfterComment + startPosOffset.delta(); - return nextPos; - } + return nextPos; + } } diff --git a/extension/src/process/processTree.ts b/extension/src/process/processTree.ts index 14f9944c..dd2540e8 100644 --- a/extension/src/process/processTree.ts +++ b/extension/src/process/processTree.ts @@ -12,14 +12,14 @@ import { join } from 'path'; import { ProcessPathCache } from "./processCache"; -function isNothingFound(msg : string) { - if(msg && (msg.indexOf('No Instance(s) Available.') >= 0)) { +function isNothingFound(msg: string) { + if (msg && (msg.indexOf('No Instance(s) Available.') >= 0)) { return true; } return false; } -export function getProcesses(one: (pid: number, ppid: number, command: string, args: string, exepath: string, date?: number, title?: string) => void) : Promise { +export function getProcesses(one: (pid: number, ppid: number, command: string, args: string, exepath: string, date?: number, title?: string) => void): Promise { function lines(callback: (a: string) => void) { let unfinished = ''; @@ -40,7 +40,7 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a if (process.platform === 'win32') { let acadExeName = undefined; - if(ProcessPathCache.globalAcadNameInUserAttachConfig) + if (ProcessPathCache.globalAcadNameInUserAttachConfig) acadExeName = ProcessPathCache.globalAcadNameInUserAttachConfig; else acadExeName = 'acad'; @@ -48,12 +48,12 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a const CMD_PAT = /^(.*)\s+([0-9]+)\.[0-9]+[+-][0-9]+\s+(.*)\s+([0-9]+)\s+([0-9]+)$/; //const CMD_PAT = /^(.*)\s+([0-9]+)\.[0-9]+[+-][0-9]+\s+([0-9]+)\s+([0-9]+)$/; const acadProcFinder = join(__dirname, 'acadProcessFinder.exe'); - proc = spawn(acadProcFinder, [ acadExeName ]); + proc = spawn(acadProcFinder, [acadExeName]); proc.stdout.setEncoding('utf8'); proc.stdout.on('data', lines(line => { //let matches = _.compact(line.trim().split(' ')); let cells = line.split('\t'); - if(cells.length == 5) { + if (cells.length == 5) { let exePath = cells[0]; let startTime = cells[1]; let args = cells[2]; @@ -66,14 +66,14 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a } else if (process.platform === 'darwin') { // OS X - proc = spawn('/bin/ps', [ '-x', '-o', `pid,ppid,comm=${'a'.repeat(256)},command` ]); + proc = spawn('/bin/ps', ['-x', '-o', `pid,ppid,comm=${'a'.repeat(256)},command`]); proc.stdout.setEncoding('utf8'); proc.stdout.on('data', lines(line => { - const pid = Number(line.substr(0, 5)); - const ppid = Number(line.substr(6, 5)); - const command = line.substr(12, 256).trim(); - const args = line.substr(269 + command.length); + const pid = Number(line.substring(0, 5)); + const ppid = Number(line.substring(6, 5)); + const command = line.substring(12, 256).trim(); + const args = line.substring(269 + command.length); if (!isNaN(pid) && !isNaN(ppid)) { one(pid, ppid, command, args, command); @@ -82,14 +82,14 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a } else { // linux - proc = spawn('/bin/ps', [ '-ax', '-o', 'pid,ppid,comm:20,command' ]); + proc = spawn('/bin/ps', ['-ax', '-o', 'pid,ppid,comm:20,command']); proc.stdout.setEncoding('utf8'); proc.stdout.on('data', lines(line => { - const pid = Number(line.substr(0, 5)); - const ppid = Number(line.substr(6, 5)); - let command = line.substr(12, 20).trim(); - let args = line.substr(33); + const pid = Number(line.substring(0, 5)); + const ppid = Number(line.substring(6, 5)); + let command = line.substring(12, 20).trim(); + let args = line.substring(33); let pos = args.indexOf(command); if (pos >= 0) { @@ -100,8 +100,8 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a } pos++; } - command = args.substr(0, pos); - args = args.substr(pos + 1); + command = args.substring(0, pos); + args = args.substring(pos + 1); } if (!isNaN(pid) && !isNaN(ppid)) { @@ -116,7 +116,7 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a proc.stderr.setEncoding('utf8'); proc.stderr.on('data', data => { - if(isNothingFound(data.toString())) { + if (isNothingFound(data.toString())) { resolve(); } else { diff --git a/extension/src/project/addFile2Project.ts b/extension/src/project/addFile2Project.ts index 8730e5ef..a8e3a69a 100644 --- a/extension/src/project/addFile2Project.ts +++ b/extension/src/project/addFile2Project.ts @@ -7,88 +7,88 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); import * as path from 'path' export async function AddFile2Project(fileList?: vscode.Uri[]) { - try { - if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.addfile.openproject", "A project must be open before you can add a file."); - return Promise.reject(msg); - } - - let selectedFiles = fileList ?? await SelectLspFiles(); - if (!selectedFiles) - return; //user has cancelled the open file dialog - - let addedFiles = []; - for (let file of selectedFiles) { - let fileUpper = file.fsPath.toUpperCase(); - if (fileUpper.endsWith(".LSP") == false) { - let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); - return Promise.reject(msg); - } - - if(hasMultipleExtensions(fileUpper)) { - //File name like hello.lsp.lsp causes problem with legacy IDE. - //Legacy IDE doesn't allow user to add hello.lsp.lsp into a project, but if there happen to be a file - // named hello.lsp, it will add hello.lsp into project, and this is wrong. - //To keep consistency with legacy IDE, we have to reject files of this kind. - let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); - return Promise.reject(msg); - } - - if (isFileAlreadyInProject(file.fsPath, ProjectTreeProvider.instance().projectNode)) { - let msg = localize("autolispext.project.addfile.filealreadyexist", "File already exists in this project: "); - vscode.window.showInformationMessage(msg + file.fsPath); - - continue; - } - - if(hasFileWithSameName(file.fsPath, ProjectTreeProvider.instance().projectNode)) { - let msg = localize("autolispext.project.addfile.samenameexist", "File with the same name already exists in this project: "); - vscode.window.showInformationMessage(msg + path.basename(file.fsPath)); - - continue; - } - - ProjectTreeProvider.instance().addFileNode(file.fsPath); - addedFiles.push(file); - - } - - if (!addedFiles.length) - return; - - return Promise.resolve(addedFiles); - } - catch (e) { - console.log(e); - return Promise.reject(e); - } + try { + if (ProjectTreeProvider.hasProjectOpened() == false) { + let msg = localize("autolispext.project.addfile.openproject", "A project must be open before you can add a file."); + return Promise.reject(msg); + } + + let selectedFiles = fileList ?? await SelectLspFiles(); + if (!selectedFiles) + return; //user has cancelled the open file dialog + + let addedFiles = []; + for (let file of selectedFiles) { + let fileUpper = file.fsPath.toUpperCase(); + if (fileUpper.endsWith(".LSP") == false) { + let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); + return Promise.reject(msg); + } + + if (hasMultipleExtensions(fileUpper)) { + //File name like hello.lsp.lsp causes problem with legacy IDE. + //Legacy IDE doesn't allow user to add hello.lsp.lsp into a project, but if there happen to be a file + // named hello.lsp, it will add hello.lsp into project, and this is wrong. + //To keep consistency with legacy IDE, we have to reject files of this kind. + let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); + return Promise.reject(msg); + } + + if (isFileAlreadyInProject(file.fsPath, ProjectTreeProvider.instance().projectNode)) { + let msg = localize("autolispext.project.addfile.filealreadyexist", "File already exists in this project: "); + vscode.window.showInformationMessage(msg + file.fsPath); + + continue; + } + + if (hasFileWithSameName(file.fsPath, ProjectTreeProvider.instance().projectNode)) { + let msg = localize("autolispext.project.addfile.samenameexist", "File with the same name already exists in this project: "); + vscode.window.showInformationMessage(msg + path.basename(file.fsPath)); + + continue; + } + + ProjectTreeProvider.instance().addFileNode(file.fsPath); + addedFiles.push(file); + + } + + if (!addedFiles.length) + return; + + return Promise.resolve(addedFiles); + } + catch (e) { + console.log(e); + return Promise.reject(e); + } } -function hasMultipleExtensions(filePath:string):boolean { - let ext1 = path.extname(filePath); - if(!ext1) - return false; - - let leftSide = filePath.substr(0, filePath.length - ext1.length); - let ext2 = path.extname(leftSide); - - if(ext2) - return true; - else - return false; +function hasMultipleExtensions(filePath: string): boolean { + let ext1 = path.extname(filePath); + if (!ext1) + return false; + + let leftSide = filePath.substring(0, filePath.length - ext1.length); + let ext2 = path.extname(leftSide); + + if (ext2) + return true; + else + return false; } async function SelectLspFiles() { - let label = localize("autolispext.project.addfile.openlabel", "Add to Project"); - const filterDesc = localize("autolispext.project.addfile.sourcefilefilter", "AutoLISP Source Files"); - const options: vscode.OpenDialogOptions = { - canSelectMany: true, - openLabel: label, - filters: {} - }; - options.filters[filterDesc] = ['lsp']; - - let fileUris = await vscode.window.showOpenDialog(options); - if (fileUris && fileUris.length > 0) - return Promise.resolve(fileUris); + let label = localize("autolispext.project.addfile.openlabel", "Add to Project"); + const filterDesc = localize("autolispext.project.addfile.sourcefilefilter", "AutoLISP Source Files"); + const options: vscode.OpenDialogOptions = { + canSelectMany: true, + openLabel: label, + filters: {} + }; + options.filters[filterDesc] = ['lsp']; + + let fileUris = await vscode.window.showOpenDialog(options); + if (fileUris && fileUris.length > 0) + return Promise.resolve(fileUris); } diff --git a/extension/src/project/findReplace/applyReplacement.ts b/extension/src/project/findReplace/applyReplacement.ts index e344b235..96cf4de6 100644 --- a/extension/src/project/findReplace/applyReplacement.ts +++ b/extension/src/project/findReplace/applyReplacement.ts @@ -7,58 +7,58 @@ import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export async function applyReplacementInFile(filePlan: FileNode) { - try { - if (fs.existsSync(filePlan.filePath) == false) { - filePlan.errorInReplace = localize("autolispext.project.findreplace.applyreplacement.filenotexist", "File doesn't exist."); - return; - } - - let doc = getDocument(filePlan.filePath); - - let data = null; - if (doc != null) - data = doc.getText();//it's possible that the editor has latest changes that are not saved - else - data = fs.readFileSync(filePlan.filePath).toString(); - - let newFileContent = ''; - for (let lineNum = 0; lineNum >= 0; lineNum++) { - let newlinePos = data.indexOf('\n'); - if (newlinePos < 0) { - //this is the last line - newFileContent += chooseLineContent(lineNum, data, filePlan); - break; - } - else { - //this is not the last line - //check if the line ends with '\r\n' or '\n' - let isCrLf = false; - if ((newlinePos > 0) && (data.charAt(newlinePos - 1) == '\r')) { - isCrLf = true; - } - - if (isCrLf) { - newFileContent += chooseLineContent(lineNum, data.substr(0, newlinePos - 1), filePlan); - } - else { - newFileContent += chooseLineContent(lineNum, data.substr(0, newlinePos), filePlan); - } - - newFileContent += '\r\n'; - - data = data.substr(newlinePos + 1); - } - } - - let done = await applyChangeInEditor(filePlan.filePath, newFileContent); - if (done) - return; - - filePlan.errorInReplace = applyChangeByFile(filePlan.filePath, newFileContent); - } - catch (err) { - filePlan.errorInReplace = err.toString(); - } + try { + if (fs.existsSync(filePlan.filePath) == false) { + filePlan.errorInReplace = localize("autolispext.project.findreplace.applyreplacement.filenotexist", "File doesn't exist."); + return; + } + + let doc = getDocument(filePlan.filePath); + + let data = null; + if (doc != null) + data = doc.getText();//it's possible that the editor has latest changes that are not saved + else + data = fs.readFileSync(filePlan.filePath).toString(); + + let newFileContent = ''; + for (let lineNum = 0; lineNum >= 0; lineNum++) { + let newlinePos = data.indexOf('\n'); + if (newlinePos < 0) { + //this is the last line + newFileContent += chooseLineContent(lineNum, data, filePlan); + break; + } + else { + //this is not the last line + //check if the line ends with '\r\n' or '\n' + let isCrLf = false; + if ((newlinePos > 0) && (data.charAt(newlinePos - 1) == '\r')) { + isCrLf = true; + } + + if (isCrLf) { + newFileContent += chooseLineContent(lineNum, data.substring(0, newlinePos - 1), filePlan); + } + else { + newFileContent += chooseLineContent(lineNum, data.substring(0, newlinePos), filePlan); + } + + newFileContent += '\r\n'; + + data = data.substring(newlinePos + 1); + } + } + + let done = await applyChangeInEditor(filePlan.filePath, newFileContent); + if (done) + return; + + filePlan.errorInReplace = applyChangeByFile(filePlan.filePath, newFileContent); + } + catch (err) { + filePlan.errorInReplace = err.toString(); + } } //If this file is shown in VS Code editor, change its content in editor and return true; @@ -66,54 +66,54 @@ export async function applyReplacementInFile(filePlan: FileNode) { //throws an error if the editor failed to replace text async function applyChangeInEditor(filePath: string, fileContent: string) { - let doc = getDocument(filePath); - if (doc != null) { - //ok, there's an editor shown for the same file + let doc = getDocument(filePath); + if (doc != null) { + //ok, there's an editor shown for the same file - let docRange = doc.validateRange( - new vscode.Range( - new vscode.Position(0, 0), - new vscode.Position(Number.MAX_VALUE, Number.MAX_VALUE) - )); + let docRange = doc.validateRange( + new vscode.Range( + new vscode.Position(0, 0), + new vscode.Position(Number.MAX_VALUE, Number.MAX_VALUE) + )); - let edit = new vscode.WorkspaceEdit(); - edit.replace(doc.uri, docRange, fileContent); + let edit = new vscode.WorkspaceEdit(); + edit.replace(doc.uri, docRange, fileContent); - let succ = await vscode.workspace.applyEdit(edit); - if (!succ) { - let msg = localize("autolispext.project.findreplace.applyreplacement.replacetextfailed", "Failed to replace text: "); - throw new Error(msg + filePath); - } + let succ = await vscode.workspace.applyEdit(edit); + if (!succ) { + let msg = localize("autolispext.project.findreplace.applyreplacement.replacetextfailed", "Failed to replace text: "); + throw new Error(msg + filePath); + } - return Promise.resolve(true); - } + return Promise.resolve(true); + } - return Promise.resolve(false); + return Promise.resolve(false); } //return the error message; //return null on success function applyChangeByFile(filePath: string, fileContent: string): string { - try { - fs.writeFileSync(filePath, fileContent); - return null; - } - catch (err) { - console.log(err); - return err.toString(); - } + try { + fs.writeFileSync(filePath, fileContent); + return null; + } + catch (err) { + console.log(err); + return err.toString(); + } } function chooseLineContent(line: number, oldLineText: string, replNode: FileNode) { - for (let finding of replNode.findings) { - let rgLine = finding.line - 1;//rg.exe line and column start with 1 - if (line != rgLine) - continue; + for (let finding of replNode.findings) { + let rgLine = finding.line - 1;//rg.exe line and column start with 1 + if (line != rgLine) + continue; - //it's in the replace plan; return the new text which is the result of replacing in old text - return finding.text; - } + //it's in the replace plan; return the new text which is the result of replacing in old text + return finding.text; + } - //it's not in the replace plan; continue using the old text - return oldLineText; + //it's not in the replace plan; continue using the old text + return oldLineText; } diff --git a/extension/src/project/findReplace/openSearchResult.ts b/extension/src/project/findReplace/openSearchResult.ts index e428c5ed..4276807f 100644 --- a/extension/src/project/findReplace/openSearchResult.ts +++ b/extension/src/project/findReplace/openSearchResult.ts @@ -9,71 +9,71 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export async function openSearchResult(clickedTreeItem: FindingNode, searchOpt: SearchOption) { - try { - let isSingleResult = clickedTreeItem instanceof FindingNode; - if (!isSingleResult) - return; + try { + let isSingleResult = clickedTreeItem instanceof FindingNode; + if (!isSingleResult) + return; - let finding = clickedTreeItem as FindingNode; - const exists = fs.existsSync(finding.filePath); + let finding = clickedTreeItem as FindingNode; + const exists = fs.existsSync(finding.filePath); - if (exists == false) { - let msg = localize("autolispext.project.findreplace.opensearchresult.filenotexist", "File doesn't exist: "); - return Promise.reject(msg + finding.filePath); - } + if (exists == false) { + let msg = localize("autolispext.project.findreplace.opensearchresult.filenotexist", "File doesn't exist: "); + return Promise.reject(msg + finding.filePath); + } - let line = finding.line - 1; //rp line starts with 1 but vscode starts with 0 - let col = finding.column - 1; + let line = finding.line - 1; //rp line starts with 1 but vscode starts with 0 + let col = finding.column - 1; - let textLen = 0; - if (searchOpt.isReplace == false) { - textLen = searchOpt.keyword.length; - if (searchOpt.useRegularExpr) { + let textLen = 0; + if (searchOpt.isReplace == false) { + textLen = searchOpt.keyword.length; + if (searchOpt.useRegularExpr) { //it's a finding with regular expression; need to get the matched text to work out the length - let reg: RegExp; - if (searchOpt.matchCase) { - reg = new RegExp(searchOpt.keyword); - } else { - reg = new RegExp(searchOpt.keyword, 'i'); - } - let matches = reg.exec(finding.text); - if (matches.length <= 0) { - console.log("Can't determine keyword length with regular expression enabled."); - } else { - textLen = matches[0].length; - } - } + let reg: RegExp; + if (searchOpt.matchCase) { + reg = new RegExp(searchOpt.keyword); + } else { + reg = new RegExp(searchOpt.keyword, 'i'); + } + let matches = reg.exec(finding.text); + if (matches.length <= 0) { + console.log("Can't determine keyword length with regular expression enabled."); + } else { + textLen = matches[0].length; + } + } } else { textLen = searchOpt.replacement.length; } - // get document of the file or open the file if it's not opened - let doc = getDocument(finding.filePath); - if (!doc) { - doc = ReadonlyDocument.open(finding.filePath); - if (!doc) { - let msg = localize("autolispext.project.findreplace.opensearchresult.openfailed", "File couldn't be opened: "); - return Promise.reject(msg + finding.filePath); - } - } + // get document of the file or open the file if it's not opened + let doc = getDocument(finding.filePath); + if (!doc) { + doc = ReadonlyDocument.open(finding.filePath); + if (!doc) { + let msg = localize("autolispext.project.findreplace.opensearchresult.openfailed", "File couldn't be opened: "); + return Promise.reject(msg + finding.filePath); + } + } - // get text inside the searched range of the document and don't select the range if the text is changed since last search - let start = new vscode.Position(line, col); - let end = new vscode.Position(line, col + textLen); - let range = new vscode.Range(start, end); - let text = doc.getText(range); - let textFound = finding.text.substr(col, textLen) - if (text != textFound) { - range = range.with(start, start); - } + // get text inside the searched range of the document and don't select the range if the text is changed since last search + let start = new vscode.Position(line, col); + let end = new vscode.Position(line, col + textLen); + let range = new vscode.Range(start, end); + let text = doc.getText(range); + let textFound = finding.text.substring(col, textLen) + if (text != textFound) { + range = range.with(start, start); + } - let opt = { "selection": range, "preserveFocus": true }; - return vscode.commands.executeCommand("vscode.open", - vscode.Uri.file(finding.filePath), - opt); - } - catch (e) { - return Promise.reject(e); - } + let opt = { "selection": range, "preserveFocus": true }; + return vscode.commands.executeCommand("vscode.open", + vscode.Uri.file(finding.filePath), + opt); + } + catch (e) { + return Promise.reject(e); + } } diff --git a/extension/src/project/findReplace/ripGrep.ts b/extension/src/project/findReplace/ripGrep.ts index 51b90514..da5972ac 100644 --- a/extension/src/project/findReplace/ripGrep.ts +++ b/extension/src/project/findReplace/ripGrep.ts @@ -1,4 +1,4 @@ -import { rgPath } from 'vscode-ripgrep' +import { rgPath } from '@vscode/ripgrep' import { SearchOption } from './options'; import * as os from 'os'; @@ -42,10 +42,10 @@ export async function findInFile(searchOption: SearchOption, file2Search: string } if (process.platform === 'darwin') { - return execa(getRgPathMac(), commandArgs); + return execa.$(getRgPathMac(), commandArgs); } - return execa(rgPath, commandArgs); + return execa.$(rgPath, commandArgs); } function getRgPathMac(): string { diff --git a/extension/src/project/openProject.ts b/extension/src/project/openProject.ts index 962e0dfc..98bd3001 100644 --- a/extension/src/project/openProject.ts +++ b/extension/src/project/openProject.ts @@ -14,221 +14,221 @@ const fs = require('fs'); import * as os from 'os'; export async function OpenProject() { - try { - if (await CheckUnsavedChanges()) { - return; - } - - let prjUri = await SelectProjectFile(); - if (!prjUri) - return; - - let prjPathUpper = prjUri.fsPath.toUpperCase(); - if (prjPathUpper.endsWith(".PRJ") == false) { - let msg = localize("autolispext.project.openproject.onlyprjallowed", "Only PRJ files are allowed."); - return Promise.reject(msg); - } - - let prjNode = OpenProjectFile(prjUri); - return Promise.resolve(prjNode); - } - catch (e) { - return Promise.reject(e); - } + try { + if (await CheckUnsavedChanges()) { + return; + } + + let prjUri = await SelectProjectFile(); + if (!prjUri) + return; + + let prjPathUpper = prjUri.fsPath.toUpperCase(); + if (prjPathUpper.endsWith(".PRJ") == false) { + let msg = localize("autolispext.project.openproject.onlyprjallowed", "Only PRJ files are allowed."); + return Promise.reject(msg); + } + + let prjNode = OpenProjectFile(prjUri); + return Promise.resolve(prjNode); + } + catch (e) { + return Promise.reject(e); + } } export function OpenProjectFile(prjUri: vscode.Uri): ProjectNode { - let document = ReadonlyDocument.open(prjUri.fsPath); - if (!document) { - let msg = localize("autolispext.project.openproject.readfailed", "Can't read project file: "); - throw new Error(msg + prjUri.fsPath); - } - - let ret = ParseProjectDocument(prjUri.fsPath, document); - if (!ret) { - let msg = localize("autolispext.project.openproject.malformedfile", "Malformed project file: "); - throw new Error(msg + prjUri.fsPath); - } - - return ret; + let document = ReadonlyDocument.open(prjUri.fsPath); + if (!document) { + let msg = localize("autolispext.project.openproject.readfailed", "Can't read project file: "); + throw new Error(msg + prjUri.fsPath); + } + + let ret = ParseProjectDocument(prjUri.fsPath, document); + if (!ret) { + let msg = localize("autolispext.project.openproject.malformedfile", "Malformed project file: "); + throw new Error(msg + prjUri.fsPath); + } + + return ret; } async function SelectProjectFile() { - let label = localize("autolispext.project.openproject.label", "Open Project"); - const filterDesc = localize("autolispext.project.openproject.projectfilter", "AutoLISP Project Files"); - const options: vscode.OpenDialogOptions = { - canSelectMany: false, - openLabel: label, - filters: {} - }; - options.filters[filterDesc] = ['prj']; - - let fileUri = await vscode.window.showOpenDialog(options); - if (fileUri && fileUri.length > 0){ - if (path.basename(fileUri[0].fsPath).indexOf(' ') === -1){ - return Promise.resolve(fileUri[0]); - } else { - let msg = localize("autolispext.project.openproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); - return Promise.reject(msg); - } - } else { - return Promise.resolve(undefined); - } + let label = localize("autolispext.project.openproject.label", "Open Project"); + const filterDesc = localize("autolispext.project.openproject.projectfilter", "AutoLISP Project Files"); + const options: vscode.OpenDialogOptions = { + canSelectMany: false, + openLabel: label, + filters: {} + }; + options.filters[filterDesc] = ['prj']; + + let fileUri = await vscode.window.showOpenDialog(options); + if (fileUri && fileUri.length > 0) { + if (path.basename(fileUri[0].fsPath).indexOf(' ') === -1) { + return Promise.resolve(fileUri[0]); + } else { + let msg = localize("autolispext.project.openproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); + return Promise.reject(msg); + } + } else { + return Promise.resolve(undefined); + } } function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): ProjectNode { - let readerStartPos = new CursorPosition(); - readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 - readerStartPos.offsetInDocument = 0; //the start position in doc - let reader = new ListReader(document.getText(), readerStartPos, document); - - let lispLists = reader.tokenize(); - let atomCount = lispLists.atoms.length; - if ((!lispLists) || (!lispLists.atoms) || (atomCount < 2)) - return undefined; - - //get the VLISP-PROJECT-LIST expression - let index = IndexOfProjectList(lispLists); - if (index < 0) - return undefined; - let vlspPrjList = lispLists.atoms[index] as Sexpression; - - //parse project metadata - let prjMetaData = ProjectDefinition.Create(vlspPrjList); - if (IsValidProjectExpression(prjMetaData) == false) - return undefined; //its content is not valid - - //get the value of :own-list pair, i.e. the source file list - index = IndexOfSourceList(vlspPrjList); - if (index < 0)//if there's no source file, we should at least get a "nil" string - return undefined; - let srcFileExpr = vlspPrjList.atoms[index]; - - //create the project node - let root = new ProjectNode(); - root.projectName = prjMetaData.Name; - root.projectFilePath = prjPath; - root.projectDirectory = path.dirname(prjPath); - root.sourceFiles = new Array(); - root.projectMetadata = prjMetaData; - - if (srcFileExpr instanceof Sexpression) { - let fileList = srcFileExpr as Sexpression; - - //create source file nodes - for (let j = 1; j < (fileList.atoms.length - 1); j++) { - let fileName = Convert2AbsoluteLspFilePath(fileList.atoms[j].symbol, root.projectDirectory); - if (!fileName) - return undefined; - - if(isFileAlreadyInProject(fileName, root)) - continue; - - addLispFileNode2ProjectTree(root, fileName, fileList.atoms[j].symbol); - } - } - - return root; + let readerStartPos = new CursorPosition(); + readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 + readerStartPos.offsetInDocument = 0; //the start position in doc + let reader = new ListReader(document.getText(), readerStartPos, document); + + let lispLists = reader.tokenize(); + let atomCount = lispLists.atoms.length; + if ((!lispLists) || (!lispLists.atoms) || (atomCount < 2)) + return undefined; + + //get the VLISP-PROJECT-LIST expression + let index = IndexOfProjectList(lispLists); + if (index < 0) + return undefined; + let vlspPrjList = lispLists.atoms[index] as Sexpression; + + //parse project metadata + let prjMetaData = ProjectDefinition.Create(vlspPrjList); + if (IsValidProjectExpression(prjMetaData) == false) + return undefined; //its content is not valid + + //get the value of :own-list pair, i.e. the source file list + index = IndexOfSourceList(vlspPrjList); + if (index < 0)//if there's no source file, we should at least get a "nil" string + return undefined; + let srcFileExpr = vlspPrjList.atoms[index]; + + //create the project node + let root = new ProjectNode(); + root.projectName = prjMetaData.Name; + root.projectFilePath = prjPath; + root.projectDirectory = path.dirname(prjPath); + root.sourceFiles = new Array(); + root.projectMetadata = prjMetaData; + + if (srcFileExpr instanceof Sexpression) { + let fileList = srcFileExpr as Sexpression; + + //create source file nodes + for (let j = 1; j < (fileList.atoms.length - 1); j++) { + let fileName = Convert2AbsoluteLspFilePath(fileList.atoms[j].symbol, root.projectDirectory); + if (!fileName) + return undefined; + + if (isFileAlreadyInProject(fileName, root)) + continue; + + addLispFileNode2ProjectTree(root, fileName, fileList.atoms[j].symbol); + } + } + + return root; } function IndexOfSourceList(prjExpr: Sexpression): number { - let atomsCount = prjExpr.atoms.length; - for (let i = 0; i < atomsCount; i++) { - if (prjExpr.atoms[i].symbol.toUpperCase() != ProjectDefinition.key_own_list) - continue; + let atomsCount = prjExpr.atoms.length; + for (let i = 0; i < atomsCount; i++) { + if (prjExpr.atoms[i].symbol.toUpperCase() != ProjectDefinition.key_own_list) + continue; - //now i is the index of the key of src file pair - if (i >= atomsCount - 1) - return -1; + //now i is the index of the key of src file pair + if (i >= atomsCount - 1) + return -1; - //i+1 is the index of value - return i + 1; - } + //i+1 is the index of value + return i + 1; + } - return -1; + return -1; } function IndexOfProjectList(rootExpr: Sexpression): number { - let atomsCount = rootExpr.atoms.length; + let atomsCount = rootExpr.atoms.length; - for (let i = 0; i < atomsCount; i++) { - //find for the VLISP-PROJECT-LIST expression - if (rootExpr.atoms[i] == null) continue; - if (!(rootExpr.atoms[i] instanceof Sexpression)) continue; + for (let i = 0; i < atomsCount; i++) { + //find for the VLISP-PROJECT-LIST expression + if (rootExpr.atoms[i] == null) continue; + if (!(rootExpr.atoms[i] instanceof Sexpression)) continue; - let vlspPrjList = rootExpr.atoms[i] as Sexpression; + let vlspPrjList = rootExpr.atoms[i] as Sexpression; - if (vlspPrjList.atoms.length < 2) - continue; + if (vlspPrjList.atoms.length < 2) + continue; - if (vlspPrjList.atoms[1].symbol.toUpperCase() != ProjectDefinition.key_expr_name) { - continue; - } + if (vlspPrjList.atoms[1].symbol.toUpperCase() != ProjectDefinition.key_expr_name) { + continue; + } - return i; - } + return i; + } - return -1; + return -1; } function Convert2AbsoluteLspFilePath(fileName: string, prjDir: string): string { - //remove the starting and ending " - if (fileName.startsWith('\"') == false) - return undefined; + //remove the starting and ending " + if (fileName.startsWith('\"') == false) + return undefined; - if (fileName.endsWith('\"') == false) - return undefined; + if (fileName.endsWith('\"') == false) + return undefined; - fileName = fileName.substr(1, fileName.length - 2); + fileName = fileName.substring(1, fileName.length - 2); - //make sure it's absolute path - if (isAbsolutePath(fileName) == false) - fileName = path.join(prjDir, fileName); + //make sure it's absolute path + if (isAbsolutePath(fileName) == false) + fileName = path.join(prjDir, fileName); - //add the file extension back if necessary - if (!path.extname(fileName)) { - //it's possible that a lisp project file ignores the .lsp extension - fileName = fileName + ".lsp"; - } + //add the file extension back if necessary + if (!path.extname(fileName)) { + //it's possible that a lisp project file ignores the .lsp extension + fileName = fileName + ".lsp"; + } - return fileName; + return fileName; } let platform = os.type(); function isAbsolutePath(fileName: string): boolean { - if (path.isAbsolute(fileName)) - return true; + if (path.isAbsolute(fileName)) + return true; - if (platform != 'Windows_NT') { - //a full path on Windows like c:\... will be incorrectly considered as relative path on Mac - if (fileName.length < 3) - return false; + if (platform != 'Windows_NT') { + //a full path on Windows like c:\... will be incorrectly considered as relative path on Mac + if (fileName.length < 3) + return false; - let char2 = fileName.charAt(1); - let char3 = fileName.charAt(2); + let char2 = fileName.charAt(1); + let char3 = fileName.charAt(2); - if ((char2 == ':') && (char3 == '\\')) - return true; + if ((char2 == ':') && (char3 == '\\')) + return true; - if ((char2 == ':') && (char3 == '/')) - return true; - } + if ((char2 == ':') && (char3 == '/')) + return true; + } - return false; + return false; } function IsValidProjectExpression(metaData: ProjectDefinition): Boolean { - if (!metaData) - return false; + if (!metaData) + return false; - if (metaData.hasProperty(ProjectDefinition.key_name) == false) - return false; + if (metaData.hasProperty(ProjectDefinition.key_name) == false) + return false; - if (metaData.hasProperty(ProjectDefinition.key_own_list) == false) - return false; + if (metaData.hasProperty(ProjectDefinition.key_own_list) == false) + return false; - return true; + return true; } diff --git a/extension/src/project/saveProject.ts b/extension/src/project/saveProject.ts index 6cd3e498..82f7bcd1 100644 --- a/extension/src/project/saveProject.ts +++ b/extension/src/project/saveProject.ts @@ -14,164 +14,164 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); import * as vscode from 'vscode'; export async function SaveProject(refresh: boolean) { - try { - if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); - return Promise.reject(msg); - } - - let root = ProjectTreeProvider.instance().projectNode; - - //work out the correct project file text - let prjFileText = generateProjectText(root); - if (!prjFileText) { - let msg = localize("autolispext.project.saveproject.generateprjcontentfailed", "Failed to generate project content."); - return Promise.reject(msg); - } - - //format the text before writing to file - let doc = ReadonlyDocument.createMemoryDocument(prjFileText, 'autolispprj'); - longListFormatAsSingleColum(); - let formatedText = LispFormatter.format(doc, null); - resetLongListFormatAsSingleColum(); - - //write to file - let targetPath = root.projectFilePath; - fs.writeFileSync(targetPath, formatedText); - root.projectModified = false; - - if (refresh) - ProjectTreeProvider.instance().refreshData(); - return Promise.resolve(targetPath); - } - catch (e) { - if (refresh) - ProjectTreeProvider.instance().refreshData(); - - resetLongListFormatAsSingleColum(); - return Promise.reject(e); - } + try { + if (ProjectTreeProvider.hasProjectOpened() == false) { + let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); + return Promise.reject(msg); + } + + let root = ProjectTreeProvider.instance().projectNode; + + //work out the correct project file text + let prjFileText = generateProjectText(root); + if (!prjFileText) { + let msg = localize("autolispext.project.saveproject.generateprjcontentfailed", "Failed to generate project content."); + return Promise.reject(msg); + } + + //format the text before writing to file + let doc = ReadonlyDocument.createMemoryDocument(prjFileText, 'autolispprj'); + longListFormatAsSingleColum(); + let formatedText = LispFormatter.format(doc, null); + resetLongListFormatAsSingleColum(); + + //write to file + let targetPath = root.projectFilePath; + fs.writeFileSync(targetPath, formatedText); + root.projectModified = false; + + if (refresh) + ProjectTreeProvider.instance().refreshData(); + return Promise.resolve(targetPath); + } + catch (e) { + if (refresh) + ProjectTreeProvider.instance().refreshData(); + + resetLongListFormatAsSingleColum(); + return Promise.reject(e); + } } //Save a project and all of its unsaved LSP files that are opened in VS Code //As we save changes of project automatcially, project is not "dirty" in most cases //So it mainly helps user to save unsaved files of current project export async function SaveAll() { - const root = ProjectTreeProvider.instance().projectNode; - if (!root) { - let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); - return Promise.reject(msg); - } - - // get unsaved source files - const unsavedFiles = vscode.workspace.textDocuments.filter(file => { - if (file.isDirty) { - for (let fileNode of root.sourceFiles) { - if (pathEqual(fileNode.filePath, file.fileName, false)) { - return true; - } - } - return false; - } - }); - - for (let file of unsavedFiles) { - file.save(); - } - - if (root.projectModified) { - await SaveProject(true); - } - - return Promise.resolve(); + const root = ProjectTreeProvider.instance().projectNode; + if (!root) { + let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); + return Promise.reject(msg); + } + + // get unsaved source files + const unsavedFiles = vscode.workspace.textDocuments.filter(file => { + if (file.isDirty) { + for (let fileNode of root.sourceFiles) { + if (pathEqual(fileNode.filePath, file.fileName, false)) { + return true; + } + } + return false; + } + }); + + for (let file of unsavedFiles) { + file.save(); + } + + if (root.projectModified) { + await SaveProject(true); + } + + return Promise.resolve(); } //return the raw text of project file, using the latest source file list to replace the original one; //return null on error function generateProjectText(root: ProjectNode): string { - let fileList = makeSourceFileList(root); + let fileList = makeSourceFileList(root); - let prjFileText = makeProjectFileHeader(root); - prjFileText += makeProjectExpression(fileList, root.projectMetadata); - prjFileText += ';;; EOF'; + let prjFileText = makeProjectFileHeader(root); + prjFileText += makeProjectExpression(fileList, root.projectMetadata); + prjFileText += ';;; EOF'; - return prjFileText; + return prjFileText; } function makeProjectFileHeader(root: ProjectNode): string { - let today = new Date(); - let ret = ';;; VLisp project file [V2.0] ' + root.projectName; - ret += ' saved to:[' + root.projectDirectory + ']'; - ret += ' at:[' + today.toLocaleDateString() + ']'; - ret += '\r\n'; + let today = new Date(); + let ret = ';;; VLisp project file [V2.0] ' + root.projectName; + ret += ' saved to:[' + root.projectDirectory + ']'; + ret += ' at:[' + today.toLocaleDateString() + ']'; + ret += '\r\n'; - return ret; + return ret; } function makeProjectExpression(srcFileList: string, prjDef: ProjectDefinition): string { - let ret = '(' + ProjectDefinition.key_expr_name + '\r\n'; + let ret = '(' + ProjectDefinition.key_expr_name + '\r\n'; - ret += makeKeyValuePair(prjDef, ProjectDefinition.key_name); + ret += makeKeyValuePair(prjDef, ProjectDefinition.key_name); - ret += ProjectDefinition.key_own_list + '\r\n'; - ret += srcFileList + '\r\n'; + ret += ProjectDefinition.key_own_list + '\r\n'; + ret += srcFileList + '\r\n'; - ret += makeKeyValuePair(prjDef, ProjectDefinition.key_fas_dir); - ret += makeKeyValuePair(prjDef, ProjectDefinition.key_tmp_dir); - ret += makeKeyValuePair(prjDef, ProjectDefinition.key_proj_keys); - ret += makeKeyValuePair(prjDef, ProjectDefinition.key_cxt_id); + ret += makeKeyValuePair(prjDef, ProjectDefinition.key_fas_dir); + ret += makeKeyValuePair(prjDef, ProjectDefinition.key_tmp_dir); + ret += makeKeyValuePair(prjDef, ProjectDefinition.key_proj_keys); + ret += makeKeyValuePair(prjDef, ProjectDefinition.key_cxt_id); - //in case there're some more properties other than the standard properties - for (let key in prjDef.metaData) { - if (ProjectDefinition.isStandardProperty(key)) - continue; + //in case there're some more properties other than the standard properties + for (let key in prjDef.metaData) { + if (ProjectDefinition.isStandardProperty(key)) + continue; - ret += makeKeyValuePair(prjDef, key); - } + ret += makeKeyValuePair(prjDef, key); + } - ret += ')\r\n'; + ret += ')\r\n'; - return ret; + return ret; } function makeKeyValuePair(metaData: ProjectDefinition, key: string): string { - return key + '\r\n' + metaData.getProperty(key) + '\r\n'; + return key + '\r\n' + metaData.getProperty(key) + '\r\n'; } function makeSourceFileList(root: ProjectNode): string { - let fileList = ''; - - if (root.sourceFiles.length == 0) { - fileList = ' nil '; - } - else { - fileList = ' ('; - - for (let file of root.sourceFiles) { - if (file.rawFilePath) { - fileList += file.rawFilePath; //use the original text read on opening - fileList += " "; - continue; - } - - let fileDir = path.dirname(file.filePath); - if (pathEqual(root.projectDirectory, fileDir, true) == false) { - //in this case, we use absolute path, and file extension will be ignored - let str2Add = path.normalize(file.filePath).split('\\').join('/');// "/" is used in file path in .prj file - str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension - fileList += ('\"' + str2Add + '\" '); - continue; - } - - //in this case, the directory and file extension will be ignored - let str2Add = path.basename(file.filePath); - str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension - fileList += ('\"' + str2Add + '\" '); - continue; - } - - fileList = fileList.trimRight() + ') '; - } - - return fileList; + let fileList = ''; + + if (root.sourceFiles.length == 0) { + fileList = ' nil '; + } + else { + fileList = ' ('; + + for (let file of root.sourceFiles) { + if (file.rawFilePath) { + fileList += file.rawFilePath; //use the original text read on opening + fileList += " "; + continue; + } + + let fileDir = path.dirname(file.filePath); + if (pathEqual(root.projectDirectory, fileDir, true) == false) { + //in this case, we use absolute path, and file extension will be ignored + let str2Add = path.normalize(file.filePath).split('\\').join('/');// "/" is used in file path in .prj file + str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension + fileList += ('\"' + str2Add + '\" '); + continue; + } + + //in this case, the directory and file extension will be ignored + let str2Add = path.basename(file.filePath); + str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension + fileList += ('\"' + str2Add + '\" '); + continue; + } + + fileList = fileList.trimEnd() + ') '; + } + + return fileList; } diff --git a/extension/src/providers/renameProvider.ts b/extension/src/providers/renameProvider.ts index a03c82d1..db169678 100644 --- a/extension/src/providers/renameProvider.ts +++ b/extension/src/providers/renameProvider.ts @@ -10,21 +10,19 @@ import { ILispFragment } from '../astObjects/ILispFragment'; import { primitiveRegex } from '../astObjects/lispAtom'; -export function AutoLispExtPrepareRename(document: vscode.TextDocument, position: vscode.Position): { range: vscode.Range; placeholder: string; } -{ +export function AutoLispExtPrepareRename(document: vscode.TextDocument, position: vscode.Position): { range: vscode.Range; placeholder: string; } { const roDoc = AutoLispExt.Documents.getDocument(document); let selectedAtom: ILispFragment = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); - if (!selectedAtom){ + if (!selectedAtom) { return null; } return { range: selectedAtom.getRange(), placeholder: selectedAtom.symbol }; } -export function AutoLispExtProvideRenameEdits(document: vscode.TextDocument, position: vscode.Position, newName: string): vscode.WorkspaceEdit -{ +export function AutoLispExtProvideRenameEdits(document: vscode.TextDocument, position: vscode.Position, newName: string): vscode.WorkspaceEdit { const roDoc = AutoLispExt.Documents.getDocument(document); - const selectedAtom = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); + const selectedAtom = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); newName = RenameProviderSupport.normalizeUserProvidedValue(newName, selectedAtom.symbol); if (!newName) { return null; @@ -37,8 +35,7 @@ export function AutoLispExtProvideRenameEdits(document: vscode.TextDocument, pos namespace RenameProviderSupport { - export function provideRenameEditsWorker(roDoc: ReadonlyDocument, selectedAtom: ILispFragment, newName: string): vscode.WorkspaceEdit|null - { + export function provideRenameEditsWorker(roDoc: ReadonlyDocument, selectedAtom: ILispFragment, newName: string): vscode.WorkspaceEdit | null { const docSymbols = SymbolManager.getSymbolMap(roDoc); const selectedIndex = selectedAtom.flatIndex; const selectedKey = selectedAtom.symbol.toLowerCase(); @@ -62,7 +59,7 @@ namespace RenameProviderSupport { return editContext; } - export function normalizeUserProvidedValue(newValue: string, oldValue: string): string|null { + export function normalizeUserProvidedValue(newValue: string, oldValue: string): string | null { newValue = newValue.trim(); if (newValue.length === 0 || newValue === oldValue || !isValidInput(newValue)) { return null; @@ -70,17 +67,16 @@ namespace RenameProviderSupport { return newValue; } - export function getTargetSymbolReference(symbolMap: IRootSymbolHost, key: string, index: number): ISymbolReference|null { + export function getTargetSymbolReference(symbolMap: IRootSymbolHost, key: string, index: number): ISymbolReference | null { const symbolArray = symbolMap.collectAllSymbols().get(key); if (!symbolArray && !Array.isArray(symbolArray)) { return null; } - const init = symbolArray.find(p => p.asReference?.flatIndex === index); + const init = symbolArray.find(p => p.asReference?.flatIndex === index); return init; } - export function populateEditsFromDocumentList(editContext: vscode.WorkspaceEdit, newValue: string, key: string, docs: Array): void - { + export function populateEditsFromDocumentList(editContext: vscode.WorkspaceEdit, newValue: string, key: string, docs: Array): void { docs.forEach(extDoc => { const externalSymbols = SymbolManager.getSymbolMap(extDoc); const externalItems = getRenameTargetsFromParentScope(extDoc, externalSymbols, key); @@ -91,7 +87,7 @@ namespace RenameProviderSupport { export function hasGlobalizer(docs: Array, key: string): boolean { for (let i = 0; i < docs.length; i++) { const roDoc = docs[i]; - if(DocumentServices.hasGlobalizedTargetKey(roDoc, key)) { + if (DocumentServices.hasGlobalizedTargetKey(roDoc, key)) { return true; } } diff --git a/extension/src/test/runTest.ts b/extension/src/test/runTest.ts index c39b11a9..1f983930 100644 --- a/extension/src/test/runTest.ts +++ b/extension/src/test/runTest.ts @@ -1,6 +1,6 @@ import * as path from 'path'; // import * as process from 'process'; -import { runTests } from 'vscode-test'; +import { runTests } from "@vscode/test-electron"; async function main() { try { @@ -24,6 +24,7 @@ async function main() { // Download minimum VSCode version defined by our package.json, unzip it and run the integration test environment // aside from testing against our package.json claims, it also avoids random vscode installations bloating dev environments + console.log(process.env.npm_package_engines_vscode) await runTests({ version: process.env.npm_package_engines_vscode.slice(1), platform: diff --git a/extension/src/test/suite/AutoIndent.test.ts b/extension/src/test/suite/AutoIndent.test.ts index 30965111..1ee77e64 100644 --- a/extension/src/test/suite/AutoIndent.test.ts +++ b/extension/src/test/suite/AutoIndent.test.ts @@ -27,6 +27,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(0, 28); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -39,6 +40,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(1, 13); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) // let containerParens: ElementRange = containerElement.containerParens[0]; assert.isTrue(lineIndentSpace == 2); } catch (err) { @@ -52,6 +54,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(12, 36); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 14); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -64,6 +67,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(7, 20); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 14); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -76,6 +80,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(6, 25); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 18); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -88,6 +93,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(8, 30); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 17); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -100,6 +106,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(16, 25); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -112,6 +119,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(17, 14); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -124,6 +132,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(21, 19); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -136,6 +145,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(22, 18); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 6); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -148,6 +158,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(25, 17); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 12); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -160,6 +171,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(33, 8); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 4); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); @@ -196,6 +208,7 @@ suite("Autoindent Tests", function () { let cursorPos2d = new vscode.Position(20, 2); replaceDocWithEnter(indentTestFile, cursorPos2d); let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) assert.isTrue(lineIndentSpace == 2); } catch (err) { assert.fail(`Autoindent test for ${fn} failed`); diff --git a/extension/src/test/suite/codeCoverage.ts b/extension/src/test/suite/codeCoverage.ts index fcd0b5ef..b24ba19d 100644 --- a/extension/src/test/suite/codeCoverage.ts +++ b/extension/src/test/suite/codeCoverage.ts @@ -12,10 +12,10 @@ const NYC = require('nyc'); export async function run(): Promise { const reportingDir = path.resolve(__dirname, '../../../coverage'); - if(fs.existsSync(reportingDir)) { + if (fs.existsSync(reportingDir)) { fs.removeSync(reportingDir); } - + // Create the mocha test const mocha = new Mocha({ ui: 'tdd', @@ -24,7 +24,7 @@ export async function run(): Promise { 'reportDir': path.resolve(__dirname, '../../../coverage/mochawesome') } }); - mocha.useColors(true); + mocha.options.color = true; const testsRoot = path.resolve(__dirname, '..'); @@ -61,7 +61,7 @@ async function setupNYC() { // To make sure the report is only for current run const tempDirectory = nyc.tempDirectory(); - if(fs.existsSync(tempDirectory)) { + if (fs.existsSync(tempDirectory)) { fs.removeSync(tempDirectory); } await nyc.createTempDirectory(); @@ -80,7 +80,7 @@ async function reportCodeCoverage(nyc) { await nyc.report.bind(nyc)(); process.stdout.write = currentWrite; - + console.log(textReport); console.log("--------------------------------------------------------"); console.log("Open coverage folder to check detailed report in HTML."); diff --git a/extension/src/test/suite/index.ts b/extension/src/test/suite/index.ts index 55a28351..de358eb0 100644 --- a/extension/src/test/suite/index.ts +++ b/extension/src/test/suite/index.ts @@ -1,21 +1,18 @@ import * as path from 'path'; import * as Mocha from 'mocha'; -import * as glob from 'glob'; -export function run(): Promise { +import { glob } from 'glob'; +export async function run(): Promise { // Create the mocha test const mocha = new Mocha({ ui: 'tdd' }); - mocha.useColors(true); + mocha.options.color = true; const testsRoot = path.resolve(__dirname, '..'); - return new Promise((c, e) => { - glob('**/*.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - // Add files to the test suite + return new Promise(async (c, e) => { + try { + let files = await glob('**/*.test.js', { cwd: testsRoot }) files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); try { // Run the mocha test @@ -27,9 +24,13 @@ export function run(): Promise { } }); } catch (err) { - console.error(err); e(err); } - }); + } catch { + (err) => { + return e(err); + }; + } + }); } diff --git a/extension/src/test/suite/providers.renameProvider.test.ts b/extension/src/test/suite/providers.renameProvider.test.ts index 33fa1bdb..1f9c5d01 100644 --- a/extension/src/test/suite/providers.renameProvider.test.ts +++ b/extension/src/test/suite/providers.renameProvider.test.ts @@ -7,10 +7,11 @@ import { ReadonlyDocument } from '../../project/readOnlyDocument'; import { IRootSymbolHost, SymbolManager } from '../../symbols'; import { TDD, AutoLispExtPrepareRename, AutoLispExtProvideRenameEdits } from '../../providers/renameProvider'; import { AutoLispExt } from '../../context'; +import { WorkspaceEdit } from 'vscode-languageclient'; let docSymbols: IRootSymbolHost; -suite("RenameProvider: Tests", function () { +suite("RenameProvider: Tests", function () { let roDoc: ReadonlyDocument; let good: Position; let bad: Position; @@ -37,7 +38,7 @@ suite("RenameProvider: Tests", function () { - test("AutoLispExtPrepareRename() Valid Atom", function () { + test("AutoLispExtPrepareRename() Valid Atom", function () { try { const prepResult = AutoLispExtPrepareRename(roDoc, good); expect(prepResult.range.start.line).to.equal(24); @@ -51,7 +52,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtPrepareRename() Invalid Atom", function () { + test("AutoLispExtPrepareRename() Invalid Atom", function () { try { expect(AutoLispExtPrepareRename(roDoc, bad)).to.equal(null); } @@ -63,7 +64,7 @@ suite("RenameProvider: Tests", function () { - test("AutoLispExtProvideRenameEdits() Un-Hosted Atom", async function () { + test("AutoLispExtProvideRenameEdits() Un-Hosted Atom", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, outlier, 'anything'); expect(sut.entries().length).to.equal(1); @@ -73,7 +74,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() Localized Atom", async function () { + test("AutoLispExtProvideRenameEdits() Localized Atom", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, localized, 'activeDOC'); expect(sut.entries().length).to.equal(1); @@ -83,7 +84,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() Exported Defun", async function () { + test("AutoLispExtProvideRenameEdits() Exported Defun", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, globalDefun, 'otherFunc'); expect(sut.entries().length).to.equal(3); @@ -93,7 +94,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() Documented Local Argument", async function () { + test("AutoLispExtProvideRenameEdits() Documented Local Argument", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, localArg, 'dim'); expect(sut.entries().length).to.equal(1); @@ -103,7 +104,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() bad user input", async function () { + test("AutoLispExtProvideRenameEdits() bad user input", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, good, 'a b c'); expect(sut).to.equal(null); @@ -113,7 +114,7 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() bad user target", async function () { + test("AutoLispExtProvideRenameEdits() bad user target", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, native, 'whatever'); expect(sut.entries().length).to.equal(1); @@ -123,18 +124,18 @@ suite("RenameProvider: Tests", function () { } }); - test("AutoLispExtProvideRenameEdits() good user input", async function () { + test("AutoLispExtProvideRenameEdits() good user input", async function () { try { - const sut = AutoLispExtProvideRenameEdits(roDoc, good, 'anything'); + const sut = AutoLispExtProvideRenameEdits(roDoc, good, 'anything'); expect(sut.size).to.equal(2); - expect(sut['_edits'].length).to.equal(4); + expect(sut['a'].length).to.equal(4); } catch (err) { assert.fail("The known position failed to produced results or results other than expected"); } }); - test("AutoLispExtProvideRenameEdits()", async function () { + test("AutoLispExtProvideRenameEdits()", async function () { try { const prepResult = AutoLispExtProvideRenameEdits(roDoc, good, 'Autoquad'); prepResult.entries().forEach(item => { @@ -151,7 +152,7 @@ suite("RenameProvider: Tests", function () { - test("RenameProviderSupport.getRenameTargetsFromParentScope()", function () { + test("RenameProviderSupport.getRenameTargetsFromParentScope()", function () { try { docSymbols = SymbolManager.getSymbolMap(roDoc); const targets = TDD.getRenameTargetsFromParentScope(roDoc, docSymbols, 'globalsareloaded'); @@ -163,9 +164,9 @@ suite("RenameProvider: Tests", function () { }); - - test("RenameProviderSupport.getTargetSymbolReference() with bad inputs", function () { + + test("RenameProviderSupport.getTargetSymbolReference() with bad inputs", function () { try { docSymbols = SymbolManager.getSymbolMap(roDoc); const sut = TDD.getTargetSymbolReference(docSymbols, 'missing', -1); @@ -179,7 +180,7 @@ suite("RenameProvider: Tests", function () { - test("RenameProviderSupport.hasGlobalizer() with unused key name", function () { + test("RenameProviderSupport.hasGlobalizer() with unused key name", function () { try { const sut = TDD.hasGlobalizer([roDoc], 'missing'); expect(sut).to.equal(false); @@ -189,10 +190,10 @@ suite("RenameProvider: Tests", function () { } }); - - - - test("RenameProviderSupport.isValidInput()", function () { + + + + test("RenameProviderSupport.isValidInput()", function () { try { expect(TDD.isValidInput('space test')).to.equal(false); expect(TDD.isValidInput('"stringTest"')).to.equal(false); diff --git a/package-lock.json b/package-lock.json index b033c6f9..a527b5a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,1463 +10,1210 @@ "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE.md", "dependencies": { + "@vscode/ripgrep": "^1.17.0", "@vscode/vsce": "^3.7.1", - "execa": "1.0.0", - "fs-extra": "^8.1.0", - "jschardet": "2.1.1", - "os-locale": "5.0.0", - "vscode-extension-tester": "^8.0.0", - "vscode-languageclient": "9.0.1", - "vscode-nls": "3.2.5", - "vscode-ripgrep": "1.5.8" + "execa": "^9.6.1", + "fs-extra": "^11.3.3", + "jschardet": "^3.1.4", + "os-locale": "^8.0.0", + "vscode-languageclient": "^9.0.1", + "vscode-nls": "^5.2.0" }, "devDependencies": { - "@types/fs-extra": "^8.1.0", - "source-map-resolve": "0.6.0", - "mocha": "^11.3.0", - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "nyc": "^15.1.0", - "mochawesome": "^7.0.1", + "@eslint/js": "^9.39.2", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@types/chai": "^5.2.3", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.10", + "@types/node": "^25.2.2", + "@types/vscode": "^1.109.0", + "@vscode/test-electron": "^2.5.2", + "chai": "^6.2.2", + "del": "^8.0.1", + "eslint": "^9.39.2", "event-stream": "^4.0.1", + "glob": "^13.0.2", "gulp": "^5.0.1", - "source-map": "0.7.4", - "@types/chai": "^4.2.15", - "vscode-nls-dev": "^4.0.4", - "@types/vscode": "^1.108.0", - "vscode-test": "^1.4.1", - "del": "^4.1.1", - "typescript": "^5.5.4", - "@types/node": "^25.2.1", - "ts-node": "^9.1.1", - "tslint": "5.11.0", - "chai": "^4.2.0", - "@vscode/test-cli": "^0.0.12", - "gulp-filter": "^5.1.0", - "@vscode/test-electron": "^2.5.2", "gulp-cli": "^3.1.0", - "gulp-typescript": "^5.0.1", + "gulp-filter": "^9.0.1", "gulp-sourcemaps": "^2.6.5", - "ts-mock-imports": "^1.3.3", - "@types/mocha": "^5.2.7", - "ts-sinon": "^2.0.1", - "run-sequence": "^2.2.1" + "gulp-typescript": "^6.0.0-alpha.1", + "mocha": "^11.3.0", + "mochawesome": "^7.1.4", + "nyc": "^17.1.0", + "run-sequence": "^2.2.1", + "source-map": "^0.7.6", + "source-map-resolve": "^0.6.0", + "supports-color": "^8.1.1", + "ts-mock-imports": "^1.3.19", + "ts-node": "^10.9.2", + "ts-sinon": "^2.0.2", + "typescript": "^5.9.3", + "typescript-eslint": "^8.55.0", + "vscode-extension-tester": "^8.21.0", + "vscode-nls-dev": "^4.0.4" }, "engines": { - "vscode": "^1.108.0" + "vscode": "^1.109.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "node_modules/@azu/format-text": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "license": "BSD-3-Clause" }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "license": "ISC", + "node_modules/@azu/style-format": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", + "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "license": "WTFPL", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "@azu/format-text": "^1.0.1" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=18.0.0" } }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", "license": "MIT", "dependencies": { - "tslib": "^1.8.1" + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@sec-ant/readable-stream": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", - "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "optional": true, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/vscode-nls-dev/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, + "node_modules/@azure/core-tracing": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "tslib": "^2.6.2" }, "engines": { - "node": ">=12" + "node": ">=20.0.0" } }, - "node_modules/byte-counter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/byte-counter/-/byte-counter-0.1.0.tgz", - "integrity": "sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==", + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", "license": "MIT", - "engines": { - "node": ">=20" + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/vscode-extension-tester": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/vscode-extension-tester/-/vscode-extension-tester-8.21.0.tgz", - "integrity": "sha512-TeEQR4pqq4qCe30IBbJFknw5VgPHyQLisrjp+9d/ewvgYAFu87Tv0TxczDRDwSYUCNrUhqH18OkbNTIdBmaeOw==", - "license": "Apache-2.0", + "node_modules/@azure/identity": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", + "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "license": "MIT", "dependencies": { - "js-yaml": "^4.1.1", - "got": "^14.6.6", - "c8": "^10.1.3", - "targz": "^1.0.1", - "unzipper": "^0.12.3", - "@types/selenium-webdriver": "^4.35.4", - "selenium-webdriver": "^4.39.0", - "@vscode/vsce": "^3.7.1", - "fs-extra": "^11.3.3", - "@redhat-developer/page-objects": "^1.18.1", - "compare-versions": "^6.1.1", - "find-up": "8.0.0", - "commander": "^14.0.2", - "glob": "^13.0.0", - "hpagent": "^1.2.0", - "sanitize-filename": "^1.6.3", - "@redhat-developer/locators": "^1.18.1" - }, - "bin": { - "extest": "out/cli.js" + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" }, - "peerDependencies": { - "mocha": ">=5.2.0", - "typescript": ">=4.6.2" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/tslint/node_modules/diff": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.1.tgz", - "integrity": "sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@azure/logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=0.3.1" + "node": ">=20.0.0" } }, - "node_modules/invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "node_modules/@azure/msal-browser": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.2.tgz", + "integrity": "sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@azure/msal-common": "15.14.2" }, - "funding": { - "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "node_modules/@azure/msal-common": { + "version": "15.14.2", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.2.tgz", + "integrity": "sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==", "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=0.8.0" } }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-nls-dev/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/@azure/msal-node": { + "version": "3.8.7", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.7.tgz", + "integrity": "sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.14.2", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" }, "engines": { - "node": ">=4.2.0" + "node": ">=16" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@redhat-developer/page-objects": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/page-objects/-/page-objects-1.18.1.tgz", - "integrity": "sha512-clwXbTAykhqJqUkdTWUtS7jwY1eQVhlgQia6GfmMHMLGxqMbHCgHVm0rEYoR1C050XWYxtfsEpnsmUB9Kjcs9A==", - "license": "Apache-2.0", - "dependencies": { - "clipboardy": "^5.0.2", - "clone-deep": "^4.0.1", - "compare-versions": "^6.1.1", - "fs-extra": "^11.3.3", - "type-fest": "^4.41.0" - }, - "peerDependencies": { - "selenium-webdriver": ">=4.6.1", - "typescript": ">=4.6.2" + "node": ">=6.9.0" } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "aggregate-error": "^3.0.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" }, - "node_modules/workerpool": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", - "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", - "license": "Apache-2.0" + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, "license": "MIT", "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=6.9.0" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/parse-json": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", - "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", - "license": "MIT", + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.26.2", - "index-to-position": "^1.1.0", - "type-fest": "^4.39.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "yallist": "^3.0.2" } }, - "node_modules/sver/node_modules/semver": { + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", - "optional": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, - "node_modules/secretlint/node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/@secretlint/config-loader": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", - "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, "license": "MIT", "dependencies": { - "@secretlint/profiler": "^10.2.2", - "@secretlint/resolver": "^10.2.2", - "@secretlint/types": "^10.2.2", - "ajv": "^8.17.1", - "debug": "^4.4.1", - "rc-config-loader": "^4.1.3" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { - "node": ">=20.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@vscode/vsce/node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", - "license": "BlueOak-1.0.0", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6.9.0" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, - "license": "ISC" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { - "node": ">= 0.4" + "node": ">=6.9.0" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, "bin": { - "flat": "cli.js" + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/vscode-ripgrep": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.8.tgz", - "integrity": "sha512-l6Pv/t1Jk63RU+kEkMO04XxnNRYdyzuesizj9AzFpcfrUxxpAjEJBK1qO9Mov30UUGZl7uDUBn+uCv9koaHPPA==", - "deprecated": "This package has been renamed to @vscode/ripgrep, please update to the new name", - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/@redhat-developer/page-objects/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/gulp-typescript/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/c8/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6.9.0" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@bazel/runfiles": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.5.0.tgz", + "integrity": "sha512-RzahvqTkfpY2jsDxo8YItPX+/iZ6hbiikw1YhE0bA9EKBR5Og8Pa6FHn9PO9M0zaXRVsr0GFQLKbB/0rzy9SzA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/c8/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "license": "MIT" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/mocha/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "license": "BSD-3-Clause", + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" }, "engines": { - "node": ">=10.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", - "license": "MIT", + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "@eslint/core": "^0.17.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "license": "BSD-3-Clause", + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "@types/json-schema": "^7.0.15" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { - "path-is-inside": "^1.0.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "isobject": "^3.0.1" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/vinyl-fs": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", - "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", + "node_modules/@gulp-sourcemaps/identity-map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", + "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", "dev": true, "license": "MIT", "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.3", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.1", - "vinyl-sourcemap": "^2.0.0" + "acorn": "^5.0.3", + "css": "^2.2.1", + "normalize-path": "^2.1.1", + "source-map": "^0.6.0", + "through2": "^2.0.3" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.10" } }, - "node_modules/mochawesome/node_modules/diff": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", - "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "node_modules/@gulp-sourcemaps/identity-map/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/@azu/format-text": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", - "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", - "license": "BSD-3-Clause" - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/vscode-extension-tester/node_modules/glob": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.1.tgz", - "integrity": "sha512-B7U/vJpE3DkJ5WXTgTpTRN63uV42DseiXXKMwG14LQBXmsdeIoHAPbU/MEo6II0k5ED74uc2ZGTC6MwHFQhF6w==", - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.1.2", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.4.0" } }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "node_modules/@gulp-sourcemaps/identity-map/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/@vscode/vsce-sign-linux-arm64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", - "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", - "cpu": [ - "arm64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@vscode/vsce-sign-alpine-x64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", - "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", - "cpu": [ - "x64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "alpine" - ] - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "node_modules/@gulp-sourcemaps/identity-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "node_modules/@gulp-sourcemaps/map-sources": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", "dev": true, "license": "MIT", "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "normalize-path": "^2.0.1", + "through2": "^2.0.3" }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" + "node": ">= 0.10" } }, - "node_modules/unzipper/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "remove-trailing-separator": "^1.0.1" }, "engines": { - "node": ">=14.14" + "node": ">=0.10.0" } }, - "node_modules/got/node_modules/type-fest": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", - "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", - "license": "(MIT OR CC0-1.0)", + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/gulp-typescript/node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", "dev": true, "license": "MIT", + "dependencies": { + "is-negated-glob": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "license": "BSD-2-Clause", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 6" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=18.18.0" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "license": "MIT", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": ">=18.18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", "engines": { - "node": ">=12" + "node": "20 || >=22" } }, - "node_modules/rc-config-loader/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@isaacs/balanced-match": "^4.0.1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "20 || >=22" } }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "remove-trailing-separator": "^1.0.1" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@azure/identity": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.0.tgz", - "integrity": "sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.0.0", - "@azure/core-auth": "^1.9.0", - "@azure/core-client": "^1.9.2", - "@azure/core-rest-pipeline": "^1.17.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.11.0", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^4.2.0", - "@azure/msal-node": "^3.5.0", - "open": "^10.1.0", - "tslib": "^2.2.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=20.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "streamx": "^2.12.5" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mochawesome-report-generator/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", + "integrity": "sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==", + "dev": true, + "license": "ISC", "dependencies": { - "isobject": "^3.0.1" + "@istanbuljs/schema": "^0.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "peerDependencies": { + "nyc": ">=15" } }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, - "license": "ISC" - }, - "node_modules/targz/node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "license": "MIT", "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@gulp-sourcemaps/identity-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-wrap": "0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-15.0.1.tgz", - "integrity": "sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "dev": true, "license": "MIT" }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/tslint/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 8" } }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001769", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", - "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true, - "license": "MIT" - }, - "node_modules/@secretlint/core": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", - "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { - "@secretlint/profiler": "^10.2.2", - "@secretlint/types": "^10.2.2", - "debug": "^4.4.1", - "structured-source": "^4.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=20.0.0" + "node": ">= 8" } }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "node_modules/@redhat-developer/locators": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/locators/-/locators-1.18.1.tgz", + "integrity": "sha512-fnb5prprb8jTzx9Vl2DiJq55XK7aZVwpDZV/iLY/pYsNWEn42/rLSyMUNDrvlhnFryqmVstmDUIr4eGE3iyDMw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "license": "Apache-2.0", + "peerDependencies": { + "@redhat-developer/page-objects": ">=1.0.0", + "selenium-webdriver": ">=4.6.1" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "license": "CC-BY-3.0" - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "license": "ISC", + "node_modules/@redhat-developer/page-objects": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/page-objects/-/page-objects-1.18.1.tgz", + "integrity": "sha512-clwXbTAykhqJqUkdTWUtS7jwY1eQVhlgQia6GfmMHMLGxqMbHCgHVm0rEYoR1C050XWYxtfsEpnsmUB9Kjcs9A==", + "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "lru-cache": "^6.0.0" + "clipboardy": "^5.0.2", + "clone-deep": "^4.0.1", + "compare-versions": "^6.1.1", + "fs-extra": "^11.3.3", + "type-fest": "^4.41.0" }, + "peerDependencies": { + "selenium-webdriver": ">=4.6.1", + "typescript": ">=4.6.2" + } + }, + "node_modules/@redhat-developer/page-objects/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce-sign-darwin-x64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", - "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", - "cpu": [ - "x64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "darwin" - ] + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" }, - "node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "node_modules/@secretlint/config-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", + "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "@secretlint/types": "^10.2.2" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, - "node_modules/vscode-extension-tester/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "node_modules/@secretlint/config-loader": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz", + "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@secretlint/profiler": "^10.2.2", + "@secretlint/resolver": "^10.2.2", + "@secretlint/types": "^10.2.2", + "ajv": "^8.17.1", + "debug": "^4.4.1", + "rc-config-loader": "^4.1.3" }, "engines": { - "node": ">=14.14" + "node": ">=20.0.0" } }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true, + "node_modules/@secretlint/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz", + "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==", "license": "MIT", + "dependencies": { + "@secretlint/profiler": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "structured-source": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/mocha/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/rc-config-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", - "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "js-yaml": "^4.1.0", - "json5": "^2.2.2", - "require-from-string": "^2.0.2" + "node": ">=20.0.0" } }, "node_modules/@secretlint/formatter": { @@ -1491,162 +1238,147 @@ "node": ">=20.0.0" } }, - "node_modules/mochawesome-report-generator/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "node_modules/@secretlint/formatter/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@vscode/test-cli/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "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", - "dev": true, - "license": "ISC", + "node_modules/@secretlint/node": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", + "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "@secretlint/config-loader": "^10.2.2", + "@secretlint/core": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "@secretlint/source-creator": "^10.2.2", + "@secretlint/types": "^10.2.2", + "debug": "^4.4.1", + "p-map": "^7.0.3" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/parse-semver": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "node_modules/@secretlint/profiler": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", + "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", + "license": "MIT" + }, + "node_modules/@secretlint/resolver": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", + "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", + "license": "MIT" + }, + "node_modules/@secretlint/secretlint-formatter-sarif": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", + "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", "license": "MIT", "dependencies": { - "semver": "^5.1.0" + "node-sarif-builder": "^3.2.0" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/@secretlint/secretlint-rule-no-dotenv": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", + "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@secretlint/types": "^10.2.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=20.0.0" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" + "node_modules/@secretlint/secretlint-rule-preset-recommend": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", + "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "node_modules/@secretlint/source-creator": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", + "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "@secretlint/types": "^10.2.2", + "istextorbinary": "^9.5.0" }, "engines": { - "node": ">=8" + "node": ">=20.0.0" } }, - "node_modules/sver": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", - "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", - "dev": true, + "node_modules/@secretlint/types": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", + "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", "license": "MIT", - "optionalDependencies": { - "semver": "^6.3.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/@vscode/vsce/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/hasha/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@secretlint/secretlint-rule-preset-recommend": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz", - "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" } }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "license": "WTFPL OR ISC", + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "truncate-utf8-bytes": "^1.0.0" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/ts-sinon/node_modules/@sinonjs/samsam": { + "node_modules/@sinonjs/samsam": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", @@ -1658,2639 +1390,863 @@ "type-detect": "^4.0.8" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@textlint/ast-node-types": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.1.tgz", + "integrity": "sha512-2ABQSaQoM9u9fycXLJKcCv4XQulJWTUSwjo6F0i/ujjqOH8/AZ2A0RDKKbAddqxDhuabVB20lYoEsZZgzehccg==", "license": "MIT" }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "node_modules/@textlint/linter-formatter": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.1.tgz", + "integrity": "sha512-7wfzpcQtk7TZ3UJO2deTI71mJCm4VvPGUmSwE4iuH6FoaxpdWpwSBiMLcZtjYrt/oIFOtNz0uf5rI+xJiHTFww==", "license": "MIT", - "optional": true + "dependencies": { + "@azu/format-text": "^1.0.2", + "@azu/style-format": "^1.0.1", + "@textlint/module-interop": "15.5.1", + "@textlint/resolver": "15.5.1", + "@textlint/types": "15.5.1", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "js-yaml": "^4.1.1", + "lodash": "^4.17.21", + "pluralize": "^2.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "table": "^6.9.0", + "text-table": "^0.2.0" + } }, - "node_modules/ts-mock-imports": { - "version": "1.3.19", - "resolved": "https://registry.npmjs.org/ts-mock-imports/-/ts-mock-imports-1.3.19.tgz", - "integrity": "sha512-9vYKRTSWLs03caKmYFry0cXj3K4xo61PsU8PUE9ZtnX6PTglcbqroJXtb60z28wgVpmnmRwlzqDW4LfnwRYHkw==", - "dev": true, + "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", - "peerDependencies": { - "sinon": ">= 4.1.2", - "typescript": ">=2.6.1" + "engines": { + "node": ">=8" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" + "node_modules/@textlint/linter-formatter/node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "license": "MIT" }, - "node_modules/mem": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", - "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^2.1.0", - "p-is-promise": "^2.1.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/undertaker-registry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", - "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } + "node_modules/@textlint/module-interop": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.1.tgz", + "integrity": "sha512-Y1jcFGCKNSmHxwsLO3mshOfLYX4Wavq2+w5BG6x5lGgZv0XrF1xxURRhbnhns4LzCu0fAcx6W+3V8/1bkyTZCw==", + "license": "MIT" }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/@textlint/resolver": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.1.tgz", + "integrity": "sha512-CVHxMIm8iNGccqM12CQ/ycvh+HjJId4RyC6as5ynCcp2E1Uy1TCe0jBWOpmLsbT4Nx15Ke29BmspyByawuIRyA==", "license": "MIT" }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@textlint/types": { + "version": "15.5.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.1.tgz", + "integrity": "sha512-IY1OVZZk8LOOrbapYCsaeH7XSJT89HVukixDT8CoiWMrKGCTCZ3/Kzoa3DtMMbY8jtY777QmPOVCNnR+8fF6YQ==", "license": "MIT", - "optional": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@textlint/ast-node-types": "15.5.1" } }, - "node_modules/tcomb": { - "version": "3.2.29", - "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", - "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "node_modules/@tsconfig/node10": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", + "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "dev": true, "license": "MIT" }, - "node_modules/unzipper/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, "license": "MIT", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/vinyl-fs/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } + "license": "MIT" }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" + "@types/jsonfile": "*", + "@types/node": "*" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, "license": "MIT", "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", + "node_modules/@types/mocha": { + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "undici-types": "~7.16.0" } }, - "node_modules/lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "license": "MIT" + }, + "node_modules/@types/sarif": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", + "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", + "license": "MIT" + }, + "node_modules/@types/selenium-webdriver": { + "version": "4.35.5", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.35.5.tgz", + "integrity": "sha512-wCQCjWmahRkUAO7S703UAvBFkxz4o/rjX4T2AOSWKXSi0sTQPsrXxR0GjtFUT0ompedLkYH4R5HO5Urz0hyeog==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10.13.0" + "dependencies": { + "@types/node": "*", + "@types/ws": "*" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "node_modules/@types/sinon": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", + "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/run-sequence/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/@types/sinon-chai": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", + "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" } }, - "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-15.0.1.tgz", + "integrity": "sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/vscode": { + "version": "1.109.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz", + "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@types/node": "*" } }, - "node_modules/secretlint": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", - "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.55.0.tgz", + "integrity": "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==", + "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-creator": "^10.2.2", - "@secretlint/formatter": "^10.2.2", - "@secretlint/node": "^10.2.2", - "@secretlint/profiler": "^10.2.2", - "debug": "^4.4.1", - "globby": "^14.1.0", - "read-pkg": "^9.0.1" - }, - "bin": { - "secretlint": "bin/secretlint.js" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/type-utils": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": ">=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.55.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/unique-stream": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", - "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "3.0.0" + "engines": { + "node": ">= 4" } }, - "node_modules/@textlint/types": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.5.1.tgz", - "integrity": "sha512-IY1OVZZk8LOOrbapYCsaeH7XSJT89HVukixDT8CoiWMrKGCTCZ3/Kzoa3DtMMbY8jtY777QmPOVCNnR+8fF6YQ==", + "node_modules/@typescript-eslint/parser": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", + "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@textlint/ast-node-types": "15.5.1" + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/process-on-spawn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", - "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", + "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", "dev": true, "license": "MIT", "dependencies": { - "fromentries": "^1.2.0" + "@typescript-eslint/tsconfig-utils": "^8.55.0", + "@typescript-eslint/types": "^8.55.0", + "debug": "^4.4.3" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/nise/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", + "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0" + }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", + "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.55.0.tgz", + "integrity": "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==", "dev": true, "license": "MIT", "dependencies": { - "buffer-equal": "^1.0.0" + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/@typescript-eslint/types": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", + "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/gulp-filter": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", - "integrity": "sha512-ZERu1ipbPmjrNQ2dQD6lL4BjrJQG66P/c5XiyMMBqV+tUAJ+fLOyYIL/qnXd2pHmw/G/r7CLQb9ttANvQWbpfQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", + "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", "dev": true, "license": "MIT", "dependencies": { - "multimatch": "^2.0.0", - "plugin-error": "^0.1.2", - "streamfilter": "^1.0.5" + "@typescript-eslint/project-service": "8.55.0", + "@typescript-eslint/tsconfig-utils": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/visitor-keys": "8.55.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "balanced-match": "^1.0.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "brace-expansion": "^2.0.1" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/@typescript-eslint/utils": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.55.0.tgz", + "integrity": "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.55.0", + "@typescript-eslint/types": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/gulp-typescript/node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", + "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", "dev": true, "license": "MIT", "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" + "@typescript-eslint/types": "8.55.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz", + "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">=20.0.0" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, + "node_modules/@vscode/ripgrep": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.17.0.tgz", + "integrity": "sha512-mBRKm+ASPkUcw4o9aAgfbusIu6H4Sdhw09bjeP1YOBFTJEZAnrnk6WZwzv8NEjgC82f7ILvhmb1WIElSugea6g==", + "hasInstallScript": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "https-proxy-agent": "^7.0.2", + "proxy-from-env": "^1.1.0", + "yauzl": "^2.9.2" } }, - "node_modules/@vscode/vsce-sign": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", - "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", - "hasInstallScript": true, - "license": "SEE LICENSE IN LICENSE.txt", - "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" - } - }, - "node_modules/vscode-test/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/os-locale/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "node_modules/@vscode/test-electron": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", + "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^8.1.0", + "semver": "^7.6.2" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" + "node": ">=16" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "node_modules/@vscode/vsce": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", + "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "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", - "dev": true, - "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@azure/identity": "^4.1.0", + "@secretlint/node": "^10.1.2", + "@secretlint/secretlint-formatter-sarif": "^10.1.2", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^4.1.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^12.1.0", + "form-data": "^4.0.0", + "glob": "^11.0.0", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^14.1.0", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "secretlint": "^10.1.2", + "semver": "^7.5.2", + "tmp": "^0.2.3", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/bach": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", - "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-done": "^2.0.0", - "async-settle": "^2.0.0", - "now-and-later": "^3.0.0" + "bin": { + "vsce": "vsce" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "node": ">= 20" }, - "engines": { - "node": ">=7.0.0" + "optionalDependencies": { + "keytar": "^7.7.0" } }, - "node_modules/gulp-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node_modules/@vscode/vsce-sign": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.9.tgz", + "integrity": "sha512-8IvaRvtFyzUnGGl3f5+1Cnor3LqaUWvhaUjAYO8Y39OUYlOf3cRd+dowuQYLpZcP3uwSG+mURwjEBOSq4SOJ0g==", + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE.txt", + "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" } }, - "node_modules/@textlint/linter-formatter/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", + "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] }, - "node_modules/run-jxa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", + "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "license": "MIT", - "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" - } + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@vscode/vsce-sign-win32-x64": { + "node_modules/@vscode/vsce-sign-darwin-x64": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", - "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", + "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", "cpu": [ "x64" ], "license": "SEE LICENSE IN LICENSE.txt", "optional": true, "os": [ - "win32" + "darwin" ] }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/gulp-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/bare-events": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", - "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/v8flags": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", - "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "license": "MIT" - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", - "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/ts-sinon/node_modules/sinon": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", - "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", - "deprecated": "16.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.8.1", - "@sinonjs/fake-timers": "^6.0.1", - "@sinonjs/samsam": "^5.3.1", - "diff": "^4.0.2", - "nise": "^4.0.4", - "supports-color": "^7.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/vinyl-contents/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", + "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", + "cpu": [ + "arm" ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "linux" + ] }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", + "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", + "cpu": [ + "arm64" ], - "license": "MIT", + "license": "SEE LICENSE IN LICENSE.txt", "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT" + "os": [ + "linux" + ] }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", - "license": "MIT" - }, - "node_modules/mocha/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/read-pkg/node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/targz/node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "license": "MIT", - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/clipboardy/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/vscode-test/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@istanbuljs/nyc-config-typescript": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", - "integrity": "sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "nyc": ">=15" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-ms": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", - "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true, - "license": "MIT" - }, - "node_modules/@vscode/vsce/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "license": "MIT" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/run-jxa/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vscode/vsce/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", - "dev": true, - "license": "MIT", - "dependencies": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "istanbul-lib-source-maps": "^4.0.0", - "yargs": "^15.0.2", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "signal-exit": "^3.0.2", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "istanbul-lib-instrument": "^4.0.0", - "process-on-spawn": "^1.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "caching-transform": "^4.0.0", - "get-package-type": "^0.1.0", - "test-exclude": "^6.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "istanbul-reports": "^3.0.2", - "resolve-from": "^5.0.0", - "find-up": "^4.1.0", - "spawn-wrap": "^2.0.0", - "@istanbuljs/schema": "^0.1.2", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "glob": "^7.1.6", - "foreground-child": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@vscode/vsce/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/responselike": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-4.0.2.tgz", - "integrity": "sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/os-locale/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.286", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", - "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@secretlint/formatter/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/streamx": { - "version": "2.23.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", - "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "license": "MIT" - }, - "node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@vscode/vsce/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "license": "ISC" - }, - "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "license": "MIT" - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/subsume/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/c8/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/os-locale/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/gulp-typescript/node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", - "dev": true, - "license": "MIT", - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vinyl-contents/node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "license": "MIT", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", - "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.3", - "normalize-package-data": "^6.0.0", - "parse-json": "^8.0.0", - "type-fest": "^4.6.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "license": "BSD-2-Clause" - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true, - "license": "MIT" - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, - "node_modules/vscode-nls-dev/node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@vscode/vsce/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/gulp-typescript/node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mochawesome-report-generator/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@vscode/test-cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", + "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", + "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", + "cpu": [ + "arm64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", + "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", + "cpu": [ + "x64" + ], + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": "*" + "node": ">=0.4.0" } }, - "node_modules/@textlint/linter-formatter": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.5.1.tgz", - "integrity": "sha512-7wfzpcQtk7TZ3UJO2deTI71mJCm4VvPGUmSwE4iuH6FoaxpdWpwSBiMLcZtjYrt/oIFOtNz0uf5rI+xJiHTFww==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, "license": "MIT", - "dependencies": { - "@azu/format-text": "^1.0.2", - "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.5.1", - "@textlint/resolver": "15.5.1", - "@textlint/types": "15.5.1", - "chalk": "^4.1.2", - "debug": "^4.4.3", - "js-yaml": "^4.1.1", - "lodash": "^4.17.21", - "pluralize": "^2.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "table": "^6.9.0", - "text-table": "^0.2.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/mochawesome-report-generator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "acorn": "^8.11.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.4.0" } }, - "node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", - "dev": true, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/nyc/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/css/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/os-locale/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" + "node": ">=8" } }, - "node_modules/got/node_modules/decompress-response": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-10.0.0.tgz", - "integrity": "sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==", + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "mimic-response": "^4.0.0" - }, - "engines": { - "node": ">=20" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", "dev": true, "license": "MIT", "dependencies": { - "is-path-inside": "^2.1.0" + "ansi-wrap": "0.1.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/hpagent": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", - "license": "MIT", - "engines": { - "node": ">=14" + "node": ">=0.10.0" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" + "environment": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-gray": { @@ -4306,625 +2262,690 @@ "node": ">=0.10.0" } }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/targz": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz", - "integrity": "sha512-6q4tP9U55mZnRuMTBqnqc3nwYQY3kv+QthCFZuMk+Tn1qYUnMPmL/JZ/mzgXINzFpSqfU+242IFmFU9VPvqaQw==", - "license": "MIT", - "dependencies": { - "tar-fs": "^1.8.1" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "license": "ISC" - }, - "node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "license": "MIT", - "dependencies": { - "invert-kv": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", "dev": true, - "license": "ISC" - }, - "node_modules/got": { - "version": "14.6.6", - "resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz", - "integrity": "sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==", "license": "MIT", "dependencies": { - "@sindresorhus/is": "^7.0.1", - "byte-counter": "^0.1.0", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^13.0.12", - "decompress-response": "^10.0.0", - "form-data-encoder": "^4.0.2", - "http2-wrapper": "^2.2.1", - "keyv": "^5.5.3", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^4.0.1", - "responselike": "^4.0.2", - "type-fest": "^4.26.1" + "ansi-wrap": "0.1.0" }, "engines": { - "node": ">=20" + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dev": true, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { - "once": "^1.4.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">=0.4" + "node": ">= 8" } }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "buffer-equal": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { - "process-on-spawn": "^1.0.0" + "default-require-extensions": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/debug-fabulous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, "license": "MIT", - "dependencies": { - "sparkles": "^2.1.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">=0.10.0" } }, - "node_modules/cheerio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", - "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", + "node_modules/array-differ": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-4.0.0.tgz", + "integrity": "sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==", + "dev": true, "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "encoding-sniffer": "^0.2.1", - "htmlparser2": "^10.1.0", - "parse5": "^7.3.0", - "parse5-htmlparser2-tree-adapter": "^7.1.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^7.19.0", - "whatwg-mimetype": "^4.0.0" - }, "engines": { - "node": ">=20.18.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-jxa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/esniff": { + "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" - }, + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "node_modules/async-settle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "async-done": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/os-locale/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { - "node-which": "bin/node-which" + "atob": "bin/atob.js" }, "engines": { - "node": ">= 8" + "node": ">= 4.5.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "license": "MIT", "dependencies": { - "immediate": "~3.0.5" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", - "dev": true, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" + "node_modules/b4a": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", + "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } } }, - "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-wrap": "^0.1.0" + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/semver-greatest-satisfied-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", - "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", "dev": true, - "license": "MIT", - "dependencies": { - "sver": "^1.8.3" + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" }, - "engines": { - "node": ">= 10.13.0" + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "license": "Artistic-2.0", "dependencies": { - "p-locate": "^5.0.0" + "editions": "^6.21.0" }, "engines": { - "node": ">=10" + "node": ">=4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://bevry.me/fund" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", + "optional": true, "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/strip-final-newline": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", - "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "engines": { - "node": ">=18" + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", + "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", + "license": "BSD-2-Clause" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@vscode/vsce/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/nyc/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, - "license": "ISC", + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "glob": "^7.1.3" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { - "rimraf": "bin.js" + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", + "optional": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/os-locale/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, "license": "MIT", - "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" - }, "engines": { - "node": ">=18" + "node": ">=0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "license": "MIT", "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/byte-counter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/byte-counter/-/byte-counter-0.1.0.tgz", + "integrity": "sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==", + "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=20" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce-sign-linux-arm": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", - "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", - "cpu": [ - "arm" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", + "node_modules/c8": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", + "dev": true, + "license": "ISC", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "@bcoe/v8-coverage": "^1.0.1", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/c8/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/ts-sinon/node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "node_modules/c8/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^1.7.0" + "balanced-match": "^1.0.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/c8/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "license": "MIT", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@vscode/test-cli/node_modules/minimatch": { + "node_modules/c8/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", @@ -4940,672 +2961,763 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/c8/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "node_modules/c8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/@secretlint/formatter/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/c8/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" + "engines": { + "node": ">=14.16" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/cacheable-request": { + "version": "13.0.18", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.18.tgz", + "integrity": "sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.2.0", + "keyv": "^5.5.5", + "mimic-response": "^4.0.0", + "normalize-url": "^8.1.1", + "responselike": "^4.0.2" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/cacheable-request/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@keyv/serialize": "^1.1.1" } }, - "node_modules/os-locale/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/cacheable-request/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">= 0.4" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cacheable-request": { - "version": "13.0.18", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-13.0.18.tgz", - "integrity": "sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "^4.0.4", - "get-stream": "^9.0.1", - "http-cache-semantics": "^4.2.0", - "keyv": "^5.5.5", - "mimic-response": "^4.0.0", - "normalize-url": "^8.1.1", - "responselike": "^4.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { - "pinkie": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/undertaker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", - "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", - "dev": true, + "node_modules/cheerio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", + "integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==", "license": "MIT", "dependencies": { - "bach": "^2.0.1", - "fast-levenshtein": "^3.0.0", - "last-run": "^2.0.0", - "undertaker-registry": "^2.0.0" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.1.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.19.0", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/run-sequence/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" + "node": ">= 8.10.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", - "license": "MIT", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", "dependencies": { - "iconv-lite": "0.6.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=18" + "node": ">= 6" } }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "devOptional": true, + "license": "ISC" }, - "node_modules/ts-sinon/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, - "license": "MIT" - }, - "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/clipboard-image": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clipboard-image/-/clipboard-image-0.1.0.tgz", + "integrity": "sha512-SWk7FgaXLNFld19peQ/rTe0n97lwR1WbkqxV6JKCAOh7U52AKV/PeMFCyt/8IhBdqyDA8rdyewQMKZqvWT5Akg==", + "dev": true, "license": "MIT", + "dependencies": { + "run-jxa": "^3.0.0" + }, + "bin": { + "clipboard-image": "cli.js" + }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/test-cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/clipboardy": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-5.2.1.tgz", + "integrity": "sha512-RWp4E/ivQAzgF4QSWA9sjeW+Bjo+U2SvebkDhNIfO7y65eGdXPUxMTdIKYsn+bxM3ItPHGm3e68Bv3fgQ3mARw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "clipboard-image": "^0.1.0", + "execa": "^9.6.1", + "is-wayland": "^0.1.0", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0", + "powershell-utils": "^0.2.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/mochawesome/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/nise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", - "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/fake-timers": "^6.0.0", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/run-jxa/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/vscode-nls-dev/node_modules/event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" + "engines": { + "node": ">=0.8" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/clipboardy/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } + "license": "MIT" }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=16" } }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { - "homedir-polyfill": "^1.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/@textlint/linter-formatter/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-props": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">= 8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "type-fest": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce-sign-linux-x64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", - "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", - "cpu": [ - "x64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/sparkles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", - "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" } }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/editions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", - "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", - "license": "Artistic-2.0", - "dependencies": { - "version-range": "^4.15.0" - }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", "engines": { - "ecmascript": ">= es5", - "node": ">=4" + "node": ">= 6" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/css/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=0.12" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "dev": true, "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/@secretlint/node/node_modules/debug": { + "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", @@ -5622,34 +3734,90 @@ } } }, - "node_modules/nyc/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/debug-fabulous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "debug": "3.X", + "memoizee": "0.4.X", + "object-assign": "4.X" + } + }, + "node_modules/debug-fabulous/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, - "node_modules/index-to-position": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", - "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, "engines": { "node": ">=18" }, @@ -5657,784 +3825,829 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/test-cli/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" }, - "engines": { - "node": ">=14.17" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "node_modules/del": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/del/-/del-8.0.1.tgz", + "integrity": "sha512-gPqh0mKTPvaUZGAuHbrBUYKZWBNAeHG7TU3QH5EhVwPMyKvmfJaNXhcD2jTcXsJRRcffuho4vaYweu80dRrMGA==", "dev": true, "license": "MIT", "dependencies": { - "value-or-function": "^3.0.0" + "globby": "^14.0.2", + "is-glob": "^4.0.3", + "is-path-cwd": "^3.0.0", + "is-path-inside": "^4.0.0", + "p-map": "^7.0.2", + "presentable-error": "^0.0.1", + "slash": "^5.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" } }, - "node_modules/clipboardy/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/@textlint/linter-formatter/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/detect-newline": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", "dev": true, - "license": "MIT" - }, - "node_modules/mocha/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/macos-version": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/macos-version/-/macos-version-6.0.0.tgz", - "integrity": "sha512-O2S8voA+pMfCHhBn/TIYDXzJ1qNHpPDU32oFxglKnVdJABiYYITt45oLkV9yhwA3E2FDwn3tQqUFrTsr1p3sBQ==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, + "node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.3.1" } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "devOptional": true, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT" + "license": "BSD-2-Clause" }, - "node_modules/@types/sinon": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", - "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", - "dev": true, - "license": "MIT", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "license": "MIT", + "domelementtype": "^2.3.0" + }, "engines": { - "node": ">=18" + "node": ">= 4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@secretlint/types": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz", - "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==", - "license": "MIT", - "engines": { - "node": ">=20.0.0" + "url": "https://github.com/fb55/domhandler?sponsor=1" } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/run-sequence/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, - "node_modules/vscode-extension-tester/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/is-wayland": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-wayland/-/is-wayland-0.1.0.tgz", - "integrity": "sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==", - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "readable-stream": "^2.0.2" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 10.13.0" } }, - "node_modules/form-data-encoder": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", - "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", - "license": "MIT", - "engines": { - "node": ">= 18" + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" } }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "license": "MIT", + "node_modules/editions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz", + "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==", + "license": "Artistic-2.0", "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" + "version-range": "^4.15.0" }, "engines": { - "node": ">=20.0.0" + "ecmascript": ">= es5", + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "devOptional": true, "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "once": "^1.4.0" } }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { - "node": ">=14.14" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@istanbuljs/load-nyc-config": { + "node_modules/environment": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@textlint/ast-node-types": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.5.1.tgz", - "integrity": "sha512-2ABQSaQoM9u9fycXLJKcCv4XQulJWTUSwjo6F0i/ujjqOH8/AZ2A0RDKKbAddqxDhuabVB20lYoEsZZgzehccg==", - "license": "MIT" - }, - "node_modules/@vscode/vsce-sign-win32-arm64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", - "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", - "cpu": [ - "arm64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/vscode-test/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.4" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" } }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10" } }, - "node_modules/run-jxa/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" }, "engines": { - "node": ">=8" + "node": ">=0.12" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" } }, - "node_modules/last-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", - "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=6" } }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-typescript/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=20" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT/X11", + "license": "Apache-2.0", "engines": { - "node": "*" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/istextorbinary": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", - "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", - "license": "Artistic-2.0", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", "dependencies": { - "binaryextensions": "^6.11.0", - "editions": "^6.21.0", - "textextensions": "^6.11.0" - }, - "engines": { - "node": ">=4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://bevry.me/fund" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://opencollective.com/eslint" } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10" } }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=14.16" + "node": ">=4.0" } }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/ts-sinon/node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "type-detect": "4.0.8" + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" } }, - "node_modules/c8/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" }, "engines": { - "node": ">= 8" + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" } }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "homedir-polyfill": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/spawn-wrap/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "type": "^2.7.2" } }, - "node_modules/@gulpjs/to-absolute-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", - "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, "license": "MIT", "dependencies": { - "is-negated-glob": "^1.0.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/vinyl-contents/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, "node_modules/fast-deep-equal": { @@ -6443,285 +4656,267 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, "engines": { - "node": ">=4" + "node": ">=8.6.0" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 4.9.1" } }, - "node_modules/@types/node": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.1.tgz", - "integrity": "sha512-CPrnr8voK8vC6eEtyRzvMpgp3VyVRhgclonE7qYi6P9sXwYb59ucfrnmFBTaP0yUi8Gk4yZg/LlTJULGxvTNsg==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", "dependencies": { - "undici-types": "~7.16.0" + "reusify": "^1.0.4" } }, - "node_modules/mochawesome-report-generator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "pend": "~1.2.0" } }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "is-unicode-supported": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "flat-cache": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=16.0.0" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/mochawesome-report-generator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/clipboardy/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "node": ">=10" }, - "engines": { - "node": ">= 0.4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/streamfilter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", - "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "license": "MIT" - }, - "node_modules/os-locale/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/vinyl-contents/node_modules/replace-ext": { + "node_modules/fined": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 10.13.0" } }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/vinyl-sourcemap/node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/vscode-test/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6730,473 +4925,530 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vscode-extension-tester/node_modules/find-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", - "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^8.0.0", - "unicorn-magic": "^0.3.0" - }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "for-in": "^1.0.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.10.0" } }, - "node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@vscode/test-cli/node_modules/supports-color": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", - "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "engines": { + "node": ">= 6" } }, - "node_modules/each-props": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", - "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", + "node_modules/form-data-encoder": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", + "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", "dev": true, "license": "MIT", - "dependencies": { - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">= 18" } }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=14.14" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@vscode/vsce/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/which-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "node_modules/fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/subsume": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/subsume/-/subsume-4.0.0.tgz", - "integrity": "sha512-BWnYJElmHbYZ/zKevy+TG+SsyoFCmRPDHJbR1MzLxkPOv1Jp/4hGhVUtP98s+wZBsBsHwCXvPTP0x287/WMjGg==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "unique-string": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mochawesome-report-generator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@vscode/vsce/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/cockatiel": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", - "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, "engines": { - "node": ">=6.9.0" + "node": ">=8.0.0" } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "license": "MIT" - }, - "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.4" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/azure-devops-node-api": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", - "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } + "optional": true }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "license": "MIT", + "node_modules/glob": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.2.tgz", + "integrity": "sha512-035InabNu/c1lW0tzPhAgapKctblppqsKKG9ZaNzbr+gXwWMjXoiyGSyB9sArzrjG7jY+zntRq5ZSUYemrnWVQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.2", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "node_modules/glob-stream": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", + "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" }, "engines": { - "node": ">= 14" + "node": ">=10.13.0" } }, - "node_modules/clipboardy/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "dev": true, "license": "MIT", + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/vscode-extension-tester/node_modules/yocto-queue": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", - "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", - "license": "MIT", + "node_modules/glob/node_modules/minimatch": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.1" + }, "engines": { - "node": ">=12.20" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=0.10.0" } }, - "node_modules/@types/sinon-chai": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", - "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "license": "MIT", "dependencies": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "license": "MIT", + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "license": "MIT", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" + "isexe": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "which": "bin/which" } }, - "node_modules/vscode-nls": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-3.2.5.tgz", - "integrity": "sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==", - "license": "MIT" + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": ">=8.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/globby/node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "license": "MIT", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", "dependencies": { - "safe-buffer": "^5.0.1" + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/vscode-extension-tester/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", - "hasInstallScript": true, + "node_modules/got": { + "version": "14.6.6", + "resolved": "https://registry.npmjs.org/got/-/got-14.6.6.tgz", + "integrity": "sha512-QLV1qeYSo5l13mQzWgP/y0LbMr5Plr5fJilgAIwgnwseproEbtNym8xpLsDzeZ6MWXgNE6kdWGBjdh3zT/Qerg==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" + "@sindresorhus/is": "^7.0.1", + "byte-counter": "^0.1.0", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^13.0.12", + "decompress-response": "^10.0.0", + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "keyv": "^5.5.3", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^4.0.2", + "type-fest": "^4.26.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/mocha/node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "node_modules/got/node_modules/decompress-response": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-10.0.0.tgz", + "integrity": "sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==", + "dev": true, "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "mimic-response": "^4.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">=20" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "node_modules/got/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@keyv/serialize": "^1.1.1" } }, - "node_modules/cacheable-request/node_modules/mimic-response": { + "node_modules/got/node_modules/mimic-response": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -7205,496 +5457,500 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/gulp-typescript/node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "node_modules/got/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.10" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", - "license": "MIT", - "optional": true + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/gulp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", + "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", + "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.1.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.2" + }, + "bin": { + "gulp": "bin/gulp.js" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/b4a": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.7.3.tgz", - "integrity": "sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==", + "node_modules/gulp-cli": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", + "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" + "license": "MIT", + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.1", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/@secretlint/config-loader/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/gulp-filter": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-9.0.1.tgz", + "integrity": "sha512-knVYL8h9bfYIeft3VokVTkuaWJkQJMrFCS3yVjZQC6BGg+1dZFoeUY++B9D2X4eFpeNTx9StWK0qnDby3NO3PA==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "multimatch": "^7.0.0", + "plugin-error": "^2.0.1", + "slash": "^5.1.0", + "streamfilter": "^3.0.0", + "to-absolute-glob": "^3.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "gulp": ">=4" }, "peerDependenciesMeta": { - "supports-color": { + "gulp": { "optional": true } } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "license": "BSD-3-Clause", + "node_modules/gulp-sourcemaps": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", + "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", + "dev": true, + "license": "ISC", "dependencies": { - "readable-stream": "^2.0.2" + "@gulp-sourcemaps/identity-map": "1.X", + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "5.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "1.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom-string": "1.X", + "through2": "2.X" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ts-sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/gulp-sourcemaps/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "node": ">=0.4.0" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/gulp-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/c8/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/gulp-typescript": { + "version": "6.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-6.0.0-alpha.1.tgz", + "integrity": "sha512-KoT0TTfjfT7w3JItHkgFH1T/zK4oXWC+a8xxKfniRfVcA0Fa1bKrIhztYelYmb+95RB80OLMBreknYkdwzdi2Q==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.1", + "vinyl": "^2.2.0", + "vinyl-fs": "^3.0.3" + }, "engines": { - "node": ">=8" + "node": ">= 8" + }, + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.7.0-dev " } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/@types/selenium-webdriver": { - "version": "4.35.5", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.35.5.tgz", - "integrity": "sha512-wCQCjWmahRkUAO7S703UAvBFkxz4o/rjX4T2AOSWKXSi0sTQPsrXxR0GjtFUT0ompedLkYH4R5HO5Urz0hyeog==", + "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/ws": "*" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/gulp-typescript/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/gulp-typescript/node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, "engines": { - "node": ">=4.0.0" + "node": ">= 0.10" } }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/is64bit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", - "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "node_modules/gulp-typescript/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, "license": "MIT", "dependencies": { - "system-architecture": "^0.1.0" + "is-extglob": "^2.1.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/@vscode/test-cli/node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/gulp-typescript/node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "flush-write-stream": "^1.0.2" }, "engines": { - "node": "*" + "node": ">= 0.10" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/gulp-typescript/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "remove-trailing-separator": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/gulp-typescript/node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" + "license": "MIT", + "dependencies": { + "once": "^1.3.2" }, "engines": { - "node": ">= 4.5.0" + "node": ">= 0.10" } }, - "node_modules/@vscode/test-cli": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.12.tgz", - "integrity": "sha512-iYN0fDg29+a2Xelle/Y56Xvv7Nc8Thzq4VwpzAF/SIE6918rDicqfsQxV6w1ttr2+SOm+10laGuY9FG2ptEKsQ==", + "node_modules/gulp-typescript/node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "license": "MIT", "dependencies": { - "@types/mocha": "^10.0.10", - "c8": "^10.1.3", - "chokidar": "^3.6.0", - "enhanced-resolve": "^5.18.3", - "glob": "^10.3.10", - "minimatch": "^9.0.3", - "mocha": "^11.7.4", - "supports-color": "^10.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "vscode-test": "out/bin.mjs" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" }, "engines": { - "node": ">=18" + "node": ">= 0.10" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/gulp-typescript/node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "value-or-function": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/@vscode/test-cli/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "inherits": "^2.0.4", + "readable-stream": "2 || 3" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "node_modules/gulp-typescript/node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/unzipper": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", - "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", + "node_modules/gulp-typescript/node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, "license": "MIT", "dependencies": { - "bluebird": "~3.7.2", - "duplexer2": "~0.1.4", - "fs-extra": "^11.2.0", - "graceful-fs": "^4.2.2", - "node-int64": "^0.4.0" + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "node_modules/gulp-typescript/node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, "license": "MIT", "dependencies": { - "buffer-crc32": "~0.2.3" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/gulp-typescript/node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">= 0.10" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/gulp-typescript/node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.10" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/gulp-typescript/node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/@textlint/linter-formatter/node_modules/pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", - "license": "MIT" - }, - "node_modules/@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "node_modules/gulp-typescript/node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.6.2" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">= 0.10" } }, - "node_modules/mochawesome-report-generator/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "glogg": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">= 10.13.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.10.0" } }, - "node_modules/boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", - "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", - "license": "BSD-2-Clause" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", - "dependencies": { - "p-defer": "^1.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7702,972 +5958,872 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clipboard-image": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clipboard-image/-/clipboard-image-0.1.0.tgz", - "integrity": "sha512-SWk7FgaXLNFld19peQ/rTe0n97lwR1WbkqxV6JKCAOh7U52AKV/PeMFCyt/8IhBdqyDA8rdyewQMKZqvWT5Akg==", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "license": "MIT", "dependencies": { - "run-jxa": "^3.0.0" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" }, - "bin": { - "clipboard-image": "cli.js" + "engines": { + "node": ">=8" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">= 0.4" } }, - "node_modules/@secretlint/profiler": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz", - "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/@vscode/vsce/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "he": "bin/he" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "license": [ - "MIT", - "Apache2" - ], + "license": "MIT", "dependencies": { - "through": "~2.3" + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "license": "MIT", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "license": "ISC", "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/hpagent": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/nyc/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.19.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "license": "CC0-1.0" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "license": "MIT", - "bin": { - "mime": "cli.js" + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/@vscode/vsce/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=18.18.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/c8/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">= 4" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=0.8.19" } }, - "node_modules/version-range": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", - "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", - "license": "Artistic-2.0", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=8" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/index-to-position": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", + "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "devOptional": true, + "license": "ISC" }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/node-sarif-builder/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/is": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/is/-/is-3.3.2.tgz", + "integrity": "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 0.4" } }, - "node_modules/gulp-typescript/node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "license": "MIT", "dependencies": { - "through2": "^2.0.3" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", - "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "type-detect": "^4.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, - "node_modules/cacheable-request/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-jxa/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/vscode-extension-tester/node_modules/glob/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/mochawesome/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, "bin": { - "json5": "lib/cli.js" + "is-inside-container": "cli.js" }, "engines": { - "node": ">=6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/@textlint/resolver": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.5.1.tgz", - "integrity": "sha512-CVHxMIm8iNGccqM12CQ/ycvh+HjJId4RyC6as5ynCcp2E1Uy1TCe0jBWOpmLsbT4Nx15Ke29BmspyByawuIRyA==", - "license": "MIT" - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/istanbul-lib-processinfo/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/human-signals": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", - "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" + "node": ">=0.10.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "optional": true, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.12.0" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/is-path-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", + "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/ts-sinon": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ts-sinon/-/ts-sinon-2.0.2.tgz", - "integrity": "sha512-Eh6rXPQruACHPn+/e5HsIMaHZa17tGP/scGjUeW5eJ/Levn8hBV6zSP/6QkEDUP7wLkTyY0yeYikjpTzgC9Gew==", + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^14.6.1", - "@types/sinon": "^9.0.5", - "@types/sinon-chai": "^3.2.4", - "sinon": "^9.0.3" - } + "license": "MIT" }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz", - "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==", + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, "license": "MIT", "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" + "is-unc-path": "^1.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=0.10.0" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/tslint/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.0.0.tgz", - "integrity": "sha512-BoEUnckjP9oiudy3KxlGdudtBAdJQ74Wp7dYwVPkUzBn+cVHOsBXh2zD2jLyqgbuJ1KMNriczZCI7lTBA94dFg==", - "license": "(MIT OR CC0-1.0)", + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/replace-homedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", - "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "unc-path-regex": "^0.1.2" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/arr-diff/node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", - "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "license": "MIT" - }, - "node_modules/@secretlint/formatter/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/is-wayland": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-wayland/-/is-wayland-0.1.0.tgz", + "integrity": "sha512-QkbMsWkIfkrzOPxenwye0h56iAXirZYHG9eHVPb22fO9y+wPbaX/CHacOWBa/I++4ohTcByimhM1/nyCsH8KNA==", "dev": true, "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "node": ">=20" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-typescript/node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/@secretlint/config-creator": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz", - "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==", + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.2" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "system-architecture": "^0.1.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-sinon/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, - "node_modules/tcomb-validation": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", - "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", - "dependencies": { - "tcomb": "^3.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "0BSD" + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "ansi-regex": "^2.0.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "license": "MIT", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/liftoff": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", - "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^5.0.0", - "fined": "^2.0.0", - "flagged-respawn": "^2.0.0", - "is-plain-object": "^5.0.0", - "rechoir": "^0.8.0", - "resolve": "^1.20.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "lru-cache": "^10.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/source-map-support/node_modules/source-map": { + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", @@ -8677,637 +6833,710 @@ "node": ">=0.10.0" } }, - "node_modules/@vscode/test-electron": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", - "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "jszip": "^3.10.1", - "ora": "^8.1.0", - "semver": "^7.6.2" + "argparse": "^2.0.1" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jschardet": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", + "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", + "license": "LGPL-2.1+", "engines": { - "node": ">=16" + "node": ">=0.1.90" } }, - "node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { - "acorn": "bin/acorn" + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { - "@keyv/serialize": "^1.1.1" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/targz/node_modules/tar-fs": { - "version": "1.16.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.6.tgz", - "integrity": "sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==", + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" } }, - "node_modules/mochawesome-report-generator": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.3.2.tgz", - "integrity": "sha512-iB6iyOUMyMr8XOUYTNfrqYuZQLZka3K/Gr2GPc6CHPe7t2ZhxxfcoVkpMLOtyDKnWbY1zgu1/7VNRsigrvKnOQ==", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true, + "license": "MIT" + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "dateformat": "^4.5.1", - "escape-html": "^1.0.3", - "fs-extra": "^10.0.0", - "fsu": "^1.1.1", - "lodash.isfunction": "^3.0.9", - "opener": "^1.5.2", - "prop-types": "^15.7.2", - "tcomb": "^3.2.17", - "tcomb-validation": "^3.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "marge": "bin/cli.js" + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" } }, - "node_modules/@vscode/test-cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "json-buffer": "3.0.1" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/last-run": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/resolve-dir": { + "node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.3" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true, "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.8.0" } }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "immediate": "~3.0.5" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/liftoff": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.1.tgz", + "integrity": "sha512-wwLXMbuxSF8gMvubFcFRp56lkFV69twvbU5vDPbaw+Q+/rF8j0HKjGbIdlSi+LuJm9jf7k9PB+nTxnsLMPcv2Q==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/structured-source": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", - "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", - "license": "BSD-2-Clause", - "dependencies": { - "boundary": "^2.0.0" + "node": ">=10.13.0" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "uc.micro": "^2.0.0" } }, - "node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, - "node_modules/mocha/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, - "node_modules/clipboardy/node_modules/get-stream": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", - "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, "license": "MIT", "dependencies": { - "@sec-ant/readable-stream": "^0.4.1", - "is-stream": "^4.0.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sindresorhus/is": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", - "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/buffer-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", - "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/run-sequence/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/sax": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", - "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=11.0.0" - } - }, - "node_modules/clipboardy/node_modules/execa": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", - "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "cross-spawn": "^7.0.6", - "figures": "^6.1.0", - "get-stream": "^9.0.0", - "human-signals": "^8.0.1", - "is-plain-obj": "^4.1.0", - "is-stream": "^4.0.1", - "npm-run-path": "^6.0.0", - "pretty-ms": "^9.2.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^4.0.0", - "yoctocolors": "^2.1.1" - }, - "engines": { - "node": "^18.19.0 || >=20.5.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "es5-ext": "~0.10.2" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/macos-version": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/macos-version/-/macos-version-6.0.0.tgz", + "integrity": "sha512-O2S8voA+pMfCHhBn/TIYDXzJ1qNHpPDU32oFxglKnVdJABiYYITt45oLkV9yhwA3E2FDwn3tQqUFrTsr1p3sBQ==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "semver": "^7.3.5" }, "engines": { - "node": ">= 8.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-jxa/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "semver": "^6.0.0" }, "engines": { "node": ">=8" - } - }, - "node_modules/pretty-ms": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", - "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", - "license": "MIT", - "dependencies": { - "parse-ms": "^4.0.0" - }, - "engines": { - "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/htmlparser2": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", - "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.2.2", - "entities": "^7.0.1" + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/secretlint/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", "dev": true, + "license": "MIT" + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "license": "MIT", "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/@azure/msal-common": { - "version": "15.14.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.1.tgz", - "integrity": "sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" }, - "node_modules/@azure/msal-node": { - "version": "3.8.6", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.6.tgz", - "integrity": "sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w==", - "license": "MIT", + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dev": true, + "license": "ISC", "dependencies": { - "@azure/msal-common": "15.14.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" }, "engines": { - "node": ">=16" + "node": ">=0.12" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 8" } }, - "node_modules/os-locale/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/clipboardy/node_modules/npm-run-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", - "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", - "dependencies": { - "path-key": "^4.0.0", - "unicorn-magic": "^0.3.0" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/es5-ext": { - "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, "engines": { - "node": ">=0.10" + "node": ">= 0.6" } }, - "node_modules/copy-props": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", - "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { - "each-props": "^3.0.0", - "is-plain-object": "^5.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.6" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, "engines": { "node": ">=18" }, @@ -9315,217 +7544,190 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", + "optional": true, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vinyl-sourcemap/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "license": "MIT", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@secretlint/source-creator": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz", - "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^10.2.2", - "istextorbinary": "^9.5.0" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=20.0.0" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", + "optional": true + }, + "node_modules/mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/textextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", - "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", - "license": "Artistic-2.0", - "dependencies": { - "editions": "^6.21.0" - }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "balanced-match": "^1.0.0" } }, - "node_modules/figures": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", - "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", "dependencies": { - "is-unicode-supported": "^2.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=18" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-unc-path": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/mocha/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", + "node_modules/mocha/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/normalize-url": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", - "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", - "license": "MIT", - "engines": { - "node": ">=14.16" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/readdirp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -9535,1089 +7737,1209 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.16" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "node_modules/mochawesome": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.4.tgz", + "integrity": "sha512-fucGSh8643QkSvNRFOaJ3+kfjF0FhA/YtvDncnRAG0A4oCtAzHIFkt/+SgsWil1uwoeT+Nu5fsAnrKkFtnPcZQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.3.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "mocha": ">=7" + } }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "node_modules/mochawesome-report-generator": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.3.2.tgz", + "integrity": "sha512-iB6iyOUMyMr8XOUYTNfrqYuZQLZka3K/Gr2GPc6CHPe7t2ZhxxfcoVkpMLOtyDKnWbY1zgu1/7VNRsigrvKnOQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "yargs": "^17.2.1" }, "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "marge": "bin/cli.js" } }, - "node_modules/vscode-nls-dev/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/mochawesome-report-generator/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/@redhat-developer/page-objects/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" + "node_modules/mochawesome-report-generator/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/mochawesome-report-generator/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=12" } }, - "node_modules/vscode-test/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/mochawesome-report-generator/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/vscode-extension-tester/node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", - "license": "BlueOak-1.0.0", + "node_modules/mochawesome-report-generator/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "node_modules/mochawesome/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "node_modules/mochawesome/node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.3.1" } }, - "node_modules/vscode-languageclient": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", - "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "node_modules/mochawesome/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.5" + "ansi-regex": "^5.0.1" }, "engines": { - "vscode": "^1.82.0" + "node": ">=8" } }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multimatch": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-7.0.0.tgz", + "integrity": "sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "array-differ": "^4.0.0", + "array-union": "^3.0.1", + "minimatch": "^9.0.3" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/test-cli/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "node_modules/multimatch/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/multimatch/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "node_modules/mute-stdout": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", "license": "MIT", + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nise": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/targz/node_modules/pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "optional": true }, - "node_modules/@types/vscode": { - "version": "1.109.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.109.0.tgz", - "integrity": "sha512-0Pf95rnwEIwDbmXGC08r0B4TQhAbsHQ5UyTIgVgoieDe4cOnf92usuR5dEczb6bTKEp7ziZH4TV1TRGPPCExtw==", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, "license": "MIT" }, - "node_modules/tslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, + "license": "MIT" + }, + "node_modules/node-sarif-builder": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", + "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "@types/sarif": "^2.1.7", + "fs-extra": "^11.1.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=20" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "license": "BSD-2-Clause", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 6" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/mocha": { - "version": "11.7.5", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", - "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "serialize-javascript": "^6.0.2", - "yargs-unparser": "^2.0.0", - "js-yaml": "^4.1.0", - "yargs": "^17.7.2", - "log-symbols": "^4.1.0", - "diff": "^7.0.0", - "yargs-parser": "^21.1.1", - "is-path-inside": "^3.0.3", - "ms": "^2.1.3", - "supports-color": "^8.1.1", - "chokidar": "^4.0.1", - "picocolors": "^1.1.1", - "strip-json-comments": "^3.1.1", - "debug": "^4.3.5", - "minimatch": "^9.0.5", - "find-up": "^5.0.0", - "browser-stdout": "^1.3.1", - "escape-string-regexp": "^4.0.0", - "glob": "^10.4.5", - "workerpool": "^9.2.0", - "he": "^1.2.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=0.10.0" } }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/normalize-url": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "once": "^1.4.0" }, "engines": { - "node": ">=12" + "node": ">= 10.13.0" } }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", - "dev": true, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "license": "MIT", "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" }, "engines": { - "node": ">= 0.10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "license": "MIT", - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/undici": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.21.0.tgz", - "integrity": "sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==", - "license": "MIT", - "engines": { - "node": ">=20.18.1" + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, "engines": { - "node": ">=0.12.0" + "node": ">=18" } }, - "node_modules/@vscode/vsce/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/nyc/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/c8": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", - "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "license": "ISC", "dependencies": { - "@bcoe/v8-coverage": "^1.0.1", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^7.0.1", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "monocart-coverage-reports": "^2" - }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=8" } }, - "node_modules/enhanced-resolve": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", - "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-typescript/node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "aggregate-error": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "node_modules/nyc/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8" } }, - "node_modules/jschardet": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-2.1.1.tgz", - "integrity": "sha512-pA5qG9Zwm8CBpGlK/lo2GE9jPxwqRgMV7Lzc/1iaPccw6v4Rhj8Zg2BTyrdmHmxlJojnbLupLeRnaPLsq03x6Q==", - "license": "LGPL-2.1+", + "node_modules/nyc/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.1.90" + "node": ">=8" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/baseline-browser-mapping": { - "version": "2.9.19", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", - "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } + "license": "ISC" }, - "node_modules/vscode-nls-dev": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-4.0.4.tgz", - "integrity": "sha512-0KQUVkeRTmKVH4a96ZeD+1RgQV6k21YiBYykrvbMX62m6srPC6aU9CWuWT6zrMAB6qmy9sUD0/Bk6P/atLVMrw==", + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "clone": "^2.1.2", - "event-stream": "^3.3.4", - "fancy-log": "^1.3.3", - "glob": "^7.2.0", - "iconv-lite": "^0.6.3", - "is": "^3.3.0", - "source-map": "^0.6.1", - "typescript": "^4.5.4", - "vinyl": "^2.2.1", - "xml2js": "^0.5.0", - "yargs": "^17.3.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, - "bin": { - "vscl": "lib/vscl.js" + "engines": { + "node": ">=8" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "boolbase": "^1.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">=6" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/run-jxa/node_modules/type-fest": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.0.0.tgz", - "integrity": "sha512-BoEUnckjP9oiudy3KxlGdudtBAdJQ74Wp7dYwVPkUzBn+cVHOsBXh2zD2jLyqgbuJ1KMNriczZCI7lTBA94dFg==", - "license": "(MIT OR CC0-1.0)", + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/run-jxa/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "license": "MIT", "dependencies": { - "once": "^1.3.2" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/mochawesome/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "isobject": "^3.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/parse-json/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/@vscode/vsce/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@secretlint/core/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", "dev": true, "license": "MIT", "dependencies": { - "for-in": "^1.0.1" + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-typescript/node_modules/to-through/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.4.tgz", - "integrity": "sha512-fucGSh8643QkSvNRFOaJ3+kfjF0FhA/YtvDncnRAG0A4oCtAzHIFkt/+SgsWil1uwoeT+Nu5fsAnrKkFtnPcZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "diff": "^5.0.0", - "json-stringify-safe": "^5.0.1", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", - "mochawesome-report-generator": "^6.3.0", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2" + "node": ">=18" }, - "peerDependencies": { - "mocha": ">=7" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mochawesome/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "readable-stream": "^2.0.1" } }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true, - "license": "MIT" + "node_modules/os-locale": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-8.0.0.tgz", + "integrity": "sha512-0hdyXRn0wSKMTHCo2CkPJdTKzIhg1Wb7DxJtkeD8M8rRXSwP2ZFRu4UiWBnkjPdRbL5X+AnUVXBE2SZOmkm3dg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "node_modules/p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" + "license": "MIT", + "engines": { + "node": ">=14.16" } }, - "node_modules/os-locale/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/c8/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/vinyl-fs/node_modules/vinyl": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", - "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { - "clone": "^2.1.2", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/glob-stream": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.3.tgz", - "integrity": "sha512-fqZVj22LtFJkHODT+M4N1RJQ3TjnnQhfE9GwZI8qXscYarnhpip70poMldRnP8ipQ/w0B621kOhfc53/J9bd/A==", + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "license": "MIT", "dependencies": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.8" } }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", "license": "MIT", "dependencies": { - "@types/node": "*" + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@secretlint/formatter/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "license": "MIT", + "node_modules/parse-json/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, "license": "MIT", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "license": "MIT", + "dependencies": { + "semver": "^5.1.0" } }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" + "entities": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" + "domhandler": "^5.0.3", + "parse5": "^7.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "license": "MIT", "dependencies": { - "crypto-random-string": "^4.0.0" + "parse5": "^7.0.0" }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/run-jxa/node_modules/path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", @@ -10626,126 +8948,165 @@ "node": ">=8" } }, - "node_modules/@vscode/test-cli/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "path-root-regex": "^0.1.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" + } + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fsu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", - "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", - "dev": true, - "license": "MIT" + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "isarray": "0.0.1" } }, - "node_modules/vinyl-contents/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vscode-extension-tester/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "license": [ + "MIT", + "Apache2" + ], + "dependencies": { + "through": "~2.3" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "license": "MIT", "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" + "find-up": "^4.0.0" }, "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">=8" } }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/@vscode/test-cli/node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "p-locate": "^4.1.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, "node_modules/pkg-dir/node_modules/p-limit": { @@ -10764,868 +9125,911 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "node_modules/plugin-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-2.0.1.tgz", + "integrity": "sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==", "dev": true, - "license": "MIT" - }, - "node_modules/c8/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "ansi-wrap": "^0.1.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", "engines": { - "node": ">=10.12.0" + "node": ">=4" } }, - "node_modules/@vscode/vsce-sign-alpine-arm64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", - "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", - "cpu": [ - "arm64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "alpine" - ] + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/vscode-extension-tester/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/powershell-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", + "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", "license": "MIT", "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, "engines": { - "node": ">=14" + "node": ">=10" } }, - "node_modules/clipboardy/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">= 0.8.0" + } + }, + "node_modules/presentable-error": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/presentable-error/-/presentable-error-0.0.1.tgz", + "integrity": "sha512-E6rsNU1QNJgB3sjj7OANinGncFKuK+164sLXw1/CqBjj/EkXSoSdHCtWQGBNlREIGLnL7IEUEGa08YFVUbrhVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, - "node_modules/supports-hyperlinks": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", - "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "fromentries": "^1.2.0" }, "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + "node": ">=8" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } }, - "node_modules/typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", + "optional": true, "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "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.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@vscode/vsce/node_modules/jackspeak": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.1.tgz", - "integrity": "sha512-GPBXyfcZSGujjddPeA+V34bW70ZJT7jzCEbloVasSH4yjiqWqXHX8iZQtZdVbOhc5esSeAIuiSmMutRZQB/olg==", - "license": "BlueOak-1.0.0", + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", "dependencies": { - "@isaacs/cliui": "^9.0.0" + "side-channel": "^1.1.0" }, "engines": { - "node": "20 || >=22" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terminal-link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", - "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "supports-hyperlinks": "^3.2.0" - }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "safe-buffer": "^5.1.0" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "node_modules/rc-config-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", + "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "debug": "^4.3.4", + "js-yaml": "^4.1.0", + "json5": "^2.2.2", + "require-from-string": "^2.0.2" } }, - "node_modules/node-abi": { - "version": "3.87.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", - "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "license": "ISC", "dependencies": { - "semver": "^7.3.5" + "mute-stream": "~0.0.4" }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/@textlint/linter-formatter/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/read-pkg": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz", + "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "@types/normalize-package-data": "^2.4.3", + "normalize-package-data": "^6.0.0", + "parse-json": "^8.0.0", + "type-fest": "^4.6.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=6.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@gulpjs/messages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", - "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", - "dev": true, - "license": "MIT", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "license": "ISC" - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", + "node": ">=16" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/vsce": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.7.1.tgz", - "integrity": "sha512-OTm2XdMt2YkpSn2Nx7z2EJtSuhRHsTPYsSK59hr3v8jRArK+2UEoju4Jumn1CmpgoBLGI6ReHLJ/czYltNUW3g==", + "node_modules/read-pkg/node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "license": "MIT", - "dependencies": { - "parse-semver": "^1.1.1", - "semver": "^7.5.2", - "@secretlint/secretlint-rule-no-dotenv": "^10.1.2", - "jsonc-parser": "^3.2.0", - "@vscode/vsce-sign": "^2.0.0", - "url-join": "^4.0.1", - "cheerio": "^1.0.0-rc.9", - "hosted-git-info": "^4.0.2", - "secretlint": "^10.1.2", - "markdown-it": "^14.1.0", - "read": "^1.0.7", - "leven": "^3.1.0", - "typed-rest-client": "^1.8.4", - "mime": "^1.3.4", - "@secretlint/secretlint-formatter-sarif": "^10.1.2", - "chalk": "^4.1.2", - "yauzl": "^2.3.1", - "yazl": "^2.2.2", - "xml2js": "^0.5.0", - "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", - "minimatch": "^3.0.3", - "@secretlint/node": "^10.1.2", - "cockatiel": "^3.1.2", - "commander": "^12.1.0", - "tmp": "^0.2.3", - "glob": "^11.0.0", - "azure-devops-node-api": "^12.5.0", - "form-data": "^4.0.0", - "@azure/identity": "^4.1.0" - }, - "bin": { - "vsce": "vsce" - }, "engines": { - "node": ">= 20" + "node": ">=18" }, - "optionalDependencies": { - "keytar": "^7.7.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/run-sequence": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", - "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^1.1.3", - "fancy-log": "^1.3.2", - "plugin-error": "^0.1.2" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.10.0" } }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", - "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, "license": "MIT", "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" + "resolve": "^1.20.0" }, "engines": { - "node": ">=20.0.0" + "node": ">= 10.13.0" } }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "es6-error": "^4.0.1" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/run-jxa": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-jxa/-/run-jxa-3.0.0.tgz", - "integrity": "sha512-4f2CrY7H+sXkKXJn/cE6qRA3z+NMVO7zvlZ/nUV0e62yWftpiLAfw5eV9ZdomzWd2TXWwEIiGjAT57+lWIzzvA==", + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.1.1", - "macos-version": "^6.0.0", - "subsume": "^4.0.0", - "type-fest": "^2.0.0" + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">= 0.10" } }, - "node_modules/run-sequence/node_modules/supports-color": { + "node_modules/replace-homedir": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 10.13.0" } }, - "node_modules/gulp-typescript/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.0.tgz", - "integrity": "sha512-M8BLNtxNWRbRmJ8Iu+4j4qZLlE7Y75ldC42cvw9KPOFkFwY/KlSJuj9eeGmoB/k3QAAnuN3M35Z59+lBm1+C+g==", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/@vscode/test-cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" + "bin": { + "resolve": "bin/resolve" }, "engines": { - "node": ">=0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT" - }, - "node_modules/unzipper/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=4" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@textlint/module-interop": { - "version": "15.5.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.5.1.tgz", - "integrity": "sha512-Y1jcFGCKNSmHxwsLO3mshOfLYX4Wavq2+w5BG6x5lGgZv0XrF1xxURRhbnhns4LzCu0fAcx6W+3V8/1bkyTZCw==", - "license": "MIT" + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true, "license": "MIT" }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/responselike": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-4.0.2.tgz", + "integrity": "sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "lowercase-keys": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, "license": "MIT", "dependencies": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", - "dependencies": { - "path-root-regex": "^0.1.0" - }, "engines": { + "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "p-limit": "^3.0.2" + "glob": "^7.1.3" }, - "engines": { - "node": ">=10" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mute-stdout": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", - "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", - "dev": true, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/run-jxa": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-jxa/-/run-jxa-3.0.0.tgz", + "integrity": "sha512-4f2CrY7H+sXkKXJn/cE6qRA3z+NMVO7zvlZ/nUV0e62yWftpiLAfw5eV9ZdomzWd2TXWwEIiGjAT57+lWIzzvA==", + "dev": true, "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "macos-version": "^6.0.0", + "subsume": "^4.0.0", + "type-fest": "^2.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "node_modules/run-jxa/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", - "type-fest": "^0.8.0" + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/utf8-byte-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/@redhat-developer/page-objects/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/run-jxa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@redhat-developer/locators": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/locators/-/locators-1.18.1.tgz", - "integrity": "sha512-fnb5prprb8jTzx9Vl2DiJq55XK7aZVwpDZV/iLY/pYsNWEn42/rLSyMUNDrvlhnFryqmVstmDUIr4eGE3iyDMw==", + "node_modules/run-jxa/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "license": "Apache-2.0", - "peerDependencies": { - "@redhat-developer/page-objects": ">=1.0.0", - "selenium-webdriver": ">=4.6.1" + "engines": { + "node": ">=10.17.0" } }, - "node_modules/powershell-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", - "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "node_modules/run-jxa/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "node_modules/run-jxa/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" } }, - "node_modules/value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "node_modules/run-jxa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">= 10.13.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-buffer/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" + "node_modules/run-jxa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" }, - "node_modules/ts-sinon/node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "node_modules/run-jxa/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=6" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/run-jxa/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "node_modules/run-sequence": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/run-sequence/-/run-sequence-2.2.1.tgz", + "integrity": "sha512-qkzZnQWMZjcKbh3CNly2srtrkaO/2H/SI5f2eliMCapdRD3UhMrwjfOAZJAnZ2H8Ju4aBzFZkBGXUqFs9V0yxw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "license": "MIT/X11", "dependencies": { - "traverse": ">=0.3.0 <0.4" + "chalk": "^1.1.3", + "fancy-log": "^1.3.2", + "plugin-error": "^0.1.2" }, "engines": { - "node": "*" + "node": ">= 0.8.0" } }, - "node_modules/is-extglob": { + "node_modules/run-sequence/node_modules/ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/system-architecture": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", - "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "node_modules/run-sequence/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/arr-flatten": { + "node_modules/run-sequence/node_modules/arr-diff": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/@bazel/runfiles": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.5.0.tgz", - "integrity": "sha512-RzahvqTkfpY2jsDxo8YItPX+/iZ6hbiikw1YhE0bA9EKBR5Og8Pa6FHn9PO9M0zaXRVsr0GFQLKbB/0rzy9SzA==", - "license": "Apache-2.0" - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "node_modules/run-sequence/node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/run-sequence/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/babel-code-frame/node_modules/chalk": { + "node_modules/run-sequence/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", @@ -11642,1127 +10046,1120 @@ "node": ">=0.10.0" } }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/run-sequence/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", - "dependencies": { - "through": "2" - }, "engines": { - "node": "*" + "node": ">=0.8.0" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/run-sequence/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "kind-of": "^1.1.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10.0" } }, - "node_modules/gulp-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/run-sequence/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "node_modules/run-sequence/node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, "license": "MIT", "dependencies": { - "kind-of": "^1.1.0" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/timers-ext": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", - "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "node_modules/run-sequence/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "es5-ext": "^0.10.64", - "next-tick": "^1.1.0" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=0.12" - } - }, - "node_modules/@azu/style-format": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", - "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", - "license": "WTFPL", - "dependencies": { - "@azu/format-text": "^1.0.1" + "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", - "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "node_modules/run-sequence/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=0.8.0" } }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "license": "WTFPL OR ISC", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" } }, - "node_modules/vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dev": true, + "node_modules/secretlint": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz", + "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==", "license": "MIT", "dependencies": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" + "@secretlint/config-creator": "^10.2.2", + "@secretlint/formatter": "^10.2.2", + "@secretlint/node": "^10.2.2", + "@secretlint/profiler": "^10.2.2", + "debug": "^4.4.1", + "globby": "^14.1.0", + "read-pkg": "^9.0.1" + }, + "bin": { + "secretlint": "bin/secretlint.js" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" + "node": ">=20.0.0" } }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "node_modules/selenium-webdriver": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.40.0.tgz", + "integrity": "sha512-dU0QbnVKdPmoNP8OtMCazRdtU2Ux6Wl4FEpG1iwUbDeajJK1dBAywBLrC1D7YFRtogHzN96AbXBgBAJaarcysw==", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/SeleniumHQ" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/selenium" + } + ], + "license": "Apache-2.0", + "peer": true, "dependencies": { - "type": "^2.7.2" + "@bazel/runfiles": "^6.5.0", + "jszip": "^3.10.1", + "tmp": "^0.2.5", + "ws": "^8.18.3" + }, + "engines": { + "node": ">= 20.0.0" } }, - "node_modules/gulp-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-test": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.6.1.tgz", - "integrity": "sha512-086q88T2ca1k95mUzffvbzb7esqQNvJgiwY4h29ukPhFo8u+vXOOmelUoU5EQUHs3Of8+JuQ3oGdbVCqaxuTXA==", - "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", - "dev": true, - "license": "MIT", - "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.9.3" + "node": ">=10" } }, - "node_modules/encoding-sniffer": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", - "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "node_modules/semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "dev": true, "license": "MIT", "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" + "sver": "^1.8.3" }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" + "randombytes": "^2.1.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "license": "MIT" - }, - "node_modules/compare-versions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", - "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", - "license": "MIT" + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "license": "MIT", "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": "20 || >=22" + "node": ">= 0.4" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, "license": "MIT" }, - "node_modules/@azure/msal-browser": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.1.tgz", - "integrity": "sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.14.1" + "kind-of": "^6.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/gulp-typescript/node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", - "dependencies": { - "glob-stream": "^6.1.0", - "vinyl-sourcemap": "^1.1.0", - "to-through": "^2.0.0", - "resolve-options": "^1.1.0", - "pumpify": "^1.3.5", - "remove-bom-buffer": "^3.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "fs-mkdirp-stream": "^1.0.0", - "object.assign": "^4.0.4", - "value-or-function": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "readable-stream": "^2.3.3", - "vinyl": "^2.0.0", - "is-valid-glob": "^1.0.0", - "through2": "^2.0.0", - "graceful-fs": "^4.0.0" - }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", - "dev": true, - "license": "ISC", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" }, "engines": { - "node": ">=0.12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@secretlint/node/node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", - "license": "MIT", + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { - "node": ">=18" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/selenium-webdriver": { - "version": "4.40.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.40.0.tgz", - "integrity": "sha512-dU0QbnVKdPmoNP8OtMCazRdtU2Ux6Wl4FEpG1iwUbDeajJK1dBAywBLrC1D7YFRtogHzN96AbXBgBAJaarcysw==", + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/SeleniumHQ" + "url": "https://github.com/sponsors/feross" }, { - "type": "opencollective", - "url": "https://opencollective.com/selenium" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@bazel/runfiles": "^6.5.0", - "jszip": "^3.10.1", - "tmp": "^0.2.5", - "ws": "^8.18.3" - }, - "engines": { - "node": ">= 20.0.0" - } - }, - "node_modules/@vscode/vsce/node_modules/lru-cache": { - "version": "11.2.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", - "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/@types/fs-extra": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", - "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", - "dev": true, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", + "optional": true, "dependencies": { - "@types/node": "*" + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/@vscode/vsce-sign-darwin-arm64": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", - "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", - "cpu": [ - "arm64" - ], - "license": "SEE LICENSE IN LICENSE.txt", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/memoizee": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", - "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "node_modules/sinon": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", + "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", + "deprecated": "16.1.1", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "d": "^1.0.2", - "es5-ext": "^0.10.64", - "es6-weak-map": "^2.0.3", - "event-emitter": "^0.3.5", - "is-promise": "^2.2.2", - "lru-queue": "^0.1.0", - "next-tick": "^1.1.0", - "timers-ext": "^0.1.7" + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/samsam": "^5.3.1", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" }, - "engines": { - "node": ">=0.12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, "node_modules/sinon/node_modules/diff": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", - "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, - "node_modules/async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" } }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true, - "license": "0BSD" + "license": "MIT" }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 10.13.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/@secretlint/node": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz", - "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==", - "license": "MIT", + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", "dependencies": { - "@secretlint/config-loader": "^10.2.2", - "@secretlint/core": "^10.2.2", - "@secretlint/formatter": "^10.2.2", - "@secretlint/profiler": "^10.2.2", - "@secretlint/source-creator": "^10.2.2", - "@secretlint/types": "^10.2.2", - "debug": "^4.4.1", - "p-map": "^7.0.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=20.0.0" + "node": ">=8.0.0" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/spawn-wrap/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/@secretlint/resolver": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz", - "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==", - "license": "MIT" + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" + "through": "2" }, "engines": { - "node": ">=8.6.0" + "node": "*" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" }, - "node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-sarif-builder/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/stream-combiner": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", + "dev": true, "license": "MIT", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "duplexer": "~0.1.1", + "through": "~2.3.4" } }, - "node_modules/run-jxa/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "streamx": "^2.13.2" } }, - "node_modules/c8/node_modules/test-exclude": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", - "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^9.0.4" - }, - "engines": { - "node": ">=18" - } + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true, + "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "dev": true, "license": "MIT" }, - "node_modules/@redhat-developer/page-objects/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "node_modules/streamfilter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-3.0.0.tgz", + "integrity": "sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "readable-stream": "^3.0.6" }, "engines": { - "node": ">=14.14" + "node": ">=8.12.0" } }, - "node_modules/gulp-typescript/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "node_modules/streamfilter/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.10" + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "license": "BSD-3-Clause", + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "safe-buffer": "~5.1.0" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/vscode-extension-tester/node_modules/locate-path": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", - "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=6.0" + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, "license": "MIT", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { + "node_modules/strip-final-newline": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sinon": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", - "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/structured-source": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz", + "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==", + "license": "BSD-2-Clause", "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.1.0", - "@sinonjs/samsam": "^8.0.3", - "diff": "^8.0.2", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" + "boundary": "^2.0.0" } }, - "node_modules/clipboardy/node_modules/npm-run-path/node_modules/path-key": { + "node_modules/subsume": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "resolved": "https://registry.npmjs.org/subsume/-/subsume-4.0.0.tgz", + "integrity": "sha512-BWnYJElmHbYZ/zKevy+TG+SsyoFCmRPDHJbR1MzLxkPOv1Jp/4hGhVUtP98s+wZBsBsHwCXvPTP0x287/WMjGg==", + "dev": true, "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "unique-string": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/subsume/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=14.18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, - "node_modules/async-settle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", - "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", - "dev": true, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { - "async-done": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" } }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "optionalDependencies": { + "semver": "^6.3.0" } }, - "node_modules/gulp-typescript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", - "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "license": "BSD-3-Clause", "dependencies": { - "ansi-colors": "^3.0.5", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.3" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 8" - }, - "peerDependencies": { - "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" + "node": ">=10.0.0" } }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "license": "MIT", + "optional": true, "dependencies": { - "color-name": "~1.1.4" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", + "optional": true, "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=4.0.0" + "node": ">= 6" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/targz": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz", + "integrity": "sha512-6q4tP9U55mZnRuMTBqnqc3nwYQY3kv+QthCFZuMk+Tn1qYUnMPmL/JZ/mzgXINzFpSqfU+242IFmFU9VPvqaQw==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "tar-fs": "^1.8.1" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "node_modules/targz/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.1" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/targz/node_modules/pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/targz/node_modules/tar-fs": { + "version": "1.16.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.6.tgz", + "integrity": "sha512-JkOgFt3FxM/2v2CNpAVHqMW2QASjc/Hxo7IGfNd3MHaDYSW/sBFiS7YVmmhmr8x6vwN1VFQDQGdT2MWpmIuVKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + } + }, + "node_modules/targz/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "tcomb": "^3.0.0" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "streamx": "^2.12.5" } }, - "node_modules/clipboardy/node_modules/is-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", - "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "node_modules/terminal-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz", + "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==", "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "supports-hyperlinks": "^3.2.0" + }, "engines": { "node": ">=18" }, @@ -12770,46 +11167,60 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-sarif-builder/node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", - "license": "MIT", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" } }, - "node_modules/@secretlint/secretlint-rule-no-dotenv": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz", - "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==", - "license": "MIT", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "license": "Artistic-2.0", "dependencies": { - "@secretlint/types": "^10.2.2" + "editions": "^6.21.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/gulp-typescript/node_modules/fs-mkdirp-stream/node_modules/through2": { + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", @@ -12820,363 +11231,341 @@ "xtend": "~4.0.1" } }, - "node_modules/gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "license": "MIT", "dependencies": { - "glogg": "^2.2.0" - }, - "engines": { - "node": ">= 10.13.0" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, - "node_modules/gulp": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.1.tgz", - "integrity": "sha512-PErok3DZSA5WGMd6XXV3IRNO0mlB+wW3OzhFJLEec1jSERg2j1bxJ6e5Fh6N6fn3FH2T9AP4UYNb/pYlADB9sA==", + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, "license": "MIT", - "dependencies": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.1.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.2" - }, - "bin": { - "gulp": "bin/gulp.js" - }, "engines": { - "node": ">=10.13.0" + "node": ">=0.10.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "dev": true, + "license": "ISC", "dependencies": { - "fill-range": "^7.1.1" + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" + "node": ">=0.12" } }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/secretlint/node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.14" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/to-absolute-glob": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-3.0.0.tgz", + "integrity": "sha512-loO/XEWTRqpfcpI7+Jr2RR2Umaaozx1t6OSVWtMi0oy5F/Fxg3IC+D/TToDnxyAGs7uZBGT/6XmyDUxgsObJXA==", "dev": true, "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8.0" } }, - "node_modules/vscode-extension-tester/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^4.0.0" + "streamx": "^2.12.5" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, - "license": "MIT", + "license": "WTFPL", "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "utf8-byte-length": "^1.0.1" } }, - "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - }, "engines": { - "node": ">=18" + "node": ">=18.12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/c8/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "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", - "license": "ISC", + "node_modules/ts-mock-imports": { + "version": "1.3.19", + "resolved": "https://registry.npmjs.org/ts-mock-imports/-/ts-mock-imports-1.3.19.tgz", + "integrity": "sha512-9vYKRTSWLs03caKmYFry0cXj3K4xo61PsU8PUE9ZtnX6PTglcbqroJXtb60z28wgVpmnmRwlzqDW4LfnwRYHkw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "sinon": ">= 4.1.2", + "typescript": ">=2.6.1" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "glob": "dist/esm/bin.mjs" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, - "node_modules/stdin-discarder": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", - "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "node_modules/ts-sinon": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ts-sinon/-/ts-sinon-2.0.2.tgz", + "integrity": "sha512-Eh6rXPQruACHPn+/e5HsIMaHZa17tGP/scGjUeW5eJ/Levn8hBV6zSP/6QkEDUP7wLkTyY0yeYikjpTzgC9Gew==", "dev": true, "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/node": "^14.6.1", + "@types/sinon": "^9.0.5", + "@types/sinon-chai": "^3.2.4", + "sinon": "^9.0.3" } }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "node_modules/ts-sinon/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "dev": true, "license": "MIT" }, - "node_modules/clipboardy/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/mochawesome/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "has-flag": "^4.0.0" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/mocha/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "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", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, - "node_modules/gulp-typescript/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -13187,808 +11576,930 @@ "node": ">= 0.4" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "license": "MIT", - "optional": true + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.17" } }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "node_modules/typescript-eslint": { + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.55.0.tgz", + "integrity": "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-wrap": "0.1.0" + "@typescript-eslint/eslint-plugin": "8.55.0", + "@typescript-eslint/parser": "8.55.0", + "@typescript-eslint/typescript-estree": "8.55.0", + "@typescript-eslint/utils": "8.55.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", "license": "MIT" }, - "node_modules/c8/node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10.13.0" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", + "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 10.13.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "fastest-levenshtein": "^1.0.7" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "node_modules/undici": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.21.0.tgz", + "integrity": "sha512-Hn2tCQpoDt1wv23a68Ctc8Cr/BHpUSfaPYrkajTXOS9IKpxVRx/X5m1K2YkbK2ipgZgxXSgsUinl3x+2YdSSfg==", "license": "MIT", "engines": { - "node": ">=0.8.19" + "node": ">=20.18.1" } }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "node_modules/unique-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.4.0.tgz", + "integrity": "sha512-V6QarSfeSgDipGA9EZdoIzu03ZDlOFkk+FbEP5cwgrZXN3iIkYR91IjU2EnM6rB835kGQsqHX8qncObTXV+6KA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "3.0.0" } }, - "node_modules/@vscode/vsce/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "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", - "license": "BlueOak-1.0.0", + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "crypto-random-string": "^4.0.0" }, "engines": { - "node": "20 || >=22" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.0.0" } }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/unzipper": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", + "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "dependencies": { + "bluebird": "~3.7.2", + "duplexer2": "~0.1.4", + "fs-extra": "^11.2.0", + "graceful-fs": "^4.2.2", + "node-int64": "^0.4.0" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "readable-stream": "^2.0.1" + "punycode": "^2.1.0" } }, - "node_modules/mochawesome-report-generator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true, "license": "MIT" }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "license": "MIT" }, - "node_modules/is": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.2.tgz", - "integrity": "sha512-a2xr4E3s1PjDS8ORcGgXpWx6V+liNs+O3JRD2mb9aeugD7rtkkZ0zgLdYgw0tWsKhsdiezGYptSiMlVazCBTuQ==", + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } + "license": "(WTFPL OR MIT)" }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=10.12.0" } }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, "license": "MIT" }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/v8flags": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 10.13.0" } }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "license": "MIT", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, - "license": "MIT" - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, - "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", - "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.1" - }, + "node_modules/version-range": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz", + "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==", + "license": "Artistic-2.0", "engines": { - "node": "20 || >=22" + "node": ">=4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://bevry.me/fund" } }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, - "node_modules/clipboardy": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-5.2.1.tgz", - "integrity": "sha512-RWp4E/ivQAzgF4QSWA9sjeW+Bjo+U2SvebkDhNIfO7y65eGdXPUxMTdIKYsn+bxM3ItPHGm3e68Bv3fgQ3mARw==", + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, "license": "MIT", "dependencies": { - "clipboard-image": "^0.1.0", - "execa": "^9.6.1", - "is-wayland": "^0.1.0", - "is-wsl": "^3.1.0", - "is64bit": "^2.0.0", - "powershell-utils": "^0.2.0" + "bl": "^5.0.0", + "vinyl": "^3.0.0" }, "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", + "node_modules/vinyl-contents/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.6.0", - "through2": "^2.0.3" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 6" } }, - "node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/text-decoder": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "node_modules/vinyl-fs": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.2.tgz", + "integrity": "sha512-XRFwBLLTl8lRAOYiBqxY279wY46tVxLaRhSwo3GzKEuLz1giffsOquWWboD/haGf5lx+JyTigCFfe7DWHoARIA==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "b4a": "^1.6.4" + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.3", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.1", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "node_modules/vinyl-fs/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "node": ">=10.13.0" } }, - "node_modules/vscode-nls-dev/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", - "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", + "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } + "license": "MIT" }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/vinyl-sourcemap/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "license": "MIT" - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.1.tgz", + "integrity": "sha512-0QwqXteBNXgnLCdWdvPQBX6FXRHtIH3VhJPTd5Lwn28tJXc34YqSCWUmkOvtJHBmB3gGoPtrOKk3Ts8/kEZ9aA==", + "dev": true, "license": "MIT", "dependencies": { - "entities": "^6.0.0" + "clone": "^2.1.2", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vscode-extension-tester": { + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/vscode-extension-tester/-/vscode-extension-tester-8.21.0.tgz", + "integrity": "sha512-TeEQR4pqq4qCe30IBbJFknw5VgPHyQLisrjp+9d/ewvgYAFu87Tv0TxczDRDwSYUCNrUhqH18OkbNTIdBmaeOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@redhat-developer/locators": "^1.18.1", + "@redhat-developer/page-objects": "^1.18.1", + "@types/selenium-webdriver": "^4.35.4", + "@vscode/vsce": "^3.7.1", + "c8": "^10.1.3", + "commander": "^14.0.2", + "compare-versions": "^6.1.1", + "find-up": "8.0.0", + "fs-extra": "^11.3.3", + "glob": "^13.0.0", + "got": "^14.6.6", + "hpagent": "^1.2.0", + "js-yaml": "^4.1.1", + "sanitize-filename": "^1.6.3", + "selenium-webdriver": "^4.39.0", + "targz": "^1.0.1", + "unzipper": "^0.12.3" + }, + "bin": { + "extest": "out/cli.js" + }, + "peerDependencies": { + "mocha": ">=5.2.0", + "typescript": ">=4.6.2" } }, "node_modules/vscode-extension-tester/node_modules/commander": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "node_modules/vscode-extension-tester/node_modules/find-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", + "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", "dev": true, "license": "MIT", "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "locate-path": "^8.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vscode-extension-tester/node_modules/locate-path": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", + "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "node_modules/vscode-extension-tester/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, "license": "MIT", "dependencies": { - "is-wsl": "^3.1.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-type": { + "node_modules/vscode-extension-tester/node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "node_modules/vscode-extension-tester/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@secretlint/secretlint-formatter-sarif": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz", - "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==", + "node_modules/vscode-jsonrpc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", "license": "MIT", - "dependencies": { - "node-sarif-builder": "^3.2.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "license": "BSD-2-Clause", + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "vscode": "^1.82.0" } }, - "node_modules/binaryextensions": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", - "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", - "license": "Artistic-2.0", + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { - "editions": "^6.21.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" + "node": ">=10" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", "license": "MIT" }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/vscode-nls": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==", + "license": "MIT" + }, + "node_modules/vscode-nls-dev": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vscode-nls-dev/-/vscode-nls-dev-4.0.4.tgz", + "integrity": "sha512-0KQUVkeRTmKVH4a96ZeD+1RgQV6k21YiBYykrvbMX62m6srPC6aU9CWuWT6zrMAB6qmy9sUD0/Bk6P/atLVMrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "clone": "^2.1.2", + "event-stream": "^3.3.4", + "fancy-log": "^1.3.3", + "glob": "^7.2.0", + "iconv-lite": "^0.6.3", + "is": "^3.3.0", + "source-map": "^0.6.1", + "typescript": "^4.5.4", + "vinyl": "^2.2.1", + "xml2js": "^0.5.0", + "yargs": "^17.3.0" + }, + "bin": { + "vscl": "lib/vscl.js" + } + }, + "node_modules/vscode-nls-dev/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/vscode-nls-dev/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vscode-nls-dev/node_modules/event-stream": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", + "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", + "dev": true, "license": "MIT", + "dependencies": { + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" + } + }, + "node_modules/vscode-nls-dev/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "node_modules/vscode-nls-dev/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", + "node_modules/vscode-nls-dev/node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.2.0" } }, - "node_modules/gulp-cli": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.1.0.tgz", - "integrity": "sha512-zZzwlmEsTfXcxRKiCHsdyjZZnFvXWM4v1NqBJSYbuApkvVKivjcmOS2qruAJ+PkEHLFavcDKH40DPc1+t12a9Q==", + "node_modules/vscode-nls-dev/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.1", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "bin": { - "gulp": "bin/gulp.js" + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/stream-composer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", - "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", - "dev": true, - "license": "MIT", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { - "streamx": "^2.13.2" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } + "license": "ISC" }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13997,415 +12508,314 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vscode-test/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">=0.10.0" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "Apache-2.0" }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "resolve": "^1.20.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/mochawesome-report-generator/node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8" } }, - "node_modules/mochawesome/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "license": "MIT", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "is-wsl": "^3.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/istanbul-lib-processinfo/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4.0" } }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.4" } }, - "node_modules/spawn-wrap/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=10" } }, - "node_modules/resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "value-or-function": "^4.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" } }, - "node_modules/run-jxa/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10.17.0" + "node": ">=12" } }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/gulp-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/yoctocolors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", - "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha512-yA5YmWkzQoMF/fOA6TjkJlJniZxpo7cneTvdQEJj7blUd7YsR23gcOC5caM2MP186hTrhpSf1VSuygnikerwmQ==", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "bin": { - "tslint": "bin/tslint" - }, + "license": "ISC", "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" + "node": ">=10" } }, - "node_modules/vscode-test/node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dev": true, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "license": "MIT", "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "license": "MIT", - "optional": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "buffer-crc32": "~0.2.3" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT", - "optional": true - }, - "node_modules/lru-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", - "dependencies": { - "es5-ext": "~0.10.2" - } - }, - "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "license": "WTFPL", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vscode/test-cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, "engines": { "node": ">=18" }, @@ -14414,4 +12824,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 3a7d6251..d07d2d8a 100644 --- a/package.json +++ b/package.json @@ -618,68 +618,59 @@ "scripts": { "compile": "tsc -p ./", "watch": "tsc -p -watch ./", - "preinstall": "npx npm-force-resolutions", "test": "npm run compile && node ./out/test/runTest.js", "cc": "npm run compile && node ./out/test/runTest.js --codecoverage", - "e2etest": "npm run compile && extest setup-and-run -c 1.109.0 ./out/test/e2e/*.js -m ./out/test/e2e/config.js -u" + "e2etest": "npm run compile && extest setup-and-run -c 1.109.0 ./out/test/e2e/*.js -m ./out/test/e2e/config.js -u", + "preinstall": "npx npm-force-resolutions" }, "devDependencies": { - "source-map": "0.7.4", - "source-map-resolve": "0.6.0", - "@istanbuljs/nyc-config-typescript": "^1.0.1", - "@types/fs-extra": "^8.1.0", - "@types/mocha": "^5.2.7", + "@eslint/js": "^9.39.2", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@types/chai": "^5.2.3", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.10", + "@types/node": "^25.2.2", + "@types/vscode": "^1.109.0", "@vscode/test-electron": "^2.5.2", - "chai": "^4.2.0", - "del": "^4.1.1", + "chai": "^6.2.2", + "del": "^8.0.1", + "eslint": "^9.39.2", "event-stream": "^4.0.1", + "glob": "^13.0.2", "gulp": "^5.0.1", "gulp-cli": "^3.1.0", - "gulp-filter": "^5.1.0", + "gulp-filter": "^9.0.1", "gulp-sourcemaps": "^2.6.5", - "gulp-typescript": "^5.0.1", - "mochawesome": "^7.0.1", - "run-sequence": "^2.2.1", - "ts-mock-imports": "^1.3.3", - "ts-node": "^9.1.1", - "ts-sinon": "^2.0.1", - "tslint": "5.11.0", - "typescript": "^5.5.4", - "vscode-nls-dev": "^4.0.4", - "vscode-test": "^1.4.1", - "@types/chai": "^4.2.15", - "@types/node": "^25.2.1", - "@vscode/test-cli": "^0.0.12", + "gulp-typescript": "^6.0.0-alpha.1", "mocha": "^11.3.0", - "nyc": "^15.1.0", - "@types/vscode": "^1.109.0" - }, - "overrides": { - "@redhat-developer/page-objects": { - "type-fest": "4.41.0" - }, - "got": { - "type-fest": "4.26.1" - }, - "run-jxa": { - "type-fest": "2.0.0" - }, - "hasha": { - "type-fest": "0.8.0" - }, - "selenium-webdriver": { - "ws": "^8.18.3" - } + "mochawesome": "^7.1.4", + "nyc": "^17.1.0", + "run-sequence": "^2.2.1", + "source-map": "^0.7.6", + "source-map-resolve": "^0.6.0", + "supports-color": "^8.1.1", + "ts-mock-imports": "^1.3.19", + "ts-node": "^10.9.2", + "ts-sinon": "^2.0.2", + "typescript": "^5.9.3", + "typescript-eslint": "^8.55.0", + "vscode-extension-tester": "^8.21.0", + "vscode-nls-dev": "^4.0.4" }, "dependencies": { - "execa": "1.0.0", - "jschardet": "2.1.1", - "os-locale": "5.0.0", - "vscode-languageclient": "9.0.1", - "vscode-nls": "3.2.5", - "vscode-ripgrep": "1.5.8", + "@vscode/ripgrep": "^1.17.0", "@vscode/vsce": "^3.7.1", - "fs-extra": "^8.1.0", - "vscode-extension-tester": "^8.0.0" + "execa": "^9.6.1", + "fs-extra": "^11.3.3", + "jschardet": "^3.1.4", + "os-locale": "^8.0.0", + "vscode-languageclient": "^9.0.1", + "vscode-nls": "^5.2.0" + }, + "overrides": { + "glob": "^13.0.2", + "vscode-languageserver-protocol": { + "vscode-jsonrpc": "8.2.1" + } } } diff --git a/tsconfig.json b/tsconfig.json index c4c31c9d..e7e64ec7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,15 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es2015", - "outDir": "out", - "rootDir": "extension/src", - "lib": [ "es2015", "DOM" ], - "sourceMap": true, - "alwaysStrict": true - }, - "include": [ - "extension/src" - ], - "exclude": [ - "node_modules", - ".vscode-test" - ] -} \ No newline at end of file + "compilerOptions": { + "module": "commonjs", + "target": "es2015", + "outDir": "out", + "rootDir": "extension/src", + "lib": ["es2015", "DOM"], + "sourceMap": true, + "alwaysStrict": true, + "skipDefaultLibCheck": true, + "skipLibCheck": true + }, + "include": ["extension/src"], + "exclude": ["node_modules", ".vscode-test"] +} From bd5b68b46d16b0a16018fcb1172dade9eb45334b Mon Sep 17 00:00:00 2001 From: ToneseekerMusical <105748910+ToneseekerMusical@users.noreply.github.com> Date: Fri, 13 Feb 2026 21:37:57 -0500 Subject: [PATCH 3/3] Fixed all ESLint issues Got ESLint properly working and updated codebase to ESLint recommended syntax. Optimized previous overrides in package.json --- eslint.config.mjs | 42 +- extension/src/astObjects/dclTile.ts | 532 ++++---- extension/src/astObjects/lispAtom.ts | 260 ++-- extension/src/astObjects/lispContainer.ts | 498 +++---- extension/src/astObjects/sexpression.ts | 138 +- extension/src/commands.ts | 81 +- .../src/completion/autocompletionProvider.ts | 55 +- extension/src/completion/completionItemDcl.ts | 599 ++++----- .../src/completion/completionProviderDcl.ts | 454 +++---- extension/src/context.ts | 30 +- extension/src/debug.ts | 435 +++--- extension/src/diagnosticsCtrl.ts | 79 +- extension/src/documents.ts | 31 +- extension/src/extension.ts | 4 +- extension/src/format/autoIndent.ts | 202 +-- extension/src/format/formatProviders.ts | 74 +- extension/src/format/formatter.ts | 16 +- extension/src/format/listreader.ts | 88 +- extension/src/help/documentationLibrary.ts | 220 ++-- extension/src/help/documentationObjects.ts | 2 +- extension/src/help/documentationPresenter.ts | 486 +++---- extension/src/help/userDocumentation.ts | 6 +- extension/src/parsing/lispParser.ts | 328 ++--- extension/src/platform.ts | 12 +- extension/src/process/acadPicker.ts | 83 +- extension/src/process/processCache.ts | 2 +- extension/src/process/processTree.ts | 14 +- extension/src/project/addFile2Project.ts | 28 +- extension/src/project/checkUnsavedChanges.ts | 10 +- extension/src/project/createProject.ts | 12 +- extension/src/project/excludeFile.ts | 6 +- .../project/findReplace/applyReplacement.ts | 27 +- .../src/project/findReplace/clearResults.ts | 4 +- extension/src/project/findReplace/encoding.ts | 6 +- .../src/project/findReplace/findInProject.ts | 530 ++++---- .../project/findReplace/openSearchResult.ts | 24 +- .../src/project/findReplace/optionButton.ts | 10 +- extension/src/project/findReplace/options.ts | 8 +- .../project/findReplace/replaceInProject.ts | 14 +- extension/src/project/findReplace/ripGrep.ts | 105 +- .../src/project/findReplace/searchTree.ts | 442 +++---- extension/src/project/openLspFile.ts | 42 +- extension/src/project/openProject.ts | 68 +- extension/src/project/projectCommands.ts | 530 ++++---- extension/src/project/projectDefinition.ts | 206 +-- extension/src/project/projectTree.ts | 385 +++--- extension/src/project/projectutil.ts | 4 +- extension/src/project/readOnlyDocument.ts | 486 +++---- extension/src/project/refreshProject.ts | 4 +- extension/src/project/saveProject.ts | 34 +- extension/src/providers/gotoProvider.ts | 248 ++-- extension/src/providers/hoverProvider.ts | 320 +++-- extension/src/providers/providerShared.ts | 19 +- extension/src/providers/renameProvider.ts | 58 +- extension/src/resources.ts | 28 +- extension/src/services/documentServices.ts | 180 ++- .../src/services/flatContainerServices.ts | 324 ++--- .../src/services/lispContainerServices.ts | 51 +- extension/src/services/symbolServices.ts | 110 +- extension/src/statusbar.ts | 10 +- extension/src/symbols.ts | 132 +- extension/src/test/e2e/debugConfig.ts | 143 +- extension/src/test/runTest.ts | 2 +- extension/src/test/suite/1st.test.ts | 15 +- .../src/test/suite/AutoCompletion.test.ts | 549 ++++---- extension/src/test/suite/AutoIndent.test.ts | 598 ++++----- .../src/test/suite/DocumentContainer.test.ts | 32 +- extension/src/test/suite/Formatter.test.ts | 752 +++++------ extension/src/test/suite/LispAtom.test.ts | 42 +- .../src/test/suite/LispContainer.test.ts | 78 +- .../src/test/suite/ReadonlyDocument.test.ts | 29 +- .../src/test/suite/astObjects.DclAtom.test.ts | 18 +- .../suite/astObjects.DclAttribute.test.ts | 44 +- .../src/test/suite/astObjects.DclTile.test.ts | 63 +- extension/src/test/suite/codeCoverage.ts | 7 +- .../test/suite/help.userDocumentation.test.ts | 48 +- extension/src/test/suite/helper.ts | 23 +- extension/src/test/suite/index.ts | 14 +- .../src/test/suite/parsing.comments.test.ts | 22 +- .../src/test/suite/parsing.dclParser.test.ts | 32 +- .../src/test/suite/parsing.shared.test.ts | 12 +- extension/src/test/suite/project.test.ts | 171 +-- .../suite/providers.completionDcl.test.ts | 1166 ++++++++--------- .../test/suite/providers.gotoProvider.test.ts | 49 +- .../suite/providers.hoverProvider.test.ts | 498 +++---- .../suite/providers.referenceProvider.test.ts | 50 +- .../suite/providers.renameProvider.test.ts | 39 +- .../suite/services.documentServices.test.ts | 66 +- .../services.flatContainerServices.test.ts | 54 +- .../services.lispContainerServices.test.ts | 20 +- .../suite/services.symbolServices.test.ts | 48 +- extension/src/test/suite/symbols.test.ts | 97 +- extension/src/uriHandler.ts | 92 +- extension/src/utils.ts | 175 ++- gulpfile.js | 81 +- package-lock.json | 14 + package.json | 1 + tsconfig.json | 3 +- tslint.json | 15 - 99 files changed, 7180 insertions(+), 7218 deletions(-) delete mode 100644 tslint.json diff --git a/eslint.config.mjs b/eslint.config.mjs index 0e279b2d..8e7f26b8 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,7 +4,47 @@ import eslint from '@eslint/js'; import { defineConfig } from 'eslint/config'; import tseslint from 'typescript-eslint'; + +export default defineConfig( + { + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + } + }, + eslint.configs.recommended, + tseslint.configs.recommended, + { + ignores: [ + '.vscode/**', + '.vscode-test/**', + 'images/**', + + 'out/**', + 'utils/**', + ] + }, + { + rules: { + 'no-unused-expressions': 'off', // disable original rule + '@typescript-eslint/no-unused-expressions': 'error', // disable original rule + }, + files: ['**/*.test.ts', '**/*.test.js', 'extension/src/test/e2e/debugConfig.ts'] + } +); + +/* export default defineConfig( eslint.configs.recommended, tseslint.configs.recommended, -); \ No newline at end of file + { + plugins: { 'chai-friendly': pluginChaiFriendly }, + files: ['extension/src/test\**\/*.@(ts|js|mts|cts)'], + rules: { + 'no-unused-expressions': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + 'chai-friendly/no-unused-expressions': 'error', + }, + }, +); +*/ \ No newline at end of file diff --git a/extension/src/astObjects/dclTile.ts b/extension/src/astObjects/dclTile.ts index 2d3de12c..2a4b4390 100644 --- a/extension/src/astObjects/dclTile.ts +++ b/extension/src/astObjects/dclTile.ts @@ -5,276 +5,276 @@ import { IDclContainer, IDclFragment } from './dclInterfaces'; export class DclTile implements IDclContainer { - + get line(): number { - return this.firstAtom.line; - } - - get column(): number { - return this.firstAtom.column; - } - - get asTile(): DclTile { - return this; - } - - get asContainer(): IDclContainer { - return this; - } - - get isComment(): boolean { - return false; - } - - get isBlockComment(): boolean { - return false; - } - - get isString(): boolean { - return false; - } - - get isNumber(): boolean { - return false; - } - - get range(): Range { - const begin = this.firstAtom.range.start; - const close = this.lastAtom.range.end; - return new Range(begin, close); - } - - get rank(): number { - return this.line * 1000 + this.column; - } - - equal(atom: IDclFragment): boolean { - return JSON.stringify(this) === JSON.stringify(atom); - } - - contains(position: Position): boolean { - return this.range.contains(position); - } - - getAtomFromPosition(position: Position): IDclFragment { - if (this.contains(position)) { - for (let i = 0; i < this.length; i++) { - if (!this.atoms[i].contains(position)) { - continue; - } - return this.atoms[i].getAtomFromPosition(position); - } - } - return null; - } - - public atoms: Array; - - get length(): number { - return this.atoms?.length ?? 0; - } - - get firstAtom(): IDclFragment { - return this.atoms[0].asContainer?.firstAtom ?? this.atoms[0]; - } - - get lastAtom(): IDclFragment { - return this.atoms[this.length - 1].asContainer?.lastAtom ?? this.atoms[this.length - 1]; - } - - get firstNonComment(): IDclFragment { - for (let i = 0; i < this.length; i++) { - const item = this.atoms[i]; - if (item.isComment){ - continue; - } - if (item.asContainer) { - return null; - } - return this.atoms[i]; - } - return null; - } - - get isWellFormed(): boolean { - if (this.length === 2) { - return /^[a-z\_]+$/i.test(this.firstAtom.symbol) && this.lastAtom.symbol === ';'; - } - - const name = this.tileTypeAtom?.symbol.toLowerCase() ?? ''; - - return this.firstAtom?.symbol === ':' - && this.closeBracketAtom?.symbol === '}' - && /^[a-z\_]+$/i.test(name) - && this.openBracketAtom?.symbol === '{'; // doing this one last because it loops over all atoms - } - - getParentFrom(position: Position|IDclFragment, tilesOnly = false): IDclContainer { - const pos = position instanceof Position ? position : position.range.start; - if (this.contains(pos)) { - let failed = 0; - for (let i = 0; i < this.length; i++) { - const dclObj = this.atoms[i]; - if (!dclObj.contains(pos)) { - failed++; - continue; - } - if (dclObj instanceof DclAttribute) { - return tilesOnly ? this : dclObj; - } else if (dclObj instanceof DclAtom) { - return this; - } else { - return dclObj.asTile.getParentFrom(pos, tilesOnly) ?? this; - } - } - if (failed === this.length) { - return this; // position is not at the location of an atom, but we only care about the parent anyway - } - } - return null; - } - - getImpliedParent(position: Position): IDclContainer { - // Note: attributes handle themselves, your challange is determining if an attribute is malformed and needs a force return. - let prev = 0; - const positionRank = position.line * 1000 + position.character; - for (let i = 0; i < this.atoms.length; i++) { - const atom = this.atoms[i]; - if (prev > 0 && positionRank > prev && positionRank < atom.rank) { - return this.atoms[i-1].asContainer ?? this; - } - - const contains = atom.range.contains(position); - if (atom instanceof DclAtom) { - if (contains) { - return this; - } - prev = atom.rank; - continue; - } - - if (contains) { - // if the container is an attribute it will return itself, if its a tile it will keep digging for the best scenario - return atom.asContainer.getImpliedParent(position) ?? this; - } - - prev = atom.rank; - } - - return null; - } - - flatten(into?: Array): Array { - if (!into) { - into = []; - } - this.atoms.forEach(item => { - if (item.asContainer) { - item.asContainer.flatten(into); - } else if (item instanceof DclAtom) { - into.push(item); - } - }); - return into; - } - - - // Everything above this point is sequenced by IDclFragment & then IDclContainer contract - // Everything below this point is unique to DclTile and not an interface requirement - - - public linefeed: string; - - constructor(lineEnding: string, atoms: Array) { + return this.firstAtom.line; + } + + get column(): number { + return this.firstAtom.column; + } + + get asTile(): DclTile { + return this; + } + + get asContainer(): IDclContainer { + return this; + } + + get isComment(): boolean { + return false; + } + + get isBlockComment(): boolean { + return false; + } + + get isString(): boolean { + return false; + } + + get isNumber(): boolean { + return false; + } + + get range(): Range { + const begin = this.firstAtom.range.start; + const close = this.lastAtom.range.end; + return new Range(begin, close); + } + + get rank(): number { + return this.line * 1000 + this.column; + } + + equal(atom: IDclFragment): boolean { + return JSON.stringify(this) === JSON.stringify(atom); + } + + contains(position: Position): boolean { + return this.range.contains(position); + } + + getAtomFromPosition(position: Position): IDclFragment { + if (this.contains(position)) { + for (let i = 0; i < this.length; i++) { + if (!this.atoms[i].contains(position)) { + continue; + } + return this.atoms[i].getAtomFromPosition(position); + } + } + return null; + } + + public atoms: Array; + + get length(): number { + return this.atoms?.length ?? 0; + } + + get firstAtom(): IDclFragment { + return this.atoms[0].asContainer?.firstAtom ?? this.atoms[0]; + } + + get lastAtom(): IDclFragment { + return this.atoms[this.length - 1].asContainer?.lastAtom ?? this.atoms[this.length - 1]; + } + + get firstNonComment(): IDclFragment { + for (let i = 0; i < this.length; i++) { + const item = this.atoms[i]; + if (item.isComment) { + continue; + } + if (item.asContainer) { + return null; + } + return this.atoms[i]; + } + return null; + } + + get isWellFormed(): boolean { + if (this.length === 2) { + return /^[a-z_]+$/i.test(this.firstAtom.symbol) && this.lastAtom.symbol === ';'; + } + + const name = this.tileTypeAtom?.symbol.toLowerCase() ?? ''; + + return this.firstAtom?.symbol === ':' + && this.closeBracketAtom?.symbol === '}' + && /^[a-z_]+$/i.test(name) + && this.openBracketAtom?.symbol === '{'; // doing this one last because it loops over all atoms + } + + getParentFrom(position: Position | IDclFragment, tilesOnly = false): IDclContainer { + const pos = position instanceof Position ? position : position.range.start; + if (this.contains(pos)) { + let failed = 0; + for (let i = 0; i < this.length; i++) { + const dclObj = this.atoms[i]; + if (!dclObj.contains(pos)) { + failed++; + continue; + } + if (dclObj instanceof DclAttribute) { + return tilesOnly ? this : dclObj; + } else if (dclObj instanceof DclAtom) { + return this; + } else { + return dclObj.asTile.getParentFrom(pos, tilesOnly) ?? this; + } + } + if (failed === this.length) { + return this; // position is not at the location of an atom, but we only care about the parent anyway + } + } + return null; + } + + getImpliedParent(position: Position): IDclContainer { + // Note: attributes handle themselves, your challange is determining if an attribute is malformed and needs a force return. + let prev = 0; + const positionRank = position.line * 1000 + position.character; + for (let i = 0; i < this.atoms.length; i++) { + const atom = this.atoms[i]; + if (prev > 0 && positionRank > prev && positionRank < atom.rank) { + return this.atoms[i - 1].asContainer ?? this; + } + + const contains = atom.range.contains(position); + if (atom instanceof DclAtom) { + if (contains) { + return this; + } + prev = atom.rank; + continue; + } + + if (contains) { + // if the container is an attribute it will return itself, if its a tile it will keep digging for the best scenario + return atom.asContainer.getImpliedParent(position) ?? this; + } + + prev = atom.rank; + } + + return null; + } + + flatten(into?: Array): Array { + if (!into) { + into = []; + } + this.atoms.forEach(item => { + if (item.asContainer) { + item.asContainer.flatten(into); + } else if (item instanceof DclAtom) { + into.push(item); + } + }); + return into; + } + + + // Everything above this point is sequenced by IDclFragment & then IDclContainer contract + // Everything below this point is unique to DclTile and not an interface requirement + + + public linefeed: string; + + constructor(lineEnding: string, atoms: Array) { this.linefeed = lineEnding; - this.atoms = [...atoms]; - } - - get openBracketAtom(): IDclFragment { - for (let i = 0; i < this.length; i++) { - if (this.atoms[i].symbol === '{') { - return this.atoms[i]; - } - } - return null; - } - - get tileTypeAtom(): IDclFragment { - let prevNonComment: IDclFragment; - for (let i = 0; i < this.length; i++) { - const atom = this.atoms[i]; - if (atom.isComment) { - continue; - } - if (atom.symbol === '{') { - return prevNonComment?.symbol !== ':' ? prevNonComment : null; - } - prevNonComment = atom; - } - return null; - } - - get dialogNameAtom(): IDclFragment { - const typeValue = this.tileTypeAtom?.symbol.toUpperCase() ?? ''; - const firstValue = this.firstNonComment?.symbol ?? ''; - if (typeValue !== 'DIALOG' || !/\w+.*/.test(firstValue)) { - return null; - } - return this.firstNonComment; - } - - get closeBracketAtom(): IDclFragment { - return this.atoms[this.length - 1].symbol === '}' ? this.atoms[this.length - 1] : null; - } - - // This is only used for verification of the DCL parser, but could have future formatting usefulness. - // Note1: test files cannot contain lines with only random whitespace or readable character lines that - // include trailing whitespace because a TileContainer has no context to reproduce that. - // Note2: tabs in test files are only supported for comments and strings, all other tabs are replaced with spaces - asText(context?: IContainerStringCompilerContext): string { - let isRoot = false; - if (context === undefined) { - context = {result: '', line: 0, column: 0}; - isRoot = true; - } - this.atoms.forEach(item => { - while (context.line < item.line) { - context.result += this.linefeed; - context.line++; - context.column = 0; - } - while (context.column < item.column) { - context.result += ' '; - context.column++; - } - if (item instanceof DclTile) { - item.asText(context); - } else if (item instanceof DclAttribute) { - item.atoms.forEach(x => { - while (context.column < x.column) { - context.result += ' '; - context.column++; - } - context.result += x.symbol; - context.column += x.symbol.length; - }); - } else if (item.isBlockComment) { - const lines = item.symbol.split(this.linefeed); - context.result += item.symbol; - context.column = lines[lines.length - 1].length; - context.line += lines.length - 1; - } else { - context.result += item.symbol; - context.column += item.symbol.length; - } - }); - return isRoot ? context.result : ''; - } + this.atoms = [...atoms]; + } + + get openBracketAtom(): IDclFragment { + for (let i = 0; i < this.length; i++) { + if (this.atoms[i].symbol === '{') { + return this.atoms[i]; + } + } + return null; + } + + get tileTypeAtom(): IDclFragment { + let prevNonComment: IDclFragment; + for (let i = 0; i < this.length; i++) { + const atom = this.atoms[i]; + if (atom.isComment) { + continue; + } + if (atom.symbol === '{') { + return prevNonComment?.symbol !== ':' ? prevNonComment : null; + } + prevNonComment = atom; + } + return null; + } + + get dialogNameAtom(): IDclFragment { + const typeValue = this.tileTypeAtom?.symbol.toUpperCase() ?? ''; + const firstValue = this.firstNonComment?.symbol ?? ''; + if (typeValue !== 'DIALOG' || !/\w+.*/.test(firstValue)) { + return null; + } + return this.firstNonComment; + } + + get closeBracketAtom(): IDclFragment { + return this.atoms[this.length - 1].symbol === '}' ? this.atoms[this.length - 1] : null; + } + + // This is only used for verification of the DCL parser, but could have future formatting usefulness. + // Note1: test files cannot contain lines with only random whitespace or readable character lines that + // include trailing whitespace because a TileContainer has no context to reproduce that. + // Note2: tabs in test files are only supported for comments and strings, all other tabs are replaced with spaces + asText(context?: IContainerStringCompilerContext): string { + let isRoot = false; + if (context === undefined) { + context = { result: '', line: 0, column: 0 }; + isRoot = true; + } + this.atoms.forEach(item => { + while (context.line < item.line) { + context.result += this.linefeed; + context.line++; + context.column = 0; + } + while (context.column < item.column) { + context.result += ' '; + context.column++; + } + if (item instanceof DclTile) { + item.asText(context); + } else if (item instanceof DclAttribute) { + item.atoms.forEach(x => { + while (context.column < x.column) { + context.result += ' '; + context.column++; + } + context.result += x.symbol; + context.column += x.symbol.length; + }); + } else if (item.isBlockComment) { + const lines = item.symbol.split(this.linefeed); + context.result += item.symbol; + context.column = lines[lines.length - 1].length; + context.line += lines.length - 1; + } else { + context.result += item.symbol; + context.column += item.symbol.length; + } + }); + return isRoot ? context.result : ''; + } } interface IContainerStringCompilerContext { - result: string; - line: number; - column: number; + result: string; + line: number; + column: number; } \ No newline at end of file diff --git a/extension/src/astObjects/lispAtom.ts b/extension/src/astObjects/lispAtom.ts index f1f42829..687d1fea 100644 --- a/extension/src/astObjects/lispAtom.ts +++ b/extension/src/astObjects/lispAtom.ts @@ -4,140 +4,140 @@ import { Sexpression } from './sexpression'; // General purpose test for basic known primitive values; Including: T, NIL, Number, (single or multi-line) Strings & Comments -export const primitiveRegex = /^([\(\)\'\.]|"[\s\S]*"|;[\s\S]*|'?[tT]|'?[nN][iI][lL]|'?-?\d+[eE][+-]?\d+|-?\d+|-?\d+\.\d+)$/; +export const primitiveRegex = /^([()'.]|"[\s\S]*"|;[\s\S]*|'?[tT]|'?[nN][iI][lL]|'?-?\d+[eE][+-]?\d+|-?\d+|-?\d+\.\d+)$/; const primitiveGlyphs = ['\'', '(', ')', '.', ';']; //, '']; //, null, undefined]; // Represents the most fundamental building blocks of a lisp document export class LispAtom implements ILispFragment { - public symbol: string; - protected _line: number; - protected _column: number; - - get line(): number { - return this._line; - } - - set line(value) { - this._line = value; - } - - get column(): number { - return this._column; - } - - set column(value) { - this._column = value; - } - - // These 3 fields exist to support comment driven intelligence. Creation of Symbol mappings is an expensive operation - // and these 2 fields prevent ~80% of the required overhead when working in concert with the highly efficient parser - public flatIndex: number; - public commentLinks?: Array; - public hasGlobalFlag?: boolean; - - constructor(line: number, column: number, sym: string, flatIdx = -1) { - this._line = line; - this._column = column; - this.symbol = sym; - this.flatIndex = flatIdx; - } - - - // Does a simple comparison between 2 ILispFragments without the reference problem - equal(atom: ILispFragment): boolean { - return JSON.stringify(this) === JSON.stringify(atom); - } - - - // Determines if this LispAtom or its derived type can be used as an ILispFragment - isLispFragment(): boolean { - if (this instanceof Sexpression) { - return false; - } else { - return true; - } - } - - - // returns the start or ending line of the LispAtom depending on the boolean flag - symbLine(last: boolean = true): number { - if (last) { - let internalLines = 0; - if (this.symbol.startsWith(';|')) { - for (let i = 0; i < this.symbol.length; i++) { - if (this.symbol.charAt(i) === '\n') { // it can handle the \r\n and \n - internalLines++; - } - } - } - return this.line + internalLines; - } else { - return this.line; - } - } - - - // Returns the length of the LispAtom's text value - length(): number { - return this.symbol.length; - } - - - // Tests if the LispAtom is representing a single-line comment - isLineComment(): boolean { - return this.symbol.startsWith(';') && !this.symbol.startsWith(';|'); - } - - - // Tests if the LispAtom is representing any type of comment - isComment(): boolean { - return this.symbol.startsWith(';'); - } - - - // Tests if the LispAtom is representing a structural closing parenthesis - isRightParen(): boolean { - return this.symbol === ')'; - } - - - // Tests if the LispAtom is representing a structural opening parenthesis - isLeftParen(): boolean { - return this.symbol === '('; - } - - isPrimitive(): boolean { - // if (!this['atoms']) { - // return primitiveRegex.test(this.symbol); - // } - // return false; - return primitiveGlyphs.indexOf(this.symbol[0]) > -1 - || primitiveRegex.test(this.symbol); - } - - // Returns true if this LispAtom encapsulates the provided Position - contains(position: Position): boolean { - return this.getRange().contains(position); - } - - - // Gets the full range of the LispAtom and is capable of handling multi line strings or comments - getRange(): Range { - let cLine = this.line; - let cColm = this.column; - const begin: Position = new Position(cLine, cColm); - for (let i = 0; i < this.symbol.length; i++) { - const ch = this.symbol[i]; - if (ch === '\n') { - cLine += 1; - cColm = 0; - } else { - cColm += 1; - } - } - const close: Position = new Position(cLine, cColm); - return new Range(begin.line, begin.character, close.line, close.character); - } + public symbol: string; + protected _line: number; + protected _column: number; + + get line(): number { + return this._line; + } + + set line(value) { + this._line = value; + } + + get column(): number { + return this._column; + } + + set column(value) { + this._column = value; + } + + // These 3 fields exist to support comment driven intelligence. Creation of Symbol mappings is an expensive operation + // and these 2 fields prevent ~80% of the required overhead when working in concert with the highly efficient parser + public flatIndex: number; + public commentLinks?: Array; + public hasGlobalFlag?: boolean; + + constructor(line: number, column: number, sym: string, flatIdx = -1) { + this._line = line; + this._column = column; + this.symbol = sym; + this.flatIndex = flatIdx; + } + + + // Does a simple comparison between 2 ILispFragments without the reference problem + equal(atom: ILispFragment): boolean { + return JSON.stringify(this) === JSON.stringify(atom); + } + + + // Determines if this LispAtom or its derived type can be used as an ILispFragment + isLispFragment(): boolean { + if (this instanceof Sexpression) { + return false; + } else { + return true; + } + } + + + // returns the start or ending line of the LispAtom depending on the boolean flag + symbLine(last: boolean = true): number { + if (last) { + let internalLines = 0; + if (this.symbol.startsWith(';|')) { + for (let i = 0; i < this.symbol.length; i++) { + if (this.symbol.charAt(i) === '\n') { // it can handle the \r\n and \n + internalLines++; + } + } + } + return this.line + internalLines; + } else { + return this.line; + } + } + + + // Returns the length of the LispAtom's text value + length(): number { + return this.symbol.length; + } + + + // Tests if the LispAtom is representing a single-line comment + isLineComment(): boolean { + return this.symbol.startsWith(';') && !this.symbol.startsWith(';|'); + } + + + // Tests if the LispAtom is representing any type of comment + isComment(): boolean { + return this.symbol.startsWith(';'); + } + + + // Tests if the LispAtom is representing a structural closing parenthesis + isRightParen(): boolean { + return this.symbol === ')'; + } + + + // Tests if the LispAtom is representing a structural opening parenthesis + isLeftParen(): boolean { + return this.symbol === '('; + } + + isPrimitive(): boolean { + // if (!this['atoms']) { + // return primitiveRegex.test(this.symbol); + // } + // return false; + return primitiveGlyphs.indexOf(this.symbol[0]) > -1 + || primitiveRegex.test(this.symbol); + } + + // Returns true if this LispAtom encapsulates the provided Position + contains(position: Position): boolean { + return this.getRange().contains(position); + } + + + // Gets the full range of the LispAtom and is capable of handling multi line strings or comments + getRange(): Range { + let cLine = this.line; + let cColm = this.column; + const begin: Position = new Position(cLine, cColm); + for (let i = 0; i < this.symbol.length; i++) { + const ch = this.symbol[i]; + if (ch === '\n') { + cLine += 1; + cColm = 0; + } else { + cColm += 1; + } + } + const close: Position = new Position(cLine, cColm); + return new Range(begin.line, begin.character, close.line, close.character); + } } \ No newline at end of file diff --git a/extension/src/astObjects/lispContainer.ts b/extension/src/astObjects/lispContainer.ts index ba7b7737..4615f310 100644 --- a/extension/src/astObjects/lispContainer.ts +++ b/extension/src/astObjects/lispContainer.ts @@ -5,257 +5,257 @@ import { Position, Range } from 'vscode'; // A utility class to hold and work with a collection of LispAtom|LispContainers export class LispContainer extends LispAtom { - atoms: Array; - linefeed: string; - userSymbols?: Map>; // this would only show up on document root LispContainers - - // pass through getter for the ILispFragment interface - get body(): LispContainer { - return this; - } - - get line(): number { - return this.userSymbols ? 0 : this.getFirstAtom().line; - } - - set line(value) { - } // setter exists only to satisfy contract - get column(): number { - return this.userSymbols ? 0 : this.getFirstAtom().column; - } - - set column(value) { - } // setter exists only to satisfy contract - - // LispContainer constructor defaults to a clearly uninitialized state - constructor(lineFeed: string = '\n') { - super(-1, -1, ''); - this.atoms = []; - this.linefeed = lineFeed; - } - - - // Adds one or more ILispFragment's to the LispContainer Atoms - addAtom(...items: ILispFragment[]) { - items.forEach(f => { - if (f?.isLispFragment()) { - this.atoms.push(f); - } - }); - } - - - // Finds a child LispAtom if it legitimately touches/contains the Position - getAtomFromPos(loc: Position): LispAtom { - if (!this.contains(loc)) { - return null; - } else { - for (var i = 0; i < this.atoms.length; i++) { - const lispObj = this.atoms[i]; - if (lispObj.contains(loc)) { - if (lispObj instanceof LispContainer) { - return lispObj.getAtomFromPos(loc); - } else if (lispObj instanceof LispAtom) { - return lispObj; - } - } - } - } - return null; - } - - - // Returns the total length of characters within a LispContainer minus any LispAtom separated whitespace - length(): number { - let res = 0; - this.atoms.forEach(atom => { - res += atom.length(); - }); - return res; - } - - - // returns the start or ending line of the LispContainer depending on the boolean flag - symbLine(last: boolean = true): number { - if (this.atoms.length === 0) { - return -1; - } - - if (last) { - const lastAtom = this.atoms[this.atoms.length - 1]; - return lastAtom.symbLine(); - } else { - return this.atoms[0].symbLine(); - } - } - - - // gets the total length of root atoms this LispContainer holds - size(): number { - return this.atoms.length; - } - - - // Finds a child LispContainer if it legitimately touches/contains the Position - getExpressionFromPos(loc: Position, parent: boolean = false): LispContainer { - let result: LispContainer = null; - if (this.contains(loc)) { - this.atoms.forEach(lispObj => { - if (lispObj.contains(loc) && lispObj instanceof LispContainer) { - result = lispObj.getExpressionFromPos(loc, parent) ?? (parent ? this : lispObj); - } - }); - } - return result; - } - - - // Finds the parent LispContainer of any existing ILispFragment, typically used with a primary Container like Defun - getParentOfExpression(child: ILispFragment): LispContainer { - const pos = new Position(child.line, child.column); - return this.getExpressionFromPos(pos, true); - } - - - // Gets a range representing the full LispContainer, especially useful for TextDocument.getText() - getRange(): Range { - const begin = this.getFirstAtom().getRange().start; - const close = this.getLastAtom().getRange().end; - return new Range(begin, close); - } - - private getFirstAtom(): ILispFragment { - const tail = this.atoms[0]; - return tail.body?.getFirstAtom() ?? tail; - } - - private getLastAtom(): ILispFragment { - const tail = this.atoms[this.atoms.length - 1]; - return tail.body?.getLastAtom() ?? tail; - } - - - // This version was necessary to properly alternate over SETQ Name vs Value - private isValidForSetq(atom: ILispFragment): boolean { - return !atom.isComment() && !['\'', '(', ')', '.'].includes(atom.symbol) && (atom instanceof LispContainer || atom.symbol.trim().length > 0); - } - - // This is general purpose utility to make sure primitives such as strings, numbers and decorations are not evaluated - private notNumberStringOrProtected(atom: ILispFragment): boolean { - return !atom.isComment() && !['\'', '(', ')', '.'].includes(atom.symbol) && !(/^".*"$/.test(atom.symbol)) && !(/^\'{0,1}\-{0,1}\d+[eE\-]{0,2}\d*$/.test(atom.symbol)); - } - - - // This is an iteration helper that makes sure only useful LispAtom/LispContainers's get used for data collection purposes. - nextKeyIndex(currentIndex: number, forSetq?: boolean): number { - let index = currentIndex + 1; - if (index < this.atoms.length) { - const atom = this.atoms[index]; - const flag = forSetq ? this.isValidForSetq(atom) : this.notNumberStringOrProtected(atom); - if (atom instanceof LispAtom && flag) { - return index; - } else { - return this.nextKeyIndex(index, forSetq); - } - } else { - return -1; - } - } - - - // Returns a meaningful value from the LispContainer, this is useful for avoiding comments an structural symbols - getNthKeyAtom(significantNth: number): ILispFragment { - let num = 0; - for (let i = 0; i <= significantNth; i++) { - num = this.nextKeyIndex(num, true); - } - if (num < this.atoms.length && num >= 0) { - return this.atoms[num]; - } else { - return null; - } - } - - - // Used a lot like a DOM selector to navigate/extract values from LispContainer - findChildren(regx: RegExp, all: boolean): LispContainer[] { - let result: Array = []; - let index = this.nextKeyIndex(0); - const lispObj = this.atoms[index]; - if (!lispObj) { - return result; - } else if (regx.test(lispObj.symbol) === true) { - result.push(this); - if (all === true) { - this.atoms.filter(f => f.body).forEach((atom: ILispFragment) => { - result = result.concat(atom.body.findChildren(regx, all)); - }); - } - } else { - this.atoms.filter(f => f.body).forEach((atom: ILispFragment) => { - result = result.concat(atom.body.findChildren(regx, all)); - }); - } - return result; - } - - // Performance Note: the LispContainer parser takes ~700ms to create the tree from a 12.5mb (20K Lines/1.4M LispAtoms) - // file. In contrast, the older parsing used on formatting before it received some fixes was taking - // more than a minute and the revised version is still taking ~7000ms. - // To flatten the same 12.5mb tree for linear traversal takes ~40ms. The flattening process is - // considered to be an instantaneous operation even under extreme and highly improbable situations. - flatten(into?: Array): Array { - if (!into) { - into = []; - } - this.atoms.forEach(item => { - if (item instanceof LispContainer) { - item.flatten(into); - } else if (item instanceof LispAtom) { - into.push(item); - } - }); - return into; - } - - - // This is only used for verification of the LispContainer parser, but could have future formatting usefullness. - // Note1: test files cannot contain lines with only random whitespace or readable character lines that include - // trailing whitespace because a LispContainer has no context to reproduce that. - // Note2: tabs between atoms will be replaced with spaces and thus are not supported in test files. - asText(context?: IContainerStringCompilerContext): string { - let isRoot = false; - if (context === undefined) { - context = {result: '', line: 0, column: 0}; - isRoot = true; - } - this.atoms.forEach(item => { - while (context.line < item.line) { - context.result += this.linefeed; - context.line++; - context.column = 0; - } - while (context.column < item.column) { - context.result += ' '; - context.column++; - } - if (item instanceof LispContainer) { - item.asText(context); - } else { - context.result += item.symbol; - context.column += item.symbol.length; - if (item.isComment() && !item.isLineComment()) { - context.line += item.symbol.split(this.linefeed).length - 1; - } - } - }); - return isRoot ? context.result : ''; - } + atoms: Array; + linefeed: string; + userSymbols?: Map>; // this would only show up on document root LispContainers + + // pass through getter for the ILispFragment interface + get body(): LispContainer { + return this; + } + + get line(): number { + return this.userSymbols ? 0 : this.getFirstAtom().line; + } + + set line(value) { + } // setter exists only to satisfy contract + get column(): number { + return this.userSymbols ? 0 : this.getFirstAtom().column; + } + + set column(value) { + } // setter exists only to satisfy contract + + // LispContainer constructor defaults to a clearly uninitialized state + constructor(lineFeed: string = '\n') { + super(-1, -1, ''); + this.atoms = []; + this.linefeed = lineFeed; + } + + + // Adds one or more ILispFragment's to the LispContainer Atoms + addAtom(...items: ILispFragment[]) { + items.forEach(f => { + if (f?.isLispFragment()) { + this.atoms.push(f); + } + }); + } + + + // Finds a child LispAtom if it legitimately touches/contains the Position + getAtomFromPos(loc: Position): LispAtom { + if (!this.contains(loc)) { + return null; + } else { + for (let i = 0; i < this.atoms.length; i++) { + const lispObj = this.atoms[i]; + if (lispObj.contains(loc)) { + if (lispObj instanceof LispContainer) { + return lispObj.getAtomFromPos(loc); + } else if (lispObj instanceof LispAtom) { + return lispObj; + } + } + } + } + return null; + } + + + // Returns the total length of characters within a LispContainer minus any LispAtom separated whitespace + length(): number { + let res = 0; + this.atoms.forEach(atom => { + res += atom.length(); + }); + return res; + } + + + // returns the start or ending line of the LispContainer depending on the boolean flag + symbLine(last: boolean = true): number { + if (this.atoms.length === 0) { + return -1; + } + + if (last) { + const lastAtom = this.atoms[this.atoms.length - 1]; + return lastAtom.symbLine(); + } else { + return this.atoms[0].symbLine(); + } + } + + + // gets the total length of root atoms this LispContainer holds + size(): number { + return this.atoms.length; + } + + + // Finds a child LispContainer if it legitimately touches/contains the Position + getExpressionFromPos(loc: Position, parent: boolean = false): LispContainer { + let result: LispContainer = null; + if (this.contains(loc)) { + this.atoms.forEach(lispObj => { + if (lispObj.contains(loc) && lispObj instanceof LispContainer) { + result = lispObj.getExpressionFromPos(loc, parent) ?? (parent ? this : lispObj); + } + }); + } + return result; + } + + + // Finds the parent LispContainer of any existing ILispFragment, typically used with a primary Container like Defun + getParentOfExpression(child: ILispFragment): LispContainer { + const pos = new Position(child.line, child.column); + return this.getExpressionFromPos(pos, true); + } + + + // Gets a range representing the full LispContainer, especially useful for TextDocument.getText() + getRange(): Range { + const begin = this.getFirstAtom().getRange().start; + const close = this.getLastAtom().getRange().end; + return new Range(begin, close); + } + + private getFirstAtom(): ILispFragment { + const tail = this.atoms[0]; + return tail.body?.getFirstAtom() ?? tail; + } + + private getLastAtom(): ILispFragment { + const tail = this.atoms[this.atoms.length - 1]; + return tail.body?.getLastAtom() ?? tail; + } + + + // This version was necessary to properly alternate over SETQ Name vs Value + private isValidForSetq(atom: ILispFragment): boolean { + return !atom.isComment() && !['\'', '(', ')', '.'].includes(atom.symbol) && (atom instanceof LispContainer || atom.symbol.trim().length > 0); + } + + // This is general purpose utility to make sure primitives such as strings, numbers and decorations are not evaluated + private notNumberStringOrProtected(atom: ILispFragment): boolean { + return !atom.isComment() && !['\'', '(', ')', '.'].includes(atom.symbol) && !(/^".*"$/.test(atom.symbol)) && !(/^'{0,1}-{0,1}\d+[eE-]{0,2}\d*$/.test(atom.symbol)); + } + + + // This is an iteration helper that makes sure only useful LispAtom/LispContainers's get used for data collection purposes. + nextKeyIndex(currentIndex: number, forSetq?: boolean): number { + const index = currentIndex + 1; + if (index < this.atoms.length) { + const atom = this.atoms[index]; + const flag = forSetq ? this.isValidForSetq(atom) : this.notNumberStringOrProtected(atom); + if (atom instanceof LispAtom && flag) { + return index; + } else { + return this.nextKeyIndex(index, forSetq); + } + } else { + return -1; + } + } + + + // Returns a meaningful value from the LispContainer, this is useful for avoiding comments an structural symbols + getNthKeyAtom(significantNth: number): ILispFragment { + let num = 0; + for (let i = 0; i <= significantNth; i++) { + num = this.nextKeyIndex(num, true); + } + if (num < this.atoms.length && num >= 0) { + return this.atoms[num]; + } else { + return null; + } + } + + + // Used a lot like a DOM selector to navigate/extract values from LispContainer + findChildren(regx: RegExp, all: boolean): LispContainer[] { + let result: Array = []; + const index = this.nextKeyIndex(0); + const lispObj = this.atoms[index]; + if (!lispObj) { + return result; + } else if (regx.test(lispObj.symbol) === true) { + result.push(this); + if (all === true) { + this.atoms.filter(f => f.body).forEach((atom: ILispFragment) => { + result = result.concat(atom.body.findChildren(regx, all)); + }); + } + } else { + this.atoms.filter(f => f.body).forEach((atom: ILispFragment) => { + result = result.concat(atom.body.findChildren(regx, all)); + }); + } + return result; + } + + // Performance Note: the LispContainer parser takes ~700ms to create the tree from a 12.5mb (20K Lines/1.4M LispAtoms) + // file. In contrast, the older parsing used on formatting before it received some fixes was taking + // more than a minute and the revised version is still taking ~7000ms. + // To flatten the same 12.5mb tree for linear traversal takes ~40ms. The flattening process is + // considered to be an instantaneous operation even under extreme and highly improbable situations. + flatten(into?: Array): Array { + if (!into) { + into = []; + } + this.atoms.forEach(item => { + if (item instanceof LispContainer) { + item.flatten(into); + } else if (item instanceof LispAtom) { + into.push(item); + } + }); + return into; + } + + + // This is only used for verification of the LispContainer parser, but could have future formatting usefullness. + // Note1: test files cannot contain lines with only random whitespace or readable character lines that include + // trailing whitespace because a LispContainer has no context to reproduce that. + // Note2: tabs between atoms will be replaced with spaces and thus are not supported in test files. + asText(context?: IContainerStringCompilerContext): string { + let isRoot = false; + if (context === undefined) { + context = { result: '', line: 0, column: 0 }; + isRoot = true; + } + this.atoms.forEach(item => { + while (context.line < item.line) { + context.result += this.linefeed; + context.line++; + context.column = 0; + } + while (context.column < item.column) { + context.result += ' '; + context.column++; + } + if (item instanceof LispContainer) { + item.asText(context); + } else { + context.result += item.symbol; + context.column += item.symbol.length; + if (item.isComment() && !item.isLineComment()) { + context.line += item.symbol.split(this.linefeed).length - 1; + } + } + }); + return isRoot ? context.result : ''; + } } interface IContainerStringCompilerContext { - result: string; - line: number; - column: number; + result: string; + line: number; + column: number; } \ No newline at end of file diff --git a/extension/src/astObjects/sexpression.ts b/extension/src/astObjects/sexpression.ts index dcc6485b..96279f84 100644 --- a/extension/src/astObjects/sexpression.ts +++ b/extension/src/astObjects/sexpression.ts @@ -68,7 +68,7 @@ export class Sexpression extends LispAtom { if (!sexpr.atoms) return ret; - for (let atom of sexpr.atoms) { + for (const atom of sexpr.atoms) { if (atom instanceof Sexpression) { ret += this.getRawText(atom as Sexpression); } @@ -82,12 +82,12 @@ export class Sexpression extends LispAtom { } getAtomFromPos(loc: Position): LispAtom { - var line = loc.line; - var col = loc.character; - for (var i = 0; i < this.atoms.length; i++) { + const line = loc.line; + const col = loc.character; + for (let i = 0; i < this.atoms.length; i++) { if (this.atoms[i] instanceof Sexpression) { - var sexpr = this.atoms[i] as Sexpression; - var atom = sexpr.getAtomFromPos(loc); + const sexpr = this.atoms[i] as Sexpression; + const atom = sexpr.getAtomFromPos(loc); if (atom != null) return atom; } @@ -115,7 +115,7 @@ export class Sexpression extends LispAtom { return -1; if (last) { - let lastAtom = this.atoms[this.atoms.length - 1]; + const lastAtom = this.atoms[this.atoms.length - 1]; return lastAtom.symbLine(); } else { return this.atoms[0].symbLine(); @@ -131,7 +131,7 @@ export class Sexpression extends LispAtom { let count = 0; for (let index = 0; index < this.atoms.length; index++) { if (this.atoms[index] instanceof Sexpression) { - let subExpr = this.atoms[index] as Sexpression; + const subExpr = this.atoms[index] as Sexpression; count += subExpr.atomsCount(); } else if (!this.atoms[index].isLeftParen() @@ -165,14 +165,14 @@ export class Sexpression extends LispAtom { private formatSetq(startColumn: number): string { // compute the "variable" column width let secondColumnWidth = 0; - let realAtoms: number[] = []; + const realAtoms: number[] = []; for (let i = 0; i < this.atoms.length; i++) { if (this.atoms[i].isComment()) continue; realAtoms.push(i); } for (let m = 2; m < realAtoms.length; m += 2) { - let index = realAtoms[m]; + const index = realAtoms[m]; if (this.atoms[index].length() > secondColumnWidth) secondColumnWidth = this.atoms[index].length(); } @@ -202,8 +202,8 @@ export class Sexpression extends LispAtom { res += firstLine; - let setqPrefixLength = 6; // (setq length, no regard the comment length - let variblesColumnPos = startColumn + setqPrefixLength; + const setqPrefixLength = 6; // (setq length, no regard the comment length + const variblesColumnPos = startColumn + setqPrefixLength; let lastVariableIndex = 0; let hasCloseParen = false; for (let i = startIndex + 1; i < this.atoms.length; i++) { @@ -219,16 +219,16 @@ export class Sexpression extends LispAtom { continue; } - let atomIndex = realAtoms.indexOf(i); + const atomIndex = realAtoms.indexOf(i); if (atomIndex % 2 == 0) { // varaible column - let varColumn = Sexpression.format(this.atoms[i], variblesColumnPos); + const varColumn = Sexpression.format(this.atoms[i], variblesColumnPos); res += varColumn; lastVariableIndex = i; } else if (atomIndex > -1) { // value column - let varColumn = Sexpression.format(this.atoms[lastVariableIndex], variblesColumnPos); + const varColumn = Sexpression.format(this.atoms[lastVariableIndex], variblesColumnPos); let numspaces = secondColumnWidth - varColumn.length; if (realAtoms.indexOf(i - 1) == -1) { numspaces = secondColumnWidth; @@ -239,7 +239,7 @@ export class Sexpression extends LispAtom { // The 1 is the 1 blank space res += Sexpression.format(this.atoms[i], variblesColumnPos + secondColumnWidth + 1); - let nextAtom = this.atoms[i + 1]; + const nextAtom = this.atoms[i + 1]; if (!this.isRightParenAtIndex(i + 1) && nextAtom && !nextAtom.isComment()) { res += this.addNewLine(variblesColumnPos); } @@ -249,10 +249,10 @@ export class Sexpression extends LispAtom { // Last atom maybe ) if (hasCloseParen) { - let closeParenStr = this.formatLastAtom(startColumn, variblesColumnPos, this.isMultilineString(res)); + const closeParenStr = this.formatLastAtom(startColumn, variblesColumnPos, this.isMultilineString(res)); // Try to remove the extra line feed if the last atom is comment if (closeParenStr.startsWith(this.linefeed)) { - let lastlinefeed = res.lastIndexOf(this.linefeed); + const lastlinefeed = res.lastIndexOf(this.linefeed); if (lastlinefeed > 0) { let laststr = res.substring(lastlinefeed); laststr = laststr.trimEnd(); @@ -270,10 +270,10 @@ export class Sexpression extends LispAtom { public formatListToFillMargin(startColumn: number, alignCol?: number): string { let res = ""; - let leftMargin = gMaxLineChars - startColumn; + const leftMargin = gMaxLineChars - startColumn; let line = Sexpression.format(this.atoms[0], startColumn); let lineLen = line.length + startColumn; - let firstColWidth = line.length > 8 ? gIndentSpaces : line.length; + const firstColWidth = line.length > 8 ? gIndentSpaces : line.length; let secondColWidth = 0; let alignWidth = firstColWidth; let hasCloseParen = false; @@ -284,11 +284,11 @@ export class Sexpression extends LispAtom { break; } - let realLineCont = line.trim(); - let trylayoutCont = Sexpression.format(this.atoms[i], lineLen); - let col = trylayoutCont.search("\n"); - let thisColWidth = col == -1 ? this.atoms[i].length() : col; - let isProperLength = (): boolean => { + const realLineCont = line.trim(); + const trylayoutCont = Sexpression.format(this.atoms[i], lineLen); + const col = trylayoutCont.search("\n"); + const thisColWidth = col == -1 ? this.atoms[i].length() : col; + const isProperLength = (): boolean => { if (realLineCont.length + thisColWidth < leftMargin) return true; return false; @@ -357,24 +357,24 @@ export class Sexpression extends LispAtom { private formatDefun(startColumn: number): string { let handledParam = false; - let paramListFormatter = (startColumn: number, index: number): CustomRes => { - let atom = this.atoms[index]; + const paramListFormatter = (startColumn: number, index: number): CustomRes => { + const atom = this.atoms[index]; if (!handledParam && atom instanceof Sexpression) { handledParam = true; - let expr = atom as Sexpression; + const expr = atom as Sexpression; return { succ: true, res: expr.formatListAsColumn(startColumn) }; } else return { succ: false, res: undefined }; } - let paramsCustomCall = new CustomFmtHandler(paramListFormatter); - let firstlineatoms = 4; - let res = this.formatList(startColumn, firstlineatoms, false, undefined, paramsCustomCall); + const paramsCustomCall = new CustomFmtHandler(paramListFormatter); + const firstlineatoms = 4; + const res = this.formatList(startColumn, firstlineatoms, false, undefined, paramsCustomCall); return res; } private formatLastAtom(startColumn: number, columnWidth: number, addedNewLine?: boolean): string { let res = ""; - let lastAtom = this.atoms[this.atoms.length - 1]; + const lastAtom = this.atoms[this.atoms.length - 1]; if (lastAtom.isRightParen()) { if (!addedNewLine || gClosedParenInSameLine) { if (!this.atoms[this.atoms.length - 2].isLineComment()) @@ -393,11 +393,11 @@ export class Sexpression extends LispAtom { private formatLambda(startColumn: number): string { let handledParam = false; - let paramListFormatter = (startColumn: number, index: number): CustomRes => { - let atom = this.atoms[index]; + const paramListFormatter = (startColumn: number, index: number): CustomRes => { + const atom = this.atoms[index]; if (!handledParam && atom instanceof Sexpression) { handledParam = true; - let expr = atom as Sexpression; + const expr = atom as Sexpression; let res; if (expr.canBeFormatAsPlain(startColumn)) res = expr.formatAsPlainStyle(startColumn); @@ -406,8 +406,8 @@ export class Sexpression extends LispAtom { } else return { succ: false, res: undefined }; } - let paramsCustomCall = new CustomFmtHandler(paramListFormatter); - let res = this.formatList(startColumn, 3, false, undefined, paramsCustomCall); + const paramsCustomCall = new CustomFmtHandler(paramListFormatter); + const res = this.formatList(startColumn, 3, false, undefined, paramsCustomCall); return res; } @@ -444,7 +444,7 @@ export class Sexpression extends LispAtom { else { cont = Sexpression.format(this.atoms[i], startColumn + firstLine.length, isCond); // There is no space for plain format, so it needs to do narrow style format - if (prevAtom != "(" && prevAtom != "\'") { + if (prevAtom != "(" && prevAtom != "'") { if (cont.indexOf("\n") != -1) { firstcolumnWdith = gIndentSpaces; lastIndex = i; @@ -455,7 +455,7 @@ export class Sexpression extends LispAtom { firstLine += cont; prevAtom = cont; - if (cont != "(" && cont != "\'") + if (cont != "(" && cont != "'") firstLine += " "; if (i < alignItemIndex) @@ -469,7 +469,7 @@ export class Sexpression extends LispAtom { if (firstcolumnWdith > gIndentSpaces) firstcolumnWdith = gIndentSpaces; } - let columnWidth = startColumn + firstcolumnWdith; + const columnWidth = startColumn + firstcolumnWdith; for (let j = lastIndex; j < this.atoms.length; j++) { if (this.isRightParenAtIndex(j)) { @@ -478,15 +478,15 @@ export class Sexpression extends LispAtom { } if (this.atoms[j].isLineComment() && this.atoms[j - 1].symbLine() == this.atoms[j].symbLine()) { - let comment = Sexpression.format(this.atoms[j], columnWidth); + const comment = Sexpression.format(this.atoms[j], columnWidth); res += " " + comment; continue; } - let prevAtom = j - 1; + const prevAtom = j - 1; if (prevAtom >= 0) { let m = this.atoms[j - 1].symbLine(true) + 1; - let curAtomLine = this.atoms[j].symbLine(false); + const curAtomLine = this.atoms[j].symbLine(false); for (; m < curAtomLine; m++) { res += this.linefeed; } @@ -510,7 +510,7 @@ export class Sexpression extends LispAtom { // Last atom may be ) if (hasCloseParen) { - let str2Append = this.formatLastAtom(startColumn, columnWidth, this.isMultilineString(res)); + const str2Append = this.formatLastAtom(startColumn, columnWidth, this.isMultilineString(res)); if (str2Append === ')') res = res.trimEnd(); // to avoid extra whitespace before the closing paren. res += str2Append; @@ -527,7 +527,7 @@ export class Sexpression extends LispAtom { let res = ""; let startPos = startColumn; for (let i = 0; i < this.atoms.length; i++) { - let cont = Sexpression.format(this.atoms[i], startPos); + const cont = Sexpression.format(this.atoms[i], startPos); res += cont; startPos += cont.length; @@ -548,21 +548,21 @@ export class Sexpression extends LispAtom { } private isQuote(): boolean { - if (this.atoms.length < 2 || this.atoms[0].symbol != "\'") + if (this.atoms.length < 2 || this.atoms[0].symbol != "'") return false; return true; } private formatQuote(startColumn: number): string { - let quoteBody = this.atoms.slice(1); - let quoteExpr = new Sexpression(); + const quoteBody = this.atoms.slice(1); + const quoteExpr = new Sexpression(); quoteExpr.setAtoms(quoteBody); - let purgeAtoms = quoteExpr.isPureList(); + const purgeAtoms = quoteExpr.isPureList(); if (purgeAtoms && !this.canBeFormatAsPlain(startColumn)) - return "\'" + quoteExpr.formatListAsColumn(startColumn + 1); + return "'" + quoteExpr.formatListAsColumn(startColumn + 1); else - return "\'" + Sexpression.format(quoteExpr, startColumn + 1, true); + return "'" + Sexpression.format(quoteExpr, startColumn + 1, true); } private formatListAsNarrowStyle(startColumn: number): string { @@ -576,7 +576,7 @@ export class Sexpression extends LispAtom { private isDotPairs(): boolean { if (this.atoms.length == 5) { for (let i = 0; i < this.atoms.length; i++) { - let atom = this.atoms[i]; + const atom = this.atoms[i]; if (atom instanceof LispAtom) { if (atom.symbol == ".") return true; @@ -613,7 +613,7 @@ export class Sexpression extends LispAtom { } private isSameLineInRawText(): boolean { - let line = this.atoms[0].line; + const line = this.atoms[0].line; for (let i = 1; i < this.atoms.length; i++) { if (this.atoms.length - 1 == i) { @@ -635,7 +635,7 @@ export class Sexpression extends LispAtom { if (this.atoms.length < 3) return false; - let nearEndLine = (index: number): boolean => { + const nearEndLine = (index: number): boolean => { if (index > gMaxLineChars * 0.8) return true; @@ -645,8 +645,8 @@ export class Sexpression extends LispAtom { if (this.isPureLongList() && gLongListFormatAsSingleColumn == LongListFmts.kWideStyleSingleCol && !nearEndLine(startColumn)) return true; - let op = this.getLispOperator(); - let opName = op.symbol.toLowerCase(); + const op = this.getLispOperator(); + const opName = op.symbol.toLowerCase(); if (!isInternalAutoLispOp(opName)) return false; @@ -669,10 +669,10 @@ export class Sexpression extends LispAtom { if (!this.isSameLineInRawText()) return false; - let op = this.getLispOperator(); + const op = this.getLispOperator(); if (op == undefined) return true; - let opsym = op.symbol; + const opsym = op.symbol; // setq can not layout in the same line if (opsym == "setq") { @@ -682,7 +682,7 @@ export class Sexpression extends LispAtom { for (let i = 2; i < this.atoms.length; i++) { if (this.atoms[i] instanceof Sexpression) { - let subSxpr = this.atoms[i] as Sexpression; + const subSxpr = this.atoms[i] as Sexpression; if (!subSxpr.canBeFormatAsPlain(startColumn)) return false; } @@ -690,7 +690,7 @@ export class Sexpression extends LispAtom { return false; } - let tryFmtStr = Sexpression.format(op, startColumn); + const tryFmtStr = Sexpression.format(op, startColumn); if (tryFmtStr.indexOf("\n") != -1) return false; @@ -716,14 +716,14 @@ export class Sexpression extends LispAtom { } if (this.isQuote()) { - let quoteBody = this.atoms.slice(1); - let quoteExpr = new Sexpression(); + const quoteBody = this.atoms.slice(1); + const quoteExpr = new Sexpression(); quoteExpr.setAtoms(quoteBody); return quoteExpr.isValidSexpr(); } - let hasLeftParen = this.atoms[0].isLeftParen(); - let hasRightParen = this.atoms[this.atoms.length - 1].isRightParen(); + const hasLeftParen = this.atoms[0].isLeftParen(); + const hasRightParen = this.atoms[this.atoms.length - 1].isRightParen(); if (hasLeftParen === hasRightParen) { return true; } @@ -768,7 +768,7 @@ export class Sexpression extends LispAtom { // All the atom index start from 0, and include the left parenthes static format(exp: LispAtom | Sexpression, startColumn: number, asCond?: boolean): string { if (exp instanceof Sexpression) { - let length = exp.length(); + const length = exp.length(); if (exp.isDotPairs()) { return exp.formatAsPlainStyle(startColumn); } @@ -776,11 +776,11 @@ export class Sexpression extends LispAtom { return exp.formatQuote(startColumn); } else if (length > 4) { - let lispOperator = exp.getLispOperator(); + const lispOperator = exp.getLispOperator(); if (exp.atoms[0].isLeftParen() && !exp.canBeFormatAsPlain(startColumn)) { - let opName = lispOperator.symbol.toLowerCase(); + const opName = lispOperator.symbol.toLowerCase(); if (opName == "if" || opName == "repeat" || opName == "while") return exp.formatList(startColumn, 3); @@ -830,13 +830,13 @@ export class Sexpression extends LispAtom { else if (gIndentSpaces > 6) gIndentSpaces = 6; - let parenStyle = closeParenStyle(); + const parenStyle = closeParenStyle(); if (parenStyle.toString().toLowerCase() == "same line") gClosedParenInSameLine = true; else gClosedParenInSameLine = false; if (!gHasSetLongListFormat) { - let listFmtStyle = longListFormatStyle(); + const listFmtStyle = longListFormatStyle(); if (listFmtStyle.toString().toLowerCase() == "single column") gLongListFormatAsSingleColumn = LongListFmts.kWideStyleSingleCol; else gLongListFormatAsSingleColumn = LongListFmts.kFitToMargin; diff --git a/extension/src/commands.ts b/extension/src/commands.ts index ed6fc71a..03f955f1 100644 --- a/extension/src/commands.ts +++ b/extension/src/commands.ts @@ -1,7 +1,7 @@ import * as vscode from "vscode"; import { TextDocument, ProviderResult, CancellationToken, - Position, Range, + Position, CompletionContext, CompletionItem, CompletionList } from "vscode"; @@ -13,13 +13,13 @@ import { AutoLispExtProvideDefinition } from './providers/gotoProvider'; import { AutoLispExtProvideReferences } from './providers/referenceProvider'; import { AutoLispExtPrepareRename, AutoLispExtProvideRenameEdits } from './providers/renameProvider'; import { SymbolManager } from './symbols'; -import {AutoLispExtProvideHover} from "./providers/hoverProvider"; -import { DocumentServices } from './services/documentServices'; +import { AutoLispExtProvideHover } from "./providers/hoverProvider"; +import { Selectors } from './services/documentServices'; import { invokeCompletionProviderDcl } from './completion/completionProviderDcl'; const localize = nls.loadMessageBundle(); -export function registerCommands(context: vscode.ExtensionContext){ +export function registerCommands(context: vscode.ExtensionContext) { context.subscriptions.push(vscode.commands.registerCommand('autolisp.openWebHelp', async () => { // Note: this function is directly referenced by the package.json contributes (commands & menus) section. @@ -31,30 +31,30 @@ export function registerCommands(context: vscode.ExtensionContext){ await vscode.commands.executeCommand('editor.action.addSelectionToNextFindMatch'); selected = editor.document.getText(editor.selection); } - let urlPath: string = AutoLispExt.WebHelpLibrary.getWebHelpUrlBySymbolName(selected, editor.document.fileName); - if (urlPath.trim() !== ""){ + const urlPath: string = AutoLispExt.WebHelpLibrary.getWebHelpUrlBySymbolName(selected, editor.document.fileName); + if (urlPath.trim() !== "") { vscode.env.openExternal(vscode.Uri.parse(urlPath)); } } catch (err) { - if (err){ - let msg = localize("autolispext.help.commands.openWebHelp", "Failed to load the webHelpAbstraction.json file"); + if (err) { + const msg = localize("autolispext.help.commands.openWebHelp", "Failed to load the webHelpAbstraction.json file"); showErrorMessage(msg, err); } } })); - + // Associated with the right click "Insert Region" menu item context.subscriptions.push(vscode.commands.registerCommand("autolisp.insertFoldingRegion", async () => { try { - let commentChar = vscode.window.activeTextEditor.document.fileName.toUpperCase().slice(-4) === ".DCL" ? "//" : ";"; + const commentChar = vscode.window.activeTextEditor.document.fileName.toUpperCase().slice(-4) === ".DCL" ? "//" : ";"; const snip = new vscode.SnippetString(commentChar + "#region ${1:description}\n${TM_SELECTED_TEXT}\n" + commentChar + "#endregion"); await vscode.window.activeTextEditor.insertSnippet(snip); } catch (err) { - if (err){ - let msg = localize("autolispext.commands.addFoldingRegion", "Failed to insert snippet"); + if (err) { + const msg = localize("autolispext.commands.addFoldingRegion", "Failed to insert snippet"); showErrorMessage(msg, err); } } @@ -71,7 +71,7 @@ export function registerCommands(context: vscode.ExtensionContext){ if (!doc.isLSP) { return; } - + // find the root LispContainer of the current cursor position const exp = doc.documentContainer.atoms.find(p => p.contains(pos)); @@ -79,8 +79,8 @@ export function registerCommands(context: vscode.ExtensionContext){ const def = await getDefunAtPosition(exp, pos); // extract the Defun arguments for @Param documentation - const args = getDefunArguments(def); - + const args = getDefunArguments(def); + // generate a dynamic snippet multi-line comment to represent the defun and its arguments const snip = generateDocumentationSnippet(lf, args); @@ -88,65 +88,63 @@ export function registerCommands(context: vscode.ExtensionContext){ } catch (err) { if (err) { - let msg = localize("autolispext.help.commands.generateDocumentation", "A valid defun name could not be located"); + const msg = localize("autolispext.help.commands.generateDocumentation", "A valid defun name could not be located"); showErrorMessage(msg, err); } } })); - AutoLispExt.Subscriptions.push(vscode.languages.registerDefinitionProvider([DocumentServices.Selectors.LSP, 'lisp'], { + AutoLispExt.Subscriptions.push(vscode.languages.registerDefinitionProvider([Selectors.LSP, 'lisp'], { provideDefinition: function (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken) - : vscode.ProviderResult { + : vscode.ProviderResult { // Purpose: locate potential source definitions of the underlying symbol try { // offload all meaningful work to something that can be tested. const result = AutoLispExtProvideDefinition(document, position); - if (!result) { + if (!result || token.isCancellationRequested) { return; } return result; } catch (err) { - return; // I don't believe this requires a localized error since VSCode has a default "no definition found" response + return (err); // I don't believe this requires a localized error since VSCode has a default "no definition found" response } } })); const msgRenameFail = localize("autolispext.providers.rename.failed", "The symbol was invalid for renaming operations"); - AutoLispExt.Subscriptions.push(vscode.languages.registerRenameProvider([DocumentServices.Selectors.LSP, 'lisp'], { + AutoLispExt.Subscriptions.push(vscode.languages.registerRenameProvider([Selectors.LSP, 'lisp'], { prepareRename: function (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken) - : vscode.ProviderResult - { + : vscode.ProviderResult { // Purpose: collect underlying symbol range and feed it as rename popup's initial value try { // offload all meaningful work to something that can be tested. const result = AutoLispExtPrepareRename(document, position); - if (!result) { + if (!result || token.isCancellationRequested) { return; } return result; } catch (err) { - if (err){ + if (err) { showErrorMessage(msgRenameFail, err); } } }, provideRenameEdits: function (document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken) - : vscode.ProviderResult - { + : vscode.ProviderResult { // Purpose: only fires if the user provided rename popup with a tangible non-equal value. From here, our // goal is to find & generate edit information for all valid rename targets within known documents try { // offload all meaningful work to something that can be tested. const result = AutoLispExtProvideRenameEdits(document, position, newName); - if (!result) { + if (!result || token.isCancellationRequested) { return; } // subsequent renaming operations could pull outdated cached symbol maps if we don't clear the cache. SymbolManager.invalidateSymbolMapCache(); return result; } catch (err) { - if (err){ + if (err) { showErrorMessage(msgRenameFail, err); } } @@ -154,42 +152,45 @@ export function registerCommands(context: vscode.ExtensionContext){ })); - AutoLispExt.Subscriptions.push(vscode.languages.registerReferenceProvider([ DocumentServices.Selectors.LSP, 'lisp'], { + AutoLispExt.Subscriptions.push(vscode.languages.registerReferenceProvider([Selectors.LSP, 'lisp'], { provideReferences: function (document: vscode.TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken) - : vscode.ProviderResult - { + : vscode.ProviderResult { // Purpose in theory: locate scoped reference across the workspace, project and/or randomly opened documents // Purpose in practice: similar to theory, but mostly provides visibility to what our "renameProvider" would effect try { // offload all meaningful work to something that can be tested. const result = AutoLispExtProvideReferences(document, position); - if (!result) { + if (!result || token.isCancellationRequested) { return; } return result; } catch (err) { - return; // No localized error since VSCode has a default "no results" response + return err; // No localized error since VSCode has a default "no results" response } } })); - AutoLispExt.Subscriptions.push(vscode.languages.registerHoverProvider([DocumentServices.Selectors.LSP, DocumentServices.Selectors.DCL], { + AutoLispExt.Subscriptions.push(vscode.languages.registerHoverProvider([Selectors.LSP, Selectors.DCL], { provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult { try { // offload all meaningful work to something that can be tested. const roDoc = AutoLispExt.Documents.getDocument(document); - return AutoLispExtProvideHover(roDoc, position); + if (!token.isCancellationRequested) { + return AutoLispExtProvideHover(roDoc, position); + } } catch (err) { - return; // No localized error since VSCode has a default "no results" response + return err; // No localized error since VSCode has a default "no results" response } } })); - AutoLispExt.Subscriptions.push(vscode.languages.registerCompletionItemProvider([DocumentServices.Selectors.DCL], { + AutoLispExt.Subscriptions.push(vscode.languages.registerCompletionItemProvider([Selectors.DCL], { - provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken, context: CompletionContext) : ProviderResult { + provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken, context: CompletionContext): ProviderResult { const roDoc = AutoLispExt.Documents.getDocument(document); - return invokeCompletionProviderDcl(roDoc, position, context); + if (token.isCancellationRequested) { + return invokeCompletionProviderDcl(roDoc, position, context); + } } }, ...[' ', ':', '=', ';', '/'])); diff --git a/extension/src/completion/autocompletionProvider.ts b/extension/src/completion/autocompletionProvider.ts index 2b617e14..a355472c 100644 --- a/extension/src/completion/autocompletionProvider.ts +++ b/extension/src/completion/autocompletionProvider.ts @@ -17,27 +17,27 @@ export function isInternalAutoLispOp(item: string): boolean { export function getCmdAndVarsCompletionCandidates(allCandiates: string[], word: string, userInputIsUpper: boolean): Array { - var hasUnderline = false; + let hasUnderline = false; if (word[0] == "_") { hasUnderline = true; word = word.substring(1); } - var hasDash = false; + let hasDash = false; if (word[0] == "-") { hasDash = true; } - let suggestions: Array = []; + const suggestions: Array = []; allCandiates.forEach((item) => { - var candidate = item; + let candidate = item; if (userInputIsUpper) candidate = item.toUpperCase(); else candidate = item.toLowerCase(); if (candidate.startsWith(word)) { - var label = candidate; + let label = candidate; // The _ symbol has special mean in AutoCAD commands, so we add the prefix if it matches the command name if (hasUnderline) @@ -57,16 +57,16 @@ export function getCmdAndVarsCompletionCandidates(allCandiates: string[], word: } function getCompletionCandidates(allCandiates: string[], word: string, userInputIsUpper: boolean): Array { - let suggestions: Array = []; + const suggestions: Array = []; allCandiates.forEach((item) => { - var candidate = item; + let candidate = item; if (userInputIsUpper) candidate = item.toUpperCase(); else candidate = item.toLowerCase(); if (candidate.startsWith(word)) { - var label = candidate; + const label = candidate; const completion = new vscode.CompletionItem(label); suggestions.push(completion); } @@ -76,10 +76,10 @@ function getCompletionCandidates(allCandiates: string[], word: string, userInput } export function getMatchingWord(document: vscode.TextDocument, position: vscode.Position): [string, boolean] { - let linetext = document.lineAt(position).text; + const linetext = document.lineAt(position).text; let word = document.getText(document.getWordRangeAtPosition(position)); - let wordSep = " &#^()[]|;'\"."; + const wordSep = " &#^()[]|;'\"."; // Autolisp has special word range rules and now VScode has some issues to check the "word" range, // so it needs this logic to check the REAL word range @@ -88,7 +88,7 @@ export function getMatchingWord(document: vscode.TextDocument, position: vscode. let length = 1; let hasSetLen = false; for (; pos >= 0; pos--) { - let ch = linetext.charAt(pos); + const ch = linetext.charAt(pos); if (wordSep.includes(ch)) { if (!hasSetLen) length = word.length; @@ -99,14 +99,14 @@ export function getMatchingWord(document: vscode.TextDocument, position: vscode. hasSetLen = true; } - var isupper = () => { - var lastCh = word.slice(-1); - var upper = lastCh.toUpperCase(); + const isupper = () => { + const lastCh = word.slice(-1); + const upper = lastCh.toUpperCase(); if (upper != lastCh.toLowerCase() && upper == lastCh) return true; return false; } - var inputIsUpper = isupper(); + const inputIsUpper = isupper(); if (inputIsUpper) word = word.toUpperCase(); else word = word.toLowerCase(); @@ -115,8 +115,8 @@ export function getMatchingWord(document: vscode.TextDocument, position: vscode. } export function getLispAndDclCompletions(document: vscode.TextDocument, word: string, isupper: boolean): vscode.CompletionItem[] { - let currentLSPDoc = document.fileName; - let ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); + const currentLSPDoc = document.fileName; + const ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); let candidatesItems = AutoLispExt.Resources.internalLispFuncs; if (ext === ".DCL") { candidatesItems = AutoLispExt.Resources.internalDclKeys; @@ -129,7 +129,7 @@ export function getLispAndDclCompletions(document: vscode.TextDocument, word: st } else { return allSuggestions.filter(function (suggestion) { - for (var prefix of AutoLispExt.Resources.winOnlyListFuncPrefix) { + for (const prefix of AutoLispExt.Resources.winOnlyListFuncPrefix) { if (suggestion.label.toString().startsWith(prefix)) { return false; } @@ -141,29 +141,30 @@ export function getLispAndDclCompletions(document: vscode.TextDocument, word: st export function registerAutoCompletionProviders() { vscode.languages.registerCompletionItemProvider(['autolisp', 'lsp', 'autolispdcl'], { - + //eslint-disable-next-line @typescript-eslint/no-unused-vars provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext) { try { - let linetext = document.lineAt(position).text; - if (linetext.startsWith(";") || linetext.startsWith(";;") - || linetext.startsWith("#|")) { + const linetext = document.lineAt(position).text; + if ((linetext.startsWith(";") || linetext.startsWith(";;") + || linetext.startsWith("#|")) && !token.isCancellationRequested) { return []; } - let [inputword, userInputIsUpper] = getMatchingWord(document, position); - if (inputword.length == 0) + const [inputword, userInputIsUpper] = getMatchingWord(document, position); + if (inputword.length == 0 && !token.isCancellationRequested) return []; - var isInDoubleQuote = isCursorInDoubleQuoteExpr(document, position); - if (isInDoubleQuote) { - var cmds = getCmdAndVarsCompletionCandidates(AutoLispExt.Resources.allCmdsAndSysvars, inputword, userInputIsUpper); + const isInDoubleQuote = isCursorInDoubleQuoteExpr(document, position); + if (isInDoubleQuote && !token.isCancellationRequested) { + const cmds = getCmdAndVarsCompletionCandidates(AutoLispExt.Resources.allCmdsAndSysvars, inputword, userInputIsUpper); return cmds; } return getLispAndDclCompletions(document, inputword, userInputIsUpper); } catch (err) { + console.error(err) return []; } } diff --git a/extension/src/completion/completionItemDcl.ts b/extension/src/completion/completionItemDcl.ts index c10e373e..d9f5bc26 100644 --- a/extension/src/completion/completionItemDcl.ts +++ b/extension/src/completion/completionItemDcl.ts @@ -1,7 +1,7 @@ -import {CompletionItem, CompletionItemKind, CompletionItemLabel, Position, Range, SnippetString, TextEdit} from "vscode"; -import {IDclContainer, IDclFragment} from "../astObjects/dclInterfaces"; -import {DclTile} from "../astObjects/dclTile"; -import {DclAttribute} from "../astObjects/dclAttribute"; +import { CompletionItem, CompletionItemKind, CompletionItemLabel, Position, Range, SnippetString, TextEdit } from "vscode"; +import { IDclContainer, IDclFragment } from "../astObjects/dclInterfaces"; +import { DclTile } from "../astObjects/dclTile"; +//import {DclAttribute} from "../astObjects/dclAttribute"; import { CompletionLibraryDcl } from './completionLibraryDcl'; // This file is mostly responsible for dynamic modifications to CompletionLibraryDcl default representations @@ -9,307 +9,308 @@ import { CompletionLibraryDcl } from './completionLibraryDcl'; // Consider it an "enhancement" mechanism that actively helps the user create well formed DCL files quickly export const Kinds = { - // Configures the Icons used on the left side of the suggested CompletionItems - TILE: CompletionItemKind.Struct, - ATTRIBUTE: CompletionItemKind.Variable, - PRIMITIVE: CompletionItemKind.Constant, - STRUCTURE: CompletionItemKind.TypeParameter, - ENUM: CompletionItemKind.EnumMember + // Configures the Icons used on the left side of the suggested CompletionItems + TILE: CompletionItemKind.Struct, + ATTRIBUTE: CompletionItemKind.Variable, + PRIMITIVE: CompletionItemKind.Constant, + STRUCTURE: CompletionItemKind.TypeParameter, + ENUM: CompletionItemKind.EnumMember }; const getPositionRank = (pos: Position): number => pos.line * 1000 + pos.character; export class CompletionItemDcl extends CompletionItem { - constructor(source: string | CompletionItemLabel | CompletionItemDcl) { - if (source instanceof CompletionItemDcl) { - super(source.label, source.kind); - this.documentation = source.documentation; - this.sortText = source.sortText; - - if (source.detail) { - this.detail = source.detail; - } - - if (source.insertText instanceof SnippetString) { - this.insertText = new SnippetString(source.insertText.value); - } else { - this.insertText = source.insertText; - } - } else { - super(source); - } - } - - - - - - // #region Helpers - private getConsumeRange(startAtom: IDclFragment, pos: Position) { - return new Range(new Position(startAtom.line, startAtom.column), pos); - } - - private needsLF() : boolean { - return this.kind === Kinds.TILE - && (CompletionLibraryDcl.Instance.tilesWithChildren.includes(this.label.toString()) - || this.label === 'paragraph' - || this.label === 'concatenation'); - } - // #endregion Helpers - - - - - // #region primary handlers - public postProcess(pos: Position, atom: IDclFragment, directParent: IDclContainer, tile: DclTile): CompletionItemDcl { - // Currently doesn't handle ": *nothing* { }" but all the way back to the suggestion engine. - if (this.kind === Kinds.ENUM || this.kind === Kinds.PRIMITIVE) { - return this.postProcessEnum(pos, atom, directParent, tile); - } - - if (this.kind === Kinds.TILE) { - return this.postProcessTile(pos, atom, directParent, tile); - } - - if (this.kind === Kinds.ATTRIBUTE) { - return this.postProcessAttribute(pos, atom, directParent, tile); - } - - if (this.label.toString().startsWith('{') && directParent?.length === 2) { - const clone = new CompletionItemDcl(this); - const parentRange = directParent.atoms[1].range; - clone.range = new Range(pos.line, pos.character, parentRange.end.line, parentRange.end.character); - if (clone.insertText instanceof SnippetString) { - clone.insertText.value = `${directParent.atoms[1].symbol} ${clone.insertText.value}`; - } - return clone; - } - - if (atom?.symbol === '/') { - const clone = new CompletionItemDcl(this); - clone.range = atom.range; - return clone; - } - - return this; - } - - private postProcessAttribute(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - - if ((atom?.symbol === ';' || atom?.symbol === '{') && pos.character > atom.column) { - // contextually this happens when closing 1 attribute and can now start defining another - const clone = new CompletionItemDcl(this); - clone.insertText = ` ${clone.insertText} =`; - return clone; - } - - if (atom && container.atoms[0] === atom) { - const clone = new CompletionItemDcl(this); - clone.range = atom.range; - if (container.asAttribute?.delineator?.symbol !== '=') { - clone.insertText = `${clone.insertText} =`; - } - return clone; - } - - return this; - } - - private postProcessEnum(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - // Note: if this is an enum, then container can only be a known attribute type - - const clone = new CompletionItemDcl(this); - const closeAttribute = (atom && container.atoms[3]?.symbol !== ';') || (!atom && container.atoms[2]?.symbol !== ';'); - - if (closeAttribute) { - if (clone.insertText instanceof SnippetString) { - clone.insertText.value += ';'; - } else { - clone.insertText += ';'; - } - } - - if (atom) { - clone.range = atom.range; - } - - return clone; - } - - private postProcessTile(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - const posRank = getPositionRank(pos); - if (!atom) { - if (container.lastAtom.rank < posRank) { - return this.postProcessTileProximityParent(pos, container, tile); - } else if (container.contains(pos)) { - return this.postProcessTilePosition(pos, container, tile); - } - } - - if (!container.contains(pos)) { - return this; // some kind of malformed arrangement - debugger; // Impossible? If we have an atom, then then we should have a container containing that atom - } - - return this.postProcessTileWithAtom(pos, atom, container, tile); - } - // #endregion primary handlers - - - - - // #region Tile with Atom - private postProcessTileWithAtom(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - if (atom.symbol === ':' || container.atoms.length === 1) { - // Note that this responsible for handling any Tile or Attribute with just a single standalone word - // Also note that truly malformed tiles like ': a b c' from the ':' perspective will leave some fragments - // after the insertion, but that is unavoidable so we don't accidently consume code the user wants. - return this.postProcessTileColonAtom(atom, container, tile); - } - - if (container.firstAtom.symbol !== ':') { - return atom.symbol === ';' ? this.postProcessTileProximityParent(pos, container, tile) : this; - } - - if (container.atoms.length === 2 && container.atoms[1] === atom) { - // Recycle the work from 1st atom processor by shifting the context left because it can also handle a 2-part malformed tile - const clone = this.postProcessTileColonAtom(container.firstAtom, container, tile); - return clone; - } - - // If none of the above are true, then just replace the dcl fragment - const clone = new CompletionItemDcl(this); - clone.range = atom.range; - return clone; - } - - - postProcessTileColonAtom(atom: IDclFragment, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - if (container.atoms.some(x => x.symbol === '{' || x.symbol === '}')) { - return this; // if this is semi-wellFormed, then keep it simple - } - - const shared = tile.flatten().filter(x => x.line === atom.line); - - if (shared.length === 1) { - return this.postProcessTileColonAtomSimple(atom); - } else if (container.length <= 2) { - return this.postProcessTileColonAtomComplex(atom, container, shared); - } - return this; - } - - postProcessTileColonAtomSimple(atom: IDclFragment) : CompletionItemDcl { - const clone = new CompletionItemDcl(this); - if (atom.symbol === ':') { - clone.additionalTextEdits = [new TextEdit(atom.range, '')]; - } else { - clone.range = atom.range; - } - clone.insertText = this.needsLF() - ? new SnippetString(`: ${this.label} {\n\t$0\n}`) - : new SnippetString(`: ${this.label} { $0 }`); - return clone; - } - - postProcessTileColonAtomComplex(atom: IDclFragment, container: IDclContainer, shared: IDclFragment[]) : CompletionItemDcl { - const clone = new CompletionItemDcl(this); - const edits: Array = []; - - if (atom.symbol === ':') { - edits.push(new TextEdit(atom.range, '')); - } - - if (shared.length !== container.length) { - //const indent = shared.some(x => x.symbol === '}' && x.flatIndex < atom.flatIndex) ? '' : '\t'; - const indent = shared.some(x => x.symbol === '{' && shared.every(y => y.symbol !== '}')) ? '\t' : ''; - clone.insertText = this.needsLF() - ? new SnippetString(`\n${indent}: ${this.label} {\n\t${indent}$0\n${indent}}`) - : new SnippetString(`\n${indent}: ${this.label} { $0 }`); - } else if (this.needsLF()) { - clone.insertText = new SnippetString(`: ${this.label} {\n\t$0\n}`); - } else { - clone.insertText = new SnippetString(`: ${this.label} { $0 }`); - } - - if (container.atoms.length === 2 && container.atoms.indexOf(atom) === 0) { - edits.push(new TextEdit(new Range(atom.line, atom.column + 1, atom.line, container.atoms[1].column), '')); - clone.range = container.lastAtom.range; - } - - clone.additionalTextEdits = edits; - return clone; - } - // #endregion - - - - - - - - - - private postProcessTileProximityParent(pos: Position, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - // Context = Position is NOT literally inside the container, but could may be touching a partial or well-formed container. - // Entry into this method qualified by (container.lastAtom.rank < posRank) - - const shared = tile.flatten().filter(x => x.line === pos.line); - const clone = new CompletionItemDcl(this); - - if (shared.length === 0) { - clone.insertText = this.needsLF() - ? new SnippetString(`: ${this.label} {\n\t$0\n}`) - : new SnippetString(`: ${this.label} { $0 }`); - return clone; - } - - if (container.length <= 2) { - if (container.firstAtom.symbol === ':') { - clone.additionalTextEdits = [new TextEdit(this.getConsumeRange(container.firstAtom, pos), '')]; - } else { - clone.range = this.getConsumeRange(container.firstAtom, pos); - } - } - - const indent = shared.some(x => x.symbol === '{' && shared.every(y => y.symbol !== '}')) ? '\t' : ''; - const leadLF = shared.length > container.length - || container.isWellFormed - || shared.some(x => x.symbol === '}') - || (getPositionRank(container.lastAtom.range.end) === getPositionRank(pos) && container.lastAtom.symbol === ';') - ? '\n' : ''; - - clone.insertText = this.needsLF() - ? new SnippetString(`${leadLF}${indent}: ${this.label} {\n\t${indent}$0\n${indent}}`) - : new SnippetString(`${leadLF}${indent}: ${this.label} { $0 }`); - - return clone; - } - - private postProcessTilePosition(pos: Position, container: IDclContainer, tile: DclTile) : CompletionItemDcl { - // Context = Position is actually inside the container and not just a proximity "touch" hit - // Could be the inner most portion of : tile { $0 } on its own or shared line - - const posRank = getPositionRank(pos); - const shared = tile.flatten().filter(x => x.line === pos.line); - if (shared.length > 0 && container.asTile && container.asTile.openBracketAtom.rank > posRank) { - return this; - } - - const clone = new CompletionItemDcl(this); - if (shared.length === 0 || shared.some(x => x.rank > posRank)) { - clone.insertText = this.needsLF() - ? new SnippetString(`: ${this.label} {\n\t$0\n}`) - : new SnippetString(`: ${this.label} { $0 }`); - } else if (container === tile) { - clone.insertText = this.needsLF() - ? new SnippetString(`\n\t: ${this.label} {\n\t\t$0\n\t}`) - : new SnippetString(`\n\t: ${this.label} { $0 }`); - } - - return clone; - } + constructor(source: string | CompletionItemLabel | CompletionItemDcl) { + if (source instanceof CompletionItemDcl) { + super(source.label, source.kind); + this.documentation = source.documentation; + this.sortText = source.sortText; + + if (source.detail) { + this.detail = source.detail; + } + + if (source.insertText instanceof SnippetString) { + this.insertText = new SnippetString(source.insertText.value); + } else { + this.insertText = source.insertText; + } + } else { + super(source); + } + } + + + + + + // #region Helpers + private getConsumeRange(startAtom: IDclFragment, pos: Position) { + return new Range(new Position(startAtom.line, startAtom.column), pos); + } + + private needsLF(): boolean { + return this.kind === Kinds.TILE + && (CompletionLibraryDcl.Instance.tilesWithChildren.includes(this.label.toString()) + || this.label === 'paragraph' + || this.label === 'concatenation'); + } + // #endregion Helpers + + + + + // #region primary handlers + public postProcess(pos: Position, atom: IDclFragment, directParent: IDclContainer, tile: DclTile): CompletionItemDcl { + // Currently doesn't handle ": *nothing* { }" but all the way back to the suggestion engine. + if (this.kind === Kinds.ENUM || this.kind === Kinds.PRIMITIVE) { + return this.postProcessEnum(pos, atom, directParent, tile); + } + + if (this.kind === Kinds.TILE) { + return this.postProcessTile(pos, atom, directParent, tile); + } + + if (this.kind === Kinds.ATTRIBUTE) { + return this.postProcessAttribute(pos, atom, directParent, tile); + } + + if (this.label.toString().startsWith('{') && directParent?.length === 2) { + const clone = new CompletionItemDcl(this); + const parentRange = directParent.atoms[1].range; + clone.range = new Range(pos.line, pos.character, parentRange.end.line, parentRange.end.character); + if (clone.insertText instanceof SnippetString) { + clone.insertText.value = `${directParent.atoms[1].symbol} ${clone.insertText.value}`; + } + return clone; + } + + if (atom?.symbol === '/') { + const clone = new CompletionItemDcl(this); + clone.range = atom.range; + return clone; + } + + return this; + } + //eslint-disable-next-line + private postProcessAttribute(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile): CompletionItemDcl { + + if ((atom?.symbol === ';' || atom?.symbol === '{') && pos.character > atom.column) { + // contextually this happens when closing 1 attribute and can now start defining another + const clone = new CompletionItemDcl(this); + clone.insertText = ` ${clone.insertText} =`; + return clone; + } + + if (atom && container.atoms[0] === atom) { + const clone = new CompletionItemDcl(this); + clone.range = atom.range; + if (container.asAttribute?.delineator?.symbol !== '=') { + clone.insertText = `${clone.insertText} =`; + } + return clone; + } + + return this; + } + //eslint-disable-next-line + private postProcessEnum(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile): CompletionItemDcl { + // Note: if this is an enum, then container can only be a known attribute type + + const clone = new CompletionItemDcl(this); + const closeAttribute = (atom && container.atoms[3]?.symbol !== ';') || (!atom && container.atoms[2]?.symbol !== ';'); + + if (closeAttribute) { + if (clone.insertText instanceof SnippetString) { + clone.insertText.value += ';'; + } else { + clone.insertText += ';'; + } + } + + if (atom) { + clone.range = atom.range; + } + + return clone; + } + + private postProcessTile(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile): CompletionItemDcl { + const posRank = getPositionRank(pos); + if (!atom) { + if (container.lastAtom.rank < posRank) { + return this.postProcessTileProximityParent(pos, container, tile); + } else if (container.contains(pos)) { + return this.postProcessTilePosition(pos, container, tile); + } + } + + if (!container.contains(pos)) { + return this; // some kind of malformed arrangement + } else { + //debugger; // Impossible? If we have an atom, then then we should have a container containing that atom + } + + return this.postProcessTileWithAtom(pos, atom, container, tile); + } + // #endregion primary handlers + + + + + // #region Tile with Atom + private postProcessTileWithAtom(pos: Position, atom: IDclFragment, container: IDclContainer, tile: DclTile): CompletionItemDcl { + if (atom.symbol === ':' || container.atoms.length === 1) { + // Note that this responsible for handling any Tile or Attribute with just a single standalone word + // Also note that truly malformed tiles like ': a b c' from the ':' perspective will leave some fragments + // after the insertion, but that is unavoidable so we don't accidently consume code the user wants. + return this.postProcessTileColonAtom(atom, container, tile); + } + + if (container.firstAtom.symbol !== ':') { + return atom.symbol === ';' ? this.postProcessTileProximityParent(pos, container, tile) : this; + } + + if (container.atoms.length === 2 && container.atoms[1] === atom) { + // Recycle the work from 1st atom processor by shifting the context left because it can also handle a 2-part malformed tile + const clone = this.postProcessTileColonAtom(container.firstAtom, container, tile); + return clone; + } + + // If none of the above are true, then just replace the dcl fragment + const clone = new CompletionItemDcl(this); + clone.range = atom.range; + return clone; + } + + + postProcessTileColonAtom(atom: IDclFragment, container: IDclContainer, tile: DclTile): CompletionItemDcl { + if (container.atoms.some(x => x.symbol === '{' || x.symbol === '}')) { + return this; // if this is semi-wellFormed, then keep it simple + } + + const shared = tile.flatten().filter(x => x.line === atom.line); + + if (shared.length === 1) { + return this.postProcessTileColonAtomSimple(atom); + } else if (container.length <= 2) { + return this.postProcessTileColonAtomComplex(atom, container, shared); + } + return this; + } + + postProcessTileColonAtomSimple(atom: IDclFragment): CompletionItemDcl { + const clone = new CompletionItemDcl(this); + if (atom.symbol === ':') { + clone.additionalTextEdits = [new TextEdit(atom.range, '')]; + } else { + clone.range = atom.range; + } + clone.insertText = this.needsLF() + ? new SnippetString(`: ${this.label} {\n\t$0\n}`) + : new SnippetString(`: ${this.label} { $0 }`); + return clone; + } + + postProcessTileColonAtomComplex(atom: IDclFragment, container: IDclContainer, shared: IDclFragment[]): CompletionItemDcl { + const clone = new CompletionItemDcl(this); + const edits: Array = []; + + if (atom.symbol === ':') { + edits.push(new TextEdit(atom.range, '')); + } + + if (shared.length !== container.length) { + //const indent = shared.some(x => x.symbol === '}' && x.flatIndex < atom.flatIndex) ? '' : '\t'; + const indent = shared.some(x => x.symbol === '{' && shared.every(y => y.symbol !== '}')) ? '\t' : ''; + clone.insertText = this.needsLF() + ? new SnippetString(`\n${indent}: ${this.label} {\n\t${indent}$0\n${indent}}`) + : new SnippetString(`\n${indent}: ${this.label} { $0 }`); + } else if (this.needsLF()) { + clone.insertText = new SnippetString(`: ${this.label} {\n\t$0\n}`); + } else { + clone.insertText = new SnippetString(`: ${this.label} { $0 }`); + } + + if (container.atoms.length === 2 && container.atoms.indexOf(atom) === 0) { + edits.push(new TextEdit(new Range(atom.line, atom.column + 1, atom.line, container.atoms[1].column), '')); + clone.range = container.lastAtom.range; + } + + clone.additionalTextEdits = edits; + return clone; + } + // #endregion + + + + + + + + + + private postProcessTileProximityParent(pos: Position, container: IDclContainer, tile: DclTile): CompletionItemDcl { + // Context = Position is NOT literally inside the container, but could may be touching a partial or well-formed container. + // Entry into this method qualified by (container.lastAtom.rank < posRank) + + const shared = tile.flatten().filter(x => x.line === pos.line); + const clone = new CompletionItemDcl(this); + + if (shared.length === 0) { + clone.insertText = this.needsLF() + ? new SnippetString(`: ${this.label} {\n\t$0\n}`) + : new SnippetString(`: ${this.label} { $0 }`); + return clone; + } + + if (container.length <= 2) { + if (container.firstAtom.symbol === ':') { + clone.additionalTextEdits = [new TextEdit(this.getConsumeRange(container.firstAtom, pos), '')]; + } else { + clone.range = this.getConsumeRange(container.firstAtom, pos); + } + } + + const indent = shared.some(x => x.symbol === '{' && shared.every(y => y.symbol !== '}')) ? '\t' : ''; + const leadLF = shared.length > container.length + || container.isWellFormed + || shared.some(x => x.symbol === '}') + || (getPositionRank(container.lastAtom.range.end) === getPositionRank(pos) && container.lastAtom.symbol === ';') + ? '\n' : ''; + + clone.insertText = this.needsLF() + ? new SnippetString(`${leadLF}${indent}: ${this.label} {\n\t${indent}$0\n${indent}}`) + : new SnippetString(`${leadLF}${indent}: ${this.label} { $0 }`); + + return clone; + } + + private postProcessTilePosition(pos: Position, container: IDclContainer, tile: DclTile): CompletionItemDcl { + // Context = Position is actually inside the container and not just a proximity "touch" hit + // Could be the inner most portion of : tile { $0 } on its own or shared line + + const posRank = getPositionRank(pos); + const shared = tile.flatten().filter(x => x.line === pos.line); + if (shared.length > 0 && container.asTile && container.asTile.openBracketAtom.rank > posRank) { + return this; + } + + const clone = new CompletionItemDcl(this); + if (shared.length === 0 || shared.some(x => x.rank > posRank)) { + clone.insertText = this.needsLF() + ? new SnippetString(`: ${this.label} {\n\t$0\n}`) + : new SnippetString(`: ${this.label} { $0 }`); + } else if (container === tile) { + clone.insertText = this.needsLF() + ? new SnippetString(`\n\t: ${this.label} {\n\t\t$0\n\t}`) + : new SnippetString(`\n\t: ${this.label} { $0 }`); + } + + return clone; + } diff --git a/extension/src/completion/completionProviderDcl.ts b/extension/src/completion/completionProviderDcl.ts index fc19183d..11405525 100644 --- a/extension/src/completion/completionProviderDcl.ts +++ b/extension/src/completion/completionProviderDcl.ts @@ -1,12 +1,12 @@ -import {ReadonlyDocument} from "../project/readOnlyDocument"; -import {CompletionContext, Position, Range} from "vscode"; -import {DclAttribute} from "../astObjects/dclAttribute"; -import {DclTile} from "../astObjects/dclTile"; -import {IDclContainer, IDclFragment} from "../astObjects/dclInterfaces"; -import {CompletionItemDcl} from "./completionItemDcl"; -import {AutoLispExt} from "../context"; -import {CompletionLibraryDcl, SnippetKeys} from "./completionLibraryDcl"; -import {Kinds} from './completionItemDcl'; +import { ReadonlyDocument } from "../project/readOnlyDocument"; +import { CompletionContext, Position } from "vscode"; +import { DclAttribute } from "../astObjects/dclAttribute"; +import { DclTile } from "../astObjects/dclTile"; +import { IDclContainer, IDclFragment } from "../astObjects/dclInterfaces"; +import { CompletionItemDcl } from "./completionItemDcl"; +import { AutoLispExt } from "../context"; +import { CompletionLibraryDcl, SnippetKeys } from "./completionLibraryDcl"; +import { Kinds } from './completionItemDcl'; import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); @@ -20,275 +20,251 @@ const getPositionRank = (pos: Position): number => pos.line * 1000 + pos.charact // Note: the 'enhance' boolean exists for testing purposes and is used to toggle custom insertions On/Off. export function invokeCompletionProviderDcl(doc: ReadonlyDocument, pos: Position, context: CompletionContext, enhance: boolean = true): Array { - const lib = CompletionLibraryDcl.Instance; - const tile = doc.documentDclContainer.getParentFrom(pos, true)?.asTile; - const directParent = doc.documentDclContainer.getImpliedParent(pos); - const atom = doc.documentDclContainer.getAtomFromPosition(pos); - - if (atom?.symbol === '/') { - return [lib.dclSnippets.get(SnippetKeys.COMMENTLF).postProcess(pos, atom, directParent, tile)]; - } - - if (atom?.isComment) { - return null; - } - - if (atom?.isString) { - return stringProcessing(atom, directParent, pos, context); - } - - if (!tile || tile === doc.documentDclContainer) { - // cursor is in the document root and we can only suggest a DIALOG snippet - return [lib.dclSnippets.get(SnippetKeys.DIALOG), lib.dclSnippets.get(SnippetKeys.COMMENTLF)]; - } - - const results = directParent instanceof DclAttribute - ? attributeHandling(pos, atom, directParent.asAttribute, tile) - : directParent instanceof DclTile - ? tileHandling(pos, atom, directParent.asTile, tile) - : null; - - if (results && enhance && results.length > 0) { - // enhance boolean allows testing of the provider code without triggering the post processing - return results.map(item => item.postProcess(pos, atom, directParent, tile)); - } - - return results; + const lib = CompletionLibraryDcl.Instance; + const tile = doc.documentDclContainer.getParentFrom(pos, true)?.asTile; + const directParent = doc.documentDclContainer.getImpliedParent(pos); + const atom = doc.documentDclContainer.getAtomFromPosition(pos); + + if (atom?.symbol === '/') { + return [lib.dclSnippets.get(SnippetKeys.COMMENTLF).postProcess(pos, atom, directParent, tile)]; + } + + if (atom?.isComment) { + return null; + } + + if (atom?.isString) { + return stringProcessing(atom, directParent, pos, context); + } + + if (!tile || tile === doc.documentDclContainer) { + // cursor is in the document root and we can only suggest a DIALOG snippet + return [lib.dclSnippets.get(SnippetKeys.DIALOG), lib.dclSnippets.get(SnippetKeys.COMMENTLF)]; + } + + const results = directParent instanceof DclAttribute + ? attributeHandling(pos, atom, directParent.asAttribute, tile) + : directParent instanceof DclTile + ? tileHandling(pos, atom, directParent.asTile, tile) + : null; + + if (results && enhance && results.length > 0) { + // enhance boolean allows testing of the provider code without triggering the post processing + return results.map(item => item.postProcess(pos, atom, directParent, tile)); + } + + return results; } function getTilesAndAttributes(tile: DclTile, pos: Position, skipAttributes: boolean = false) { - const lib = CompletionLibraryDcl.Instance; - const lowerKey = tile.tileTypeAtom?.symbol.toLowerCase() ?? ''; - const attributes = skipAttributes ? [] : getApplicableAttributes(tile, pos); - const result = attributes.map(x => lib.dclAttributes.get(x)).filter(y => y); - - if (lowerKey === 'paragraph') { - return result.concat([lib.dclTiles.get('concatenation'), lib.dclTiles.get('text_part')]); - } - - if (lowerKey === 'concatenation') { - return result.concat([lib.dclTiles.get('text_part')]); - } - - return lowerKey === 'dialog' || lib.tilesWithChildren.includes(lowerKey) - ? result.concat(lib.allTiles) - : !lib.dclTiles.has(lowerKey) && !lib.dclAttributes.has(lowerKey) - ? result.concat(lib.allTiles) - : result; + const lib = CompletionLibraryDcl.Instance; + const lowerKey = tile.tileTypeAtom?.symbol.toLowerCase() ?? ''; + const attributes = skipAttributes ? [] : getApplicableAttributes(tile, pos); + const result = attributes.map(x => lib.dclAttributes.get(x)).filter(y => y); + + if (lowerKey === 'paragraph') { + return result.concat([lib.dclTiles.get('concatenation'), lib.dclTiles.get('text_part')]); + } + + if (lowerKey === 'concatenation') { + return result.concat([lib.dclTiles.get('text_part')]); + } + + return lowerKey === 'dialog' || lib.tilesWithChildren.includes(lowerKey) + ? result.concat(lib.allTiles) + : !lib.dclTiles.has(lowerKey) && !lib.dclAttributes.has(lowerKey) + ? result.concat(lib.allTiles) + : result; } -function getApplicableAttributes(tile: DclTile, pos: Position) : Array { - if (!tile.tileTypeAtom) { - return []; - } - const posNormal = getPositionRank(pos); - const lowerKey = tile.tileTypeAtom.symbol.toLowerCase(); - const helpLib = AutoLispExt.WebHelpLibrary; - const attributes = helpLib.dclTiles.get(lowerKey)?.attributes ?? []; - const existing: Array = []; - - for (let i = 0; i < tile.atoms.length; i++) { - const item = tile.atoms[i]; - if (item instanceof DclAttribute) { - existing.push(item.firstAtom.symbol.toLowerCase()); - } - - if (item.rank > posNormal) { - continue; - } - - if (item instanceof DclTile && item.rank < posNormal) { - // If a DCL Tile appears before the cursor position, then attribute declarations should no longer be applicable - return []; - } - } - - return attributes.filter(x => !existing.includes(x.toLowerCase())); +function getApplicableAttributes(tile: DclTile, pos: Position): Array { + if (!tile.tileTypeAtom) { + return []; + } + const posNormal = getPositionRank(pos); + const lowerKey = tile.tileTypeAtom.symbol.toLowerCase(); + const helpLib = AutoLispExt.WebHelpLibrary; + const attributes = helpLib.dclTiles.get(lowerKey)?.attributes ?? []; + const existing: Array = []; + + for (let i = 0; i < tile.atoms.length; i++) { + const item = tile.atoms[i]; + if (item instanceof DclAttribute) { + existing.push(item.firstAtom.symbol.toLowerCase()); + } + + if (item.rank > posNormal) { + continue; + } + + if (item instanceof DclTile && item.rank < posNormal) { + // If a DCL Tile appears before the cursor position, then attribute declarations should no longer be applicable + return []; + } + } + + return attributes.filter(x => !existing.includes(x.toLowerCase())); } - +//eslint-disable-next-line function stringProcessing(atom: IDclFragment, directParent: IDclContainer, pos: Position, context: CompletionContext): Array { - const index = directParent.atoms.indexOf(atom); - if (directParent.atoms[index + 1]?.symbol !== ';' && pos.character === atom.range.end.character - 1) { - const localPrimitive = localize("autolispext.commands.dclcompletion.provider.Primitive", "Primitive"); - const localClosesStr = localize("autolispext.commands.dclcompletion.provider.ClosesString", "Closes the string"); - const result = new CompletionItemDcl(`${atom.symbol};`); - result.insertText = `${atom.symbol};`; - result.detail = localPrimitive; - result.documentation = localClosesStr; - result.range = atom.range; - result.kind = Kinds.PRIMITIVE; - return [result]; - } - - // TODO: It may be a nice feature to auto escape double quotes in the middle or close the string if at the end. - // TODO: you could detect the ACTION strings and provide some degree of lisp auto completion - return null; + const index = directParent.atoms.indexOf(atom); + if (directParent.atoms[index + 1]?.symbol !== ';' && pos.character === atom.range.end.character - 1) { + const localPrimitive = localize("autolispext.commands.dclcompletion.provider.Primitive", "Primitive"); + const localClosesStr = localize("autolispext.commands.dclcompletion.provider.ClosesString", "Closes the string"); + const result = new CompletionItemDcl(`${atom.symbol};`); + result.insertText = `${atom.symbol};`; + result.detail = localPrimitive; + result.documentation = localClosesStr; + result.range = atom.range; + result.kind = Kinds.PRIMITIVE; + return [result]; + } + + // TODO: It may be a nice feature to auto escape double quotes in the middle or close the string if at the end. + // TODO: you could detect the ACTION strings and provide some degree of lisp auto completion + return null; } - - - - - - - - - - - function tileHandling(pos: Position, atom: IDclFragment, directParent: IDclContainer, tile: DclTile): Array { - // Note: malformed tiles often masquerade as Attributes instead of Tiles - - const lib = CompletionLibraryDcl.Instance; - const posRank = getPositionRank(pos); - - if (atom) { - if (directParent.atoms[0] === atom || directParent.atoms[1] === atom) { - return getTilesAndAttributes(tile, pos, true); - } - - if (atom.symbol === '{' && atom.rank < posRank) { - return getTilesAndAttributes(directParent.asTile, pos); - } - - return null; - } - - const wellFormed = directParent.firstAtom.symbol === ':' && directParent.asTile?.openBracketAtom?.symbol === '{'; - if (directParent.isWellFormed && posRank < directParent.asTile.openBracketAtom.rank) { - return null; // tile is already well-formed and atom cannot be null - } - if (!directParent.isWellFormed && directParent.contains(pos)) { - return getTilesAndAttributes(directParent.asTile, pos); - } - return getTilesAndAttributes(tile, pos); + // Note: malformed tiles often masquerade as Attributes instead of Tiles + + //const lib = CompletionLibraryDcl.Instance; + const posRank = getPositionRank(pos); + + if (atom) { + if (directParent.atoms[0] === atom || directParent.atoms[1] === atom) { + return getTilesAndAttributes(tile, pos, true); + } + + if (atom.symbol === '{' && atom.rank < posRank) { + return getTilesAndAttributes(directParent.asTile, pos); + } + + return null; + } + + //const wellFormed = directParent.firstAtom.symbol === ':' && directParent.asTile?.openBracketAtom?.symbol === '{'; + if (directParent.isWellFormed && posRank < directParent.asTile.openBracketAtom.rank) { + return null; // tile is already well-formed and atom cannot be null + } + if (!directParent.isWellFormed && directParent.contains(pos)) { + return getTilesAndAttributes(directParent.asTile, pos); + } + return getTilesAndAttributes(tile, pos); } // TODO, the dialog tile is now too far up the chain and not swhowing any attribute suggestions... ever.... function malformedTileHandlerNoAtom(pos: Position, directParent: DclAttribute, tile: DclTile): Array { - // Triggered by Attribute with ':' as the first character + // Triggered by Attribute with ':' as the first character - const lib = CompletionLibraryDcl.Instance; + const lib = CompletionLibraryDcl.Instance; - if (directParent.length === 1) { - return getTilesAndAttributes(tile, pos, directParent.firstAtom.symbol === ':'); - } + if (directParent.length === 1) { + return getTilesAndAttributes(tile, pos, directParent.firstAtom.symbol === ':'); + } - if (directParent.length === 2) { - const key = directParent.atoms[1].symbol.toLowerCase(); - const attSource = AutoLispExt.WebHelpLibrary.dclTiles.get(key)?.attributes; - if (attSource?.some(x => x.toLowerCase().includes('children'))) { - return [lib.dclSnippets.get(SnippetKeys.BRACKETLF), lib.dclSnippets.get(SnippetKeys.BRACKET)]; - } - return [lib.dclSnippets.get(SnippetKeys.BRACKET)]; - } + if (directParent.length === 2) { + const key = directParent.atoms[1].symbol.toLowerCase(); + const attSource = AutoLispExt.WebHelpLibrary.dclTiles.get(key)?.attributes; + if (attSource?.some(x => x.toLowerCase().includes('children'))) { + return [lib.dclSnippets.get(SnippetKeys.BRACKETLF), lib.dclSnippets.get(SnippetKeys.BRACKET)]; + } + return [lib.dclSnippets.get(SnippetKeys.BRACKET)]; + } - return null; + return null; } function malformedTileHandlerHasAtom(atom: IDclFragment, pos: Position, directParent: DclAttribute, tile: DclTile): Array { - // Triggered by Attribute with ':' as the first character + // Triggered by Attribute with ':' as the first character - const lib = CompletionLibraryDcl.Instance; + const lib = CompletionLibraryDcl.Instance; - if (directParent.atoms.indexOf(atom) < 2) { - return tileHandling(pos, atom, directParent, tile); - } + if (directParent.atoms.indexOf(atom) < 2) { + return tileHandling(pos, atom, directParent, tile); + } - return [lib.dclSnippets.get(SnippetKeys.BRACKETLF)]; + return [lib.dclSnippets.get(SnippetKeys.BRACKETLF)]; } - - - - - - - - - function attributeHandling(pos: Position, atom: IDclFragment, directParent: DclAttribute, tile: DclTile): Array { - if (directParent.atoms[0].symbol === ':') { - return !atom - ? malformedTileHandlerNoAtom(pos, directParent, tile) - : malformedTileHandlerHasAtom(atom, pos, directParent, tile); - } - - if (!atom) { - if (directParent.isWellFormed && !directParent.contains(pos)) { - // The direct parent is not in scope for suggestions - return getTilesAndAttributes(tile, pos); - } - - return attributeHandlerNoAtom(pos, directParent); - } - - return attributeHandlerWithAtom(atom, directParent, pos, tile); + if (directParent.atoms[0].symbol === ':') { + return !atom + ? malformedTileHandlerNoAtom(pos, directParent, tile) + : malformedTileHandlerHasAtom(atom, pos, directParent, tile); + } + + if (!atom) { + if (directParent.isWellFormed && !directParent.contains(pos)) { + // The direct parent is not in scope for suggestions + return getTilesAndAttributes(tile, pos); + } + + return attributeHandlerNoAtom(pos, directParent); + } + + return attributeHandlerWithAtom(atom, directParent, pos, tile); } - function attributeHandlerNoAtom(pos: Position, directParent: DclAttribute): Array { - // Note: malformed tiles often masquerade as Attributes instead of Tiles - - const lib = CompletionLibraryDcl.Instance; - const posNormal = getPositionRank(pos); - let previous = -1; - for (let i = 0; i < directParent.atoms.length; i++) { - const atom = directParent.atoms[i]; - if (atom.rank > posNormal) { - previous = i; - break; - } - } - - if (previous === 1 || directParent.length === 1) { - if (directParent.atoms[previous]?.symbol === '=') { - return null; - } - return [lib.dclSnippets.get(SnippetKeys.EQUAL)]; - } - - if (directParent.length === 2 || previous === 2) { - return !directParent.isWellFormed ? lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()) : null; - } - - return null; + // Note: malformed tiles often masquerade as Attributes instead of Tiles + + const lib = CompletionLibraryDcl.Instance; + const posNormal = getPositionRank(pos); + let previous = -1; + for (let i = 0; i < directParent.atoms.length; i++) { + const atom = directParent.atoms[i]; + if (atom.rank > posNormal) { + previous = i; + break; + } + } + + if (previous === 1 || directParent.length === 1) { + if (directParent.atoms[previous]?.symbol === '=') { + return null; + } + return [lib.dclSnippets.get(SnippetKeys.EQUAL)]; + } + + if (directParent.length === 2 || previous === 2) { + return !directParent.isWellFormed ? lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()) : null; + } + + return null; } - - function attributeHandlerWithAtom(atom: IDclFragment, directParent: DclAttribute, pos: Position, tile: DclTile) { - const lib = CompletionLibraryDcl.Instance; - if (atom.isNumber) { - return null; - } + const lib = CompletionLibraryDcl.Instance; + if (atom.isNumber) { + return null; + } - if (atom.symbol === ';' && pos.character === atom.column) { - return lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()); - } - - if (atom.symbol === ';' && pos.character > atom.column) { - return getTilesAndAttributes(tile, pos); - } + if (atom.symbol === ';' && pos.character === atom.column) { + return lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()); + } - if (atom.symbol === '=') { - return null; // force them to put a space between the setter symbol - } + if (atom.symbol === ';' && pos.character > atom.column) { + return getTilesAndAttributes(tile, pos); + } - if (directParent.asAttribute?.delineator?.symbol === '=' && directParent.asAttribute.delineator.range.end.character < pos.character) { - return lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()); - } + if (atom.symbol === '=') { + return null; // force them to put a space between the setter symbol + } - if (directParent.atoms.includes(atom)) { - if (directParent.isWellFormed && atom.rank === directParent.rank) { - return getApplicableAttributes(tile, pos).map(x => lib.dclAttributes.get(x)).filter(y => y); - } + if (directParent.asAttribute?.delineator?.symbol === '=' && directParent.asAttribute.delineator.range.end.character < pos.character) { + return lib.dclEnums.get(directParent.atoms[0].symbol.toLowerCase()); + } - return getTilesAndAttributes(tile, pos); - } + if (directParent.atoms.includes(atom)) { + if (directParent.isWellFormed && atom.rank === directParent.rank) { + return getApplicableAttributes(tile, pos).map(x => lib.dclAttributes.get(x)).filter(y => y); + } - return null; + return getTilesAndAttributes(tile, pos); + } -} + return null; +} \ No newline at end of file diff --git a/extension/src/context.ts b/extension/src/context.ts index 70a8720a..0dad6544 100644 --- a/extension/src/context.ts +++ b/extension/src/context.ts @@ -2,12 +2,12 @@ import * as vscode from "vscode"; import * as resources from "./resources"; import { Disposable } from 'vscode-languageclient'; import { DocumentManager } from './documents'; -import {DocumentServices} from "./services/documentServices"; +import { Selectors } from "./services/documentServices"; import { WebHelpLibrarySingleton } from './help/documentationLibrary'; let _instance: ContextManager; -export class ContextManager{ +export class ContextManager { private _ctx: vscode.ExtensionContext; private _docManager: DocumentManager; private _init: boolean; @@ -24,37 +24,37 @@ export class ContextManager{ } return _instance = new ContextManager(); } - - get Context(): vscode.ExtensionContext { - return this._ctx; + + get Context(): vscode.ExtensionContext { + return this._ctx; } - get Documents(): DocumentManager { + get Documents(): DocumentManager { return this._docManager; } - get Selectors(): typeof DocumentServices.Selectors { - return DocumentServices.Selectors; + get Selectors(): typeof Selectors { + return Selectors; } - get AllSelectors(): string[] { - return [DocumentServices.Selectors.LSP, DocumentServices.Selectors.DCL, DocumentServices.Selectors.PRJ]; + get AllSelectors(): string[] { + return [Selectors.LSP, Selectors.DCL, Selectors.PRJ]; } get Subscriptions(): Disposable[] { - if (this._temp.length > 0 && this._ctx){ + if (this._temp.length > 0 && this._ctx) { this._ctx.subscriptions.push(...this._temp); this._temp.length = 0; } return this._ctx ? this._ctx.subscriptions : this._temp; } - get ExtPath(): string { - return this._ctx ? this._ctx.extensionPath : ""; + get ExtPath(): string { + return this._ctx ? this._ctx.extensionPath : ""; } - get Resources() { + get Resources() { return resources; } get WebHelpLibrary() { return WebHelpLibrarySingleton.Instance; } - + initialize(context: vscode.ExtensionContext): void { if (!this._init) { this._ctx = context; diff --git a/extension/src/debug.ts b/extension/src/debug.ts index 33f37992..12749116 100644 --- a/extension/src/debug.ts +++ b/extension/src/debug.ts @@ -12,8 +12,8 @@ import { ProcessPathCache } from './process/processCache'; import { DiagnosticsCtrl } from './diagnosticsCtrl'; import { getExtensionSettingString } from './resources'; -let strNoADPerr: string = localize("autolispext.debug.nodap", "doesn’t exist. Verify that the file exists in the same folder as that for the product specified in the launch.json file."); -let strNoACADerr: string = localize("autolispext.debug.noacad", "doesn’t exist. Verify and correct the folder path to the product executable."); +const strNoADPerr: string = localize("autolispext.debug.nodap", "doesn’t exist. Verify that the file exists in the same folder as that for the product specified in the launch.json file."); +const strNoACADerr: string = localize("autolispext.debug.noacad", "doesn’t exist. Verify and correct the folder path to the product executable."); let acadPid2Attach = -1; const attachCfgName = 'AutoLISP Debug: Attach'; @@ -23,238 +23,243 @@ const launchCfgType = 'launchlisp'; const attachCfgRequest = 'attach'; export function setDefaultAcadPid(pid: number) { - acadPid2Attach = pid; + acadPid2Attach = pid; } -const LAUNCH_PROC:string = 'debug.LaunchProgram'; -const LAUNCH_PARM:string = 'debug.LaunchParameters'; -const ATTACH_PROC:string = 'debug.AttachProcess'; +const LAUNCH_PROC: string = 'debug.LaunchProgram'; +const LAUNCH_PARM: string = 'debug.LaunchParameters'; +const ATTACH_PROC: string = 'debug.AttachProcess'; class LaunchDebugAdapterExecutableFactory - implements vscode.DebugAdapterDescriptorFactory { - createDebugAdapterDescriptor( - _session: vscode.DebugSession, - executable: vscode.DebugAdapterExecutable | undefined - ): vscode.ProviderResult { - let lispadapterpath = ProcessPathCache.globalLispAdapterPath; - let productStartCommand = ProcessPathCache.globalProductPath; - let productStartParameter = ProcessPathCache.globalParameter; - - let args = ["--", productStartCommand, productStartParameter]; - if (productStartParameter == null) args = ["--", productStartCommand]; - return new vscode.DebugAdapterExecutable(lispadapterpath, args); - } + implements vscode.DebugAdapterDescriptorFactory { + createDebugAdapterDescriptor( + //eslint-disable-next-line + _session: vscode.DebugSession, + //eslint-disable-next-line + executable: vscode.DebugAdapterExecutable | undefined + ): vscode.ProviderResult { + const lispadapterpath = ProcessPathCache.globalLispAdapterPath; + const productStartCommand = ProcessPathCache.globalProductPath; + const productStartParameter = ProcessPathCache.globalParameter; + + let args = ["--", productStartCommand, productStartParameter]; + if (productStartParameter == null) args = ["--", productStartCommand]; + return new vscode.DebugAdapterExecutable(lispadapterpath, args); + } } class AttachDebugAdapterExecutableFactory - implements vscode.DebugAdapterDescriptorFactory { - createDebugAdapterDescriptor( - _session: vscode.DebugSession, - executable: vscode.DebugAdapterExecutable | undefined - ): vscode.ProviderResult { - let lispadapterpath = ProcessPathCache.globalLispAdapterPath; - - return new vscode.DebugAdapterExecutable(lispadapterpath); - } + implements vscode.DebugAdapterDescriptorFactory { + createDebugAdapterDescriptor( + //eslint-disable-next-line + _session: vscode.DebugSession, + //eslint-disable-next-line + executable: vscode.DebugAdapterExecutable | undefined + ): vscode.ProviderResult { + const lispadapterpath = ProcessPathCache.globalLispAdapterPath; + + return new vscode.DebugAdapterExecutable(lispadapterpath); + } } export function registerLispDebugProviders(context: vscode.ExtensionContext) { - // register a configuration provider for 'lisp' launch debug type - const launchProvider = new LispLaunchConfigurationProvider(); - context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider(launchCfgType, launchProvider)); - context.subscriptions.push(launchProvider); - - //register a configuration provider for 'lisp' attach debug type - const attachProvider = new LispAttachConfigurationProvider(); - context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider(attachCfgType, attachProvider)); - context.subscriptions.push(attachProvider); - - //----------------------------------------------------------- - //4. debug adapter - //----------------------------------------------------------- - const attachDapFactory = new AttachDebugAdapterExecutableFactory(); - const lauchDapFactory = new LaunchDebugAdapterExecutableFactory(); - context.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory(attachCfgType, attachDapFactory)); - context.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory(launchCfgType, lauchDapFactory)); - - //register attach failed custom message - context.subscriptions.push(vscode.debug.onDidReceiveDebugSessionCustomEvent((event) => { - console.log(event); - if (event.session && (event.session.type === launchCfgType || event.session.type === attachCfgType)) { - if (event.event === "runtimeerror") { - /* - struct runtimeerror - { - string file; - int startline; - int startcol; - int endline; - int endcol; - string message; - } - */ - DiagnosticsCtrl.addDocumentDiagnostics(event.body.file, event.body.message, event.body.startline, event.body.startcol, event.body.endline, event.body.endcol); - } - else if (event.event === "clearcache") { - setDefaultAcadPid(-1); - } - else if (event.event === "acadnosupport") { - let msg = localize("autolispext.debug.acad.nosupport", - "This instance of AutoCAD doesn’t support debugging AutoLISP files, use a release later than AutoCAD 2020."); - vscode.window.showErrorMessage(msg); - } - else if (event.event === "dgbfatalerr") { - /* - struct dgbfatalerr - { - string message; - } - */ - let msg = event.body.message; - vscode.window.showErrorMessage(msg); - } - } - })); + // register a configuration provider for 'lisp' launch debug type + const launchProvider = new LispLaunchConfigurationProvider(); + context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider(launchCfgType, launchProvider)); + context.subscriptions.push(launchProvider); + + //register a configuration provider for 'lisp' attach debug type + const attachProvider = new LispAttachConfigurationProvider(); + context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider(attachCfgType, attachProvider)); + context.subscriptions.push(attachProvider); + + //----------------------------------------------------------- + //4. debug adapter + //----------------------------------------------------------- + const attachDapFactory = new AttachDebugAdapterExecutableFactory(); + const lauchDapFactory = new LaunchDebugAdapterExecutableFactory(); + context.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory(attachCfgType, attachDapFactory)); + context.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory(launchCfgType, lauchDapFactory)); + + //register attach failed custom message + context.subscriptions.push(vscode.debug.onDidReceiveDebugSessionCustomEvent((event) => { + console.log(event); + if (event.session && (event.session.type === launchCfgType || event.session.type === attachCfgType)) { + if (event.event === "runtimeerror") { + /* + struct runtimeerror + { + string file; + int startline; + int startcol; + int endline; + int endcol; + string message; + } + */ + DiagnosticsCtrl.addDocumentDiagnostics(event.body.file, event.body.message, event.body.startline, event.body.startcol, event.body.endline, event.body.endcol); + } + else if (event.event === "clearcache") { + setDefaultAcadPid(-1); + } + else if (event.event === "acadnosupport") { + const msg = localize("autolispext.debug.acad.nosupport", + "This instance of AutoCAD doesn’t support debugging AutoLISP files, use a release later than AutoCAD 2020."); + vscode.window.showErrorMessage(msg); + } + else if (event.event === "dgbfatalerr") { + /* + struct dgbfatalerr + { + string message; + } + */ + const msg = event.body.message; + vscode.window.showErrorMessage(msg); + } + } + })); } class LispLaunchConfigurationProvider implements vscode.DebugConfigurationProvider { - private _server?: Net.Server; - - async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): Promise { - - var newConfig = {} as vscode.DebugConfiguration; - newConfig.type = launchCfgType; - newConfig.name = launchCfgName; - newConfig.request = 'launch'; - - if (vscode.window.activeTextEditor) - newConfig.program = vscode.window.activeTextEditor.document.fileName; - - if (newConfig["type"] === launchCfgType) { - // 1. get acad and adapter path - // 2. get acadRoot path - let productPath = getExtensionSettingString(LAUNCH_PROC); - - if (!productPath) { - let info = localize("autolispext.debug.launchjson.path", - "Specify the absolute path to the product with the Path attribute of the launch.json file."); - vscode.window.showInformationMessage(info); - let platform = os.type(); - if (platform === 'Windows_NT') { - let msg = localize("autolispext.debug.prod.path.win", - "Specify the absolute path for the product. For example, C://Program Files//Autodesk//AutoCAD//acad.exe."); - productPath = await vscode.window.showInputBox({ placeHolder: msg }); - rememberLaunchPath(productPath); - } - else if (platform === 'Darwin') { - let msg = localize("autolispext.debug.prod.path.osx", - "Specify the absolute path for the product. For example, /Applications/Autodesk/AutoCAD.app/Contents/MacOS/AutoCAD."); - productPath = await vscode.window.showInputBox({ placeHolder: msg }); - rememberLaunchPath(productPath); - } - else { - let msg = localize("autolispext.debug.prod.path.other", "Specify the absolute path for the product."); - productPath = await vscode.window.showInputBox({ placeHolder: msg }); - rememberLaunchPath(productPath); - } - } - - //3. get acad startup params - if (!existsSync(productPath)) { - if (!productPath || productPath.length == 0) - vscode.window.showErrorMessage("AutoCAD " + strNoACADerr); - else - vscode.window.showErrorMessage(productPath + " " + strNoACADerr); - ProcessPathCache.globalProductPath = ""; - return undefined; - } else { - let params = getExtensionSettingString(LAUNCH_PARM); - ProcessPathCache.globalParameter = params; - } - - //4. get debug adapter path - let lispadapterpath = calculateABSPathForDAP(productPath); - if (!existsSync(lispadapterpath)) { - if (!lispadapterpath || lispadapterpath.length == 0) - lispadapterpath = "Debug Adapter"; - vscode.window.showErrorMessage(lispadapterpath + " " + strNoADPerr); - ProcessPathCache.globalProductPath = ""; - return undefined; - } - ProcessPathCache.globalLispAdapterPath = lispadapterpath; - ProcessPathCache.globalProductPath = productPath; - } - return newConfig; - } - - dispose() { - if (this._server) { - this._server.close(); - } - } + private _server?: Net.Server; + //eslint-disable-next-line + async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): Promise { + + const newConfig = {} as vscode.DebugConfiguration; + newConfig.type = launchCfgType; + newConfig.name = launchCfgName; + newConfig.request = 'launch'; + + if (vscode.window.activeTextEditor) + newConfig.program = vscode.window.activeTextEditor.document.fileName; + + if (newConfig["type"] === launchCfgType) { + // 1. get acad and adapter path + // 2. get acadRoot path + let productPath = getExtensionSettingString(LAUNCH_PROC); + + if (!productPath) { + const info = localize("autolispext.debug.launchjson.path", + "Specify the absolute path to the product with the Path attribute of the launch.json file."); + vscode.window.showInformationMessage(info); + const platform = os.type(); + if (platform === 'Windows_NT') { + const msg = localize("autolispext.debug.prod.path.win", + "Specify the absolute path for the product. For example, C://Program Files//Autodesk//AutoCAD//acad.exe."); + productPath = await vscode.window.showInputBox({ placeHolder: msg }); + rememberLaunchPath(productPath); + } + else if (platform === 'Darwin') { + const msg = localize("autolispext.debug.prod.path.osx", + "Specify the absolute path for the product. For example, /Applications/Autodesk/AutoCAD.app/Contents/MacOS/AutoCAD."); + productPath = await vscode.window.showInputBox({ placeHolder: msg }); + rememberLaunchPath(productPath); + } + else { + const msg = localize("autolispext.debug.prod.path.other", "Specify the absolute path for the product."); + productPath = await vscode.window.showInputBox({ placeHolder: msg }); + rememberLaunchPath(productPath); + } + } + + //3. get acad startup params + if (!existsSync(productPath)) { + if (!productPath || productPath.length == 0) + vscode.window.showErrorMessage("AutoCAD " + strNoACADerr); + else + vscode.window.showErrorMessage(productPath + " " + strNoACADerr); + ProcessPathCache.globalProductPath = ""; + return undefined; + } else { + const params = getExtensionSettingString(LAUNCH_PARM); + ProcessPathCache.globalParameter = params; + } + + //4. get debug adapter path + let lispadapterpath = calculateABSPathForDAP(productPath); + if (!existsSync(lispadapterpath)) { + if (!lispadapterpath || lispadapterpath.length == 0) + lispadapterpath = "Debug Adapter"; + vscode.window.showErrorMessage(lispadapterpath + " " + strNoADPerr); + ProcessPathCache.globalProductPath = ""; + return undefined; + } + ProcessPathCache.globalLispAdapterPath = lispadapterpath; + ProcessPathCache.globalProductPath = productPath; + } + return newConfig; + } + + dispose() { + if (this._server) { + this._server.close(); + } + } } class LispAttachConfigurationProvider implements vscode.DebugConfigurationProvider { - private _server?: Net.Server; - - async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): Promise { - var newConfig = {} as vscode.DebugConfiguration; - newConfig.type = attachCfgType; - newConfig.name = attachCfgName; - newConfig.request = attachCfgRequest; - - if (vscode.window.activeTextEditor) - newConfig.program = vscode.window.activeTextEditor.document.fileName; - - ProcessPathCache.globalAcadNameInUserAttachConfig = ''; - let name = getExtensionSettingString(ATTACH_PROC); - if (name) - ProcessPathCache.globalAcadNameInUserAttachConfig = name; - - ProcessPathCache.clearProductProcessPathArr(); - let processId = await pickProcess(false, acadPid2Attach); - if (!processId) { - let msg = localize("autolispext.debug.noprocess.eror", "No process for which to attach could be found."); - return vscode.window.showInformationMessage(msg).then(_ => { - return undefined; // abort attach - }); - } - ProcessPathCache.chooseProductPathByPid(parseInt(processId)); - let lispadapterpath = calculateABSPathForDAP(ProcessPathCache.globalProductPath); - if (!existsSync(lispadapterpath)) { - vscode.window.showErrorMessage(lispadapterpath + " " + strNoADPerr); - ProcessPathCache.globalProductPath = ""; - return undefined; - } - ProcessPathCache.globalLispAdapterPath = lispadapterpath; - newConfig.processId = processId; - - return newConfig; - } - - dispose() { - if (this._server) { - this._server.close(); - } - } + private _server?: Net.Server; + //eslint-disable-next-line + async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): Promise { + const newConfig = {} as vscode.DebugConfiguration; + newConfig.type = attachCfgType; + newConfig.name = attachCfgName; + newConfig.request = attachCfgRequest; + + if (vscode.window.activeTextEditor) + newConfig.program = vscode.window.activeTextEditor.document.fileName; + + ProcessPathCache.globalAcadNameInUserAttachConfig = ''; + const name = getExtensionSettingString(ATTACH_PROC); + if (name) + ProcessPathCache.globalAcadNameInUserAttachConfig = name; + + ProcessPathCache.clearProductProcessPathArr(); + const processId = await pickProcess(acadPid2Attach); + if (!processId) { + const msg = localize("autolispext.debug.noprocess.eror", "No process for which to attach could be found."); + return vscode.window.showInformationMessage(msg).then(err => { + console.log(err) + return undefined; // abort attach + }); + } + ProcessPathCache.chooseProductPathByPid(parseInt(processId)); + const lispadapterpath = calculateABSPathForDAP(ProcessPathCache.globalProductPath); + if (!existsSync(lispadapterpath)) { + vscode.window.showErrorMessage(lispadapterpath + " " + strNoADPerr); + ProcessPathCache.globalProductPath = ""; + return undefined; + } + ProcessPathCache.globalLispAdapterPath = lispadapterpath; + newConfig.processId = processId; + + return newConfig; + } + + dispose() { + if (this._server) { + this._server.close(); + } + } } function rememberLaunchPath(path: string) { - if (existsSync(path) == false) - return; - - let settingGroup = vscode.workspace.getConfiguration('autolispext'); - if (!settingGroup) - return null; - - settingGroup.update(LAUNCH_PROC, path, true).then( - () => { - console.log("Launch path stored in extension setting"); - }, - (err) => { - if(err) - vscode.window.showErrorMessage(err.toString()); - }); + if (existsSync(path) == false) + return; + + const settingGroup = vscode.workspace.getConfiguration('autolispext'); + if (!settingGroup) + return null; + + settingGroup.update(LAUNCH_PROC, path, true).then( + () => { + console.log("Launch path stored in extension setting"); + }, + (err) => { + if (err) + vscode.window.showErrorMessage(err.toString()); + }); } \ No newline at end of file diff --git a/extension/src/diagnosticsCtrl.ts b/extension/src/diagnosticsCtrl.ts index 4d6cf2f0..8c6dd6ac 100644 --- a/extension/src/diagnosticsCtrl.ts +++ b/extension/src/diagnosticsCtrl.ts @@ -2,45 +2,48 @@ import * as vscode from 'vscode'; export class DiagnosticsCtrl { - public static diagnostics: vscode.DiagnosticCollection = undefined; - - public static initDiagnostic() { - if (this.diagnostics === undefined) - this.diagnostics = vscode.languages.createDiagnosticCollection("diagnostics"); - } - - public static addDocumentDiagnostics(doc: string, mess: string, row_start: number, col_start: number, row_end: number, col_end: number): void { - let doc_uri: vscode.Uri = vscode.Uri.file(doc); - if (doc && doc_uri) { - this.diagnostics.set(doc_uri, [{ - code: '', - message: mess ? mess : "runtime error", - range: new vscode.Range(new vscode.Position(row_start - 1, col_start), new vscode.Position(row_end - 1, col_end)), - severity: vscode.DiagnosticSeverity.Error, - source: '' - }]); - } - } - - public static clearDocumentDiagnostics() { - this.diagnostics.clear(); - } + public static diagnostics: vscode.DiagnosticCollection = undefined; + + public static initDiagnostic() { + if (this.diagnostics === undefined) + this.diagnostics = vscode.languages.createDiagnosticCollection("diagnostics"); + } + + public static addDocumentDiagnostics(doc: string, mess: string, row_start: number, col_start: number, row_end: number, col_end: number): void { + const doc_uri: vscode.Uri = vscode.Uri.file(doc); + if (doc && doc_uri) { + this.diagnostics.set(doc_uri, [{ + code: '', + message: mess ? mess : "runtime error", + range: new vscode.Range(new vscode.Position(row_start - 1, col_start), new vscode.Position(row_end - 1, col_end)), + severity: vscode.DiagnosticSeverity.Error, + source: '' + }]); + } + } + + public static clearDocumentDiagnostics() { + this.diagnostics.clear(); + } } export function registerDiagnosticHandler(context: vscode.ExtensionContext) { - DiagnosticsCtrl.initDiagnostic(); - - context.subscriptions.push(vscode.debug.onDidChangeActiveDebugSession(e => { - // clear the runtime diagnostics errors - DiagnosticsCtrl.clearDocumentDiagnostics(); - })); - context.subscriptions.push(vscode.debug.onDidStartDebugSession(e => { - // clear the runtime diagnostics errors - DiagnosticsCtrl.clearDocumentDiagnostics(); - })); - - context.subscriptions.push(vscode.debug.onDidTerminateDebugSession(e => { - // clear the runtime diagnostics errors - DiagnosticsCtrl.clearDocumentDiagnostics(); - })); + DiagnosticsCtrl.initDiagnostic(); + + context.subscriptions.push(vscode.debug.onDidChangeActiveDebugSession(err => { + // clear the runtime diagnostics errors + console.log(err) + DiagnosticsCtrl.clearDocumentDiagnostics(); + })); + context.subscriptions.push(vscode.debug.onDidStartDebugSession(err => { + // clear the runtime diagnostics errors + console.log(err) + DiagnosticsCtrl.clearDocumentDiagnostics(); + })); + + context.subscriptions.push(vscode.debug.onDidTerminateDebugSession(err => { + // clear the runtime diagnostics errors + console.log(err) + DiagnosticsCtrl.clearDocumentDiagnostics(); + })); } \ No newline at end of file diff --git a/extension/src/documents.ts b/extension/src/documents.ts index 1fd71519..0ea6993d 100644 --- a/extension/src/documents.ts +++ b/extension/src/documents.ts @@ -5,7 +5,7 @@ import { AutoLispExt } from './context'; import { ProjectTreeProvider } from "./project/projectTree"; import * as fs from 'fs-extra'; import { glob } from 'glob'; -import { DocumentServices } from './services/documentServices'; +import { DocumentServices, Selectors } from './services/documentServices'; import { SymbolManager } from './symbols'; @@ -17,18 +17,17 @@ enum Origins { } -interface DocumentSources { +interface IDocumentSources { native: vscode.TextDocument; internal: ReadonlyDocument; flags: Set; } - -namespace DocumentSources { - export function create(source: Origins, path: string): DocumentSources; - export function create(source: Origins, nDoc: vscode.TextDocument): DocumentSources; - export function create(source: Origins, iDoc: ReadonlyDocument): DocumentSources; - export function create(source: Origins, context: vscode.TextDocument | ReadonlyDocument | string): DocumentSources { +class DocumentSources { + static create(source: Origins, path: string): IDocumentSources; + static create(source: Origins, nDoc: vscode.TextDocument): IDocumentSources; + static create(source: Origins, iDoc: ReadonlyDocument): IDocumentSources; + static create(source: Origins, context: vscode.TextDocument | ReadonlyDocument | string): IDocumentSources { if (context instanceof ReadonlyDocument) { return { native: null, internal: context, flags: new Set([source]) }; } else if (typeof (context) === 'string') { @@ -42,7 +41,7 @@ namespace DocumentSources { let _instance: DocumentManager; export class DocumentManager { - private _cached: Map = new Map(); + private _cached: Map = new Map(); private _watchers: vscode.FileSystemWatcher[] = []; static get Instance(): DocumentManager { @@ -117,10 +116,8 @@ export class DocumentManager { try { const file = await glob(entry.glob, { cwd: entry.root, nocase: true, realpath: true }); this._excludes.push(...file.map(p => DocumentServices.normalizeFilePath(p))); - } catch { - (err) => { - console.error(err) - } + } catch (err) { + console.error(err) } } }); @@ -129,7 +126,7 @@ export class DocumentManager { } - private tryUpdateInternal(sources: DocumentSources) { + private tryUpdateInternal(sources: IDocumentSources) { if (sources.native && (!sources.internal || !sources.internal.equal(sources.native))) { sources.internal = ReadonlyDocument.getMemoryDocument(sources.native); if (DocumentServices.hasUnverifiedGlobalizers(sources.internal)) { @@ -148,7 +145,7 @@ export class DocumentManager { } const docType = this.getSelectorType(key); - const isAllowedType = docType === DocumentServices.Selectors.LSP || docType === DocumentServices.Selectors.DCL; + const isAllowedType = docType === Selectors.LSP || docType === Selectors.DCL; if (!isAllowedType) { return ''; } @@ -170,7 +167,7 @@ export class DocumentManager { } const docType = this.getSelectorType(key); - const isAllowedType = docType === DocumentServices.Selectors.LSP || docType === DocumentServices.Selectors.DCL; + const isAllowedType = docType === Selectors.LSP || docType === Selectors.DCL; if (!isAllowedType) { return ''; } @@ -261,7 +258,7 @@ export class DocumentManager { // Our first opportunity to capture these previously opened documents is when they are activated. **Unavoidable Technical Debt that needs future resolution** if (vscode.window.activeTextEditor) { const docType = this.getSelectorType(vscode.window.activeTextEditor.document.fileName); - if (docType == DocumentServices.Selectors.LSP || docType == DocumentServices.Selectors.DCL) { + if (docType == Selectors.LSP || docType == Selectors.DCL) { this.documentConsumeOrValidate(vscode.window.activeTextEditor.document, Origins.OPENED); } } diff --git a/extension/src/extension.ts b/extension/src/extension.ts index 98b21a7b..83e2c643 100644 --- a/extension/src/extension.ts +++ b/extension/src/extension.ts @@ -18,10 +18,10 @@ import * as DebugProviders from "./debug"; import { registerProjectCommands } from "./project/projectCommands"; import { registerCommands } from "./commands"; import { AutoLispExt } from "./context"; -import * as nls from 'vscode-nls'; +//import * as nls from 'vscode-nls'; // The example uses the file message format. -const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); +//const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); let client: BaseLanguageClient; diff --git a/extension/src/format/autoIndent.ts b/extension/src/format/autoIndent.ts index 34e00906..95881faf 100644 --- a/extension/src/format/autoIndent.ts +++ b/extension/src/format/autoIndent.ts @@ -36,17 +36,17 @@ class BasicSemantics { static parse(exprInfo: ElementRange, document: vscode.TextDocument): BasicSemantics { //parse plain text - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); + const startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + const endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); - let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); + const sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); - let readerStartPos = new CursorPosition(); + const readerStartPos = new CursorPosition(); readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 readerStartPos.offsetInDocument = exprInfo.startPos.offsetInDocument; //the start position in doc - let reader = new format.ListReader(sexpr, readerStartPos, document); + const reader = new format.ListReader(sexpr, readerStartPos, document); - let lispLists = reader.tokenize(); + const lispLists = reader.tokenize(); if ((lispLists == null) || (lispLists.atoms == null) || (lispLists.atoms.length == 0)) return null; @@ -74,7 +74,7 @@ class BasicSemantics { if ((operator == null) || (operator.symbol == null) || (operator.symbol == "")) return null; - let ret = new BasicSemantics(); + const ret = new BasicSemantics(); ret.operator = operator; ret.operatorLowerCase = operator.symbol.toLowerCase(); ret.leftParenPos = startPos2d; @@ -94,7 +94,7 @@ class BasicSemantics { } function getTabSize(): number { - let editor = vscode.window.activeTextEditor; + const editor = vscode.window.activeTextEditor; if (editor) return editor.options.tabSize; @@ -103,14 +103,14 @@ function getTabSize(): number { } function character2Column(charPosInLine: number, line: number, document: TextDocument): number { - let tabsize = getTabSize(); + const tabsize = getTabSize(); if (line >= document.lineCount) { console.log("invalid line number;\n"); return charPosInLine; } - let lineText = document.lineAt(line).text; + const lineText = document.lineAt(line).text; let column = 0; for (let i = 0; i < charPosInLine; i++) { @@ -124,20 +124,20 @@ function character2Column(charPosInLine: number, line: number, document: TextDoc } function getNumber_Lambda(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - let operator = semantics.operator; + const operator = semantics.operator; if (operator == null) return -1; if (semantics.operatorLowerCase != "lambda") return -1; - let column = character2Column(operator.column, operator.line, document); + const column = character2Column(operator.column, operator.line, document); if (semantics.operands.length == 0) { //assuming user is adding argument list, which should align after "lambda " return column + operator.symbol.length + 1; } - let argList = semantics.operands[0]; + const argList = semantics.operands[0]; if (isPosBetween(cursorPos2d, operator.line, operator.column, argList.line, argList.column)) { //it's after the start of function name and before the argument list //align with function name @@ -148,7 +148,7 @@ function getNumber_Lambda(document: TextDocument, cursorPos2d: Position, semanti } function getNumber_Defun(document: TextDocument, cursorPos2d: Position, semantics: BasicSemantics): number { - let operator = semantics.operator; + const operator = semantics.operator; if (operator == null) return -1; if ((semantics.operatorLowerCase != "defun") && @@ -156,16 +156,16 @@ function getNumber_Defun(document: TextDocument, cursorPos2d: Position, semantic return -1; if (semantics.operands.length == 0) { - let column = character2Column(operator.column, operator.line, document); + const column = character2Column(operator.column, operator.line, document); //assuming user is adding function name, which should be after, e.g., "defun " return column + operator.symbol.length + 1; } - let funName = semantics.operands[0]; + const funName = semantics.operands[0]; if (isPosBetween(cursorPos2d, operator.line, operator.column, funName.line, funName.column)) { - let column = character2Column(operator.column, operator.line, document); + const column = character2Column(operator.column, operator.line, document); //cursor is after the start of defun, and before the function name //1 column after the end of operator @@ -173,16 +173,16 @@ function getNumber_Defun(document: TextDocument, cursorPos2d: Position, semantic } if (semantics.operands.length == 1) { - let column = character2Column(funName.column, funName.line, document); + const column = character2Column(funName.column, funName.line, document); //it's after the start of function name; argument list missing //assume user is adding argument list, which should align with function name return column; } - let argList = semantics.operands[1]; + const argList = semantics.operands[1]; if (isPosBetween(cursorPos2d, funName.line, funName.column, argList.line, argList.column)) { - let column = character2Column(funName.column, funName.line, document); + const column = character2Column(funName.column, funName.line, document); //it's after the start of function name and before the argument list //align with function name @@ -193,10 +193,10 @@ function getNumber_Defun(document: TextDocument, cursorPos2d: Position, semantic } function getNumber_Defun_ArgList(document: vscode.TextDocument, exprInfo: ElementRange, parentParenExpr: ElementRange): number { - let parentSemantics = BasicSemantics.parse(parentParenExpr, document); + const parentSemantics = BasicSemantics.parse(parentParenExpr, document); if (parentSemantics == null) return -1; - let parentOperator = parentSemantics.operator; + const parentOperator = parentSemantics.operator; if (parentOperator == null) return -1; if ((parentSemantics.operatorLowerCase != "defun") && @@ -204,20 +204,20 @@ function getNumber_Defun_ArgList(document: vscode.TextDocument, exprInfo: Elemen (parentSemantics.operatorLowerCase != "lambda")) return -1; - let directChildren = parentSemantics.operands; + const directChildren = parentSemantics.operands; //find the starting ( of argument list for (let i = 0; i < directChildren.length; i++) { if ((directChildren[i] instanceof Sexpression) == false) continue; - let subLists = directChildren[i]; + const subLists = directChildren[i]; for (let j = 0; j < subLists.atoms.length; j++) { if (subLists.atoms[j].isLeftParen() == false) continue; //found it - let pos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + const pos2d = document.positionAt(exprInfo.startPos.offsetInDocument); if (pos2d.line != directChildren[i].line) return -1; @@ -226,7 +226,7 @@ function getNumber_Defun_ArgList(document: vscode.TextDocument, exprInfo: Elemen //now the exprInfo represents the range of ([argument list]) of defun - let column = character2Column(directChildren[i].column, directChildren[i].line, document); + const column = character2Column(directChildren[i].column, directChildren[i].line, document); return column + 1;//horizontally right after the ( of argument list } @@ -274,7 +274,7 @@ function getIdentationForWideFormatStyle(document: TextDocument, cursorPos2d: Po //if it's after the first operand, align with it if (isPosAfter(cursorPos2d, semantics.operands[0].line, semantics.operands[0].column)) { - let column = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); + const column = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); return column; } @@ -292,8 +292,8 @@ function getNumber_SetQ(document: TextDocument, cursorPos2d: Position, semantics //add a new atom here for (let i = 0; i < semantics.operands.length - 1; i++) { //check if it's between the beginnings of operand[i] and operand[i+1] - let operand1 = semantics.operands[i]; - let operand2 = semantics.operands[i + 1]; + const operand1 = semantics.operands[i]; + const operand2 = semantics.operands[i + 1]; if (isPosBetween(cursorPos2d, operand1.line, operand1.column, operand2.line, operand2.column) == false) continue; @@ -303,7 +303,7 @@ function getNumber_SetQ(document: TextDocument, cursorPos2d: Position, semantics if (operandNumBeforePos == -1) { //check if it's after the beginning of last operand - let lastOperand = semantics.operands[semantics.operands.length - 1]; + const lastOperand = semantics.operands[semantics.operands.length - 1]; if (isPosAfter(cursorPos2d, lastOperand.line, lastOperand.column)) operandNumBeforePos = semantics.operands.length; @@ -313,7 +313,7 @@ function getNumber_SetQ(document: TextDocument, cursorPos2d: Position, semantics return -1; - let firstOperandStartColumn = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); + const firstOperandStartColumn = character2Column(semantics.operands[0].column, semantics.operands[0].line, document); if ((operandNumBeforePos % 2) == 0) { //it's a variable @@ -328,20 +328,20 @@ function getNumber_SetQ(document: TextDocument, cursorPos2d: Position, semantics function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, parentParenExpr: ElementRange, cursorPos2d: Position): number { if (parentParenExpr != null) { - let num = getNumber_Defun_ArgList(document, exprInfo, parentParenExpr); + const num = getNumber_Defun_ArgList(document, exprInfo, parentParenExpr); if (num >= 0) return num; } - let semantics = BasicSemantics.parse(exprInfo, document); + const semantics = BasicSemantics.parse(exprInfo, document); - let operator: LispAtom = (semantics != null) ? semantics.operator : null; + const operator: LispAtom = (semantics != null) ? semantics.operator : null; if ((operator == null) || (operator.symbol == null)) { //align right after the beginning ( if there's no operator at all; - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + const startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - let column = character2Column(startPos2d.character, startPos2d.line, document); + const column = character2Column(startPos2d.character, startPos2d.line, document); return column + 1; } @@ -349,9 +349,9 @@ function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, par //align right after the beginning ( if: //1) the beginning ( is after operator ' and //2) the operator of () is not lambda - let startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); + const startPos2d = document.positionAt(exprInfo.startPos.offsetInDocument); - let column = character2Column(startPos2d.character, startPos2d.line, document); + const column = character2Column(startPos2d.character, startPos2d.line, document); return column + 1; } @@ -359,12 +359,12 @@ function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, par //first atom is a string or after ' //just align with it - let column = character2Column(operator.column, operator.line, document); + const column = character2Column(operator.column, operator.line, document); return column; } - let leftParenCol = character2Column(semantics.leftParenPos.character, semantics.leftParenPos.line, document); - let endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); + const leftParenCol = character2Column(semantics.leftParenPos.character, semantics.leftParenPos.line, document); + const endPos2d = document.positionAt(exprInfo.endPos.offsetInDocument + 1); if (cursorPos2d.line == endPos2d.line) { let textBehindCursor = document.getText(new vscode.Range(cursorPos2d, endPos2d)); textBehindCursor = textBehindCursor.trim(); @@ -403,17 +403,19 @@ function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, par return indentationForNarrowStyle() + semantics.leftParenPos.character; default: - let sexpr = new Sexpression(); - let atoms = new Array(); - atoms = atoms.concat(semantics.operator); - atoms = atoms.concat(semantics.operands); - sexpr.setAtoms(atoms); - - if (sexpr.shouldFormatWideStyle(cursorPos2d.character)) { - charCol = getIdentationForWideFormatStyle(document, cursorPos2d, semantics); - if (charCol >= 0) - return charCol; - } + (() => { + const sexpr = new Sexpression(); + let atoms = new Array(); + atoms = atoms.concat(semantics.operator); + atoms = atoms.concat(semantics.operands); + sexpr.setAtoms(atoms); + + if (sexpr.shouldFormatWideStyle(cursorPos2d.character)) { + charCol = getIdentationForWideFormatStyle(document, cursorPos2d, semantics); + if (charCol >= 0) + return charCol; + } + })(); break; } @@ -424,24 +426,24 @@ function getWhiteSpaceNumber(document: TextDocument, exprInfo: ElementRange, par } function getIndentationInBlockComment(document: vscode.TextDocument, commentRange: ElementRange, cursorNewPos2d: Position): string { - let startPos2d = document.positionAt(commentRange.startPos.offsetInDocument); + const startPos2d = document.positionAt(commentRange.startPos.offsetInDocument); let indentNum = startPos2d.character + 2;//default alignment: horizontally after ;| //now, check if the block comment has multiple lines; if true, and the old cursor pos is not on the first line, //the new line should align with the old line - let cursorOldLine = cursorNewPos2d.line - 1; + const cursorOldLine = cursorNewPos2d.line - 1; if (cursorOldLine > startPos2d.line) { - let textLastLine = document.lineAt(cursorOldLine).text; - let trimmedText = textLastLine.trimStart(); + const textLastLine = document.lineAt(cursorOldLine).text; + const trimmedText = textLastLine.trimStart(); indentNum = textLastLine.length - trimmedText.length; } else if (cursorOldLine == startPos2d.line) { let textLastLine = document.lineAt(cursorOldLine).text; - let charNumBeforeRealComment = startPos2d.character + 2; + const charNumBeforeRealComment = startPos2d.character + 2; textLastLine = textLastLine.substring(charNumBeforeRealComment); - let trimmedText = textLastLine.trimStart(); + const trimmedText = textLastLine.trimStart(); indentNum = charNumBeforeRealComment + textLastLine.length - trimmedText.length; } @@ -456,7 +458,7 @@ export function getIndentation(document: TextDocument, containerInfo: ContainerE if (containerInfo.containerBlockComment != null) return getIndentationInBlockComment(document, containerInfo.containerBlockComment, cursorPos2d); - let exprInfoArray: ElementRange[] = containerInfo.containerParens; + const exprInfoArray: ElementRange[] = containerInfo.containerParens; if ((exprInfoArray == null) || (exprInfoArray.length == 0)) return ""; //no identation for top level text @@ -464,7 +466,7 @@ export function getIndentation(document: TextDocument, containerInfo: ContainerE if (exprInfoArray.length > 1) parentParenExpr = exprInfoArray[1]; - let num = getWhiteSpaceNumber(document, exprInfoArray[0], parentParenExpr, cursorPos2d); + const num = getWhiteSpaceNumber(document, exprInfoArray[0], parentParenExpr, cursorPos2d); if (num == -1) { console.log("failed to parse paren expression.\n"); return ""; @@ -484,11 +486,11 @@ function createContainerBlockCommentInfo(commentStartPos: CursorPosition, nextPo if (nextPos2Scan == null) { //the block comment is not finished; the whole rest doc after ;| is inside the comment - let endPos = new CursorPosition(); + const endPos = new CursorPosition(); endPos.offsetInDocument = docText.length; endPos.offsetInSelection = docText.length - commentStartPos.delta(); - let coverBlockComment = new ElementRange(); + const coverBlockComment = new ElementRange(); coverBlockComment.startPos = commentStartPos; coverBlockComment.endPos = endPos; @@ -498,15 +500,15 @@ function createContainerBlockCommentInfo(commentStartPos: CursorPosition, nextPo if (cursorPos > nextPos2Scan.offsetInDocument) return null;//nextPos2Scan if after the end of comment; it's just a rough check to quickly exclude most impossible cases - let commentStartPos2d = document.positionAt(commentStartPos.offsetInDocument); - let commentEndPos2d = document.positionAt(nextPos2Scan.offsetInDocument); - let commentText = document.getText(new vscode.Range(commentStartPos2d, commentEndPos2d)); + const commentStartPos2d = document.positionAt(commentStartPos.offsetInDocument); + const commentEndPos2d = document.positionAt(nextPos2Scan.offsetInDocument); + const commentText = document.getText(new vscode.Range(commentStartPos2d, commentEndPos2d)); if (commentText.endsWith("|;") == false) console.log("unexpected end of a block comment"); if (cursorPos <= (commentStartPos.offsetInDocument + commentText.length - 2)) { - let coverBlockComment = new ElementRange(); + const coverBlockComment = new ElementRange(); coverBlockComment.startPos = commentStartPos; coverBlockComment.endPos = nextPos2Scan; @@ -520,19 +522,19 @@ function createContainerBlockCommentInfo(commentStartPos: CursorPosition, nextPo export function findContainers(document: vscode.TextDocument, cursorPos2d: Position): ContainerElements { - let docAsString = document.getText(); - let cursorPos = document.offsetAt(cursorPos2d); + const docAsString = document.getText(); + const cursorPos = document.offsetAt(cursorPos2d); - let docStringLength = docAsString.length; + const docStringLength = docAsString.length; - let parenPairs = new Array();//temp array to find ( ... ) expression - let coverParenPairs = new Array(); //( ... ) expressions that are ancestors of current position + const parenPairs = new Array();//temp array to find ( ... ) expression + const coverParenPairs = new Array(); //( ... ) expressions that are ancestors of current position let coverBlockComment: ElementRange = null; let isPrevCharQuote = false;//inside operator ' for (let pos = 0; pos < docStringLength; /*startPosInString++*/) { - let char = docAsString.charAt(pos); - let nextChar = (pos < (docStringLength - 1)) ? docAsString.charAt(pos + 1) : null; + const char = docAsString.charAt(pos); + const nextChar = (pos < (docStringLength - 1)) ? docAsString.charAt(pos + 1) : null; if ((pos > cursorPos) && (parenPairs.length == 0)) { //it's behind the given position, and there's no closing ) to look for; @@ -542,9 +544,9 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit //highest priority if (char == ';') { - let commentStartPos = format.CursorPosition.create(pos, pos); + const commentStartPos = format.CursorPosition.create(pos, pos); - let nextPos2Scan = format.ListReader.findEndOfComment(document, docAsString, commentStartPos); + const nextPos2Scan = format.ListReader.findEndOfComment(document, docAsString, commentStartPos); if ((nextChar == '|') && (coverBlockComment == null)) { //check if cursor is in this block comment, and if true, create an ElementRange to keep this information @@ -564,9 +566,9 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit if (char == '"') { isPrevCharQuote = false; - let stringStartPos = format.CursorPosition.create(pos, pos); + const stringStartPos = format.CursorPosition.create(pos, pos); - let nextPos2Scan = format.ListReader.findEndOfDoubleQuoteString(document, docAsString, stringStartPos); + const nextPos2Scan = format.ListReader.findEndOfDoubleQuoteString(document, docAsString, stringStartPos); if (nextPos2Scan == null) //doc ended or not found break; @@ -591,7 +593,7 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit //getting here means you're in neither comment nor string with double quotes if (char == '(') { - let anExpr = new ElementRange(); + const anExpr = new ElementRange(); anExpr.quoted = curCharQuoted; anExpr.startPos = format.CursorPosition.create(pos, pos); parenPairs.push(anExpr); @@ -607,7 +609,7 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit continue; } - let parenExpr = parenPairs.pop(); + const parenExpr = parenPairs.pop(); parenExpr.endPos = format.CursorPosition.create(pos, pos); //now check if it covers current position @@ -629,7 +631,7 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit if (parenPairs.length == 0) break; - let expr = parenPairs.pop(); + const expr = parenPairs.pop(); if (expr.endPos != null) continue; @@ -638,7 +640,7 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit coverParenPairs.push(expr); } - let containerInfo = new ContainerElements(); + const containerInfo = new ContainerElements(); containerInfo.containerParens = coverParenPairs; containerInfo.containerBlockComment = coverBlockComment; @@ -647,25 +649,25 @@ export function findContainers(document: vscode.TextDocument, cursorPos2d: Posit export function isCursorInDoubleQuoteExpr(document: vscode.TextDocument, position: vscode.Position): boolean { try { - var syntaxContainers = findContainers(document, position); - var firstLevelContainer = syntaxContainers.containerParens.pop(); + const syntaxContainers = findContainers(document, position); + const firstLevelContainer = syntaxContainers.containerParens.pop(); - let startPos2d = document.positionAt(firstLevelContainer.startPos.offsetInDocument); - let endPos2d = document.positionAt(firstLevelContainer.endPos.offsetInDocument + 1); + const startPos2d = document.positionAt(firstLevelContainer.startPos.offsetInDocument); + const endPos2d = document.positionAt(firstLevelContainer.endPos.offsetInDocument + 1); - let sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); + const sexpr = document.getText(new vscode.Range(startPos2d, endPos2d)); - let readerStartPos = new CursorPosition(); + const readerStartPos = new CursorPosition(); readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 readerStartPos.offsetInDocument = firstLevelContainer.startPos.offsetInDocument; //the start position in doc - let reader = new format.ListReader(sexpr, readerStartPos, document); + const reader = new format.ListReader(sexpr, readerStartPos, document); - let lispLists = reader.tokenize(); - var atomAtCursor = lispLists.getAtomFromPos(position); + const lispLists = reader.tokenize(); + const atomAtCursor = lispLists.getAtomFromPos(position); if (atomAtCursor != null && atomAtCursor.symbol.startsWith("\"")) return true; } catch (err) { - + console.log(err); } return false; @@ -679,27 +681,27 @@ export function subscribeOnEnterEvent() { if (ch != '\n') return []; - let edits = new Array(); + const edits = new Array(); try { //step 1: work out the indentation and fill white spaces in the new line //step 1.1, search for all parentheses that contain current posistion - let containerInfo = findContainers(document, position2d); + const containerInfo = findContainers(document, position2d); //step 1.2, work out the correctly indented text string of the given line - let lineOldText = document.lineAt(position2d.line).text; - let lineNoLeftPadding = lineOldText.trimStart(); - let leftblanks = lineOldText.length - lineNoLeftPadding.length; - let leftblanksPos = new vscode.Position(position2d.line, leftblanks); + const lineOldText = document.lineAt(position2d.line).text; + const lineNoLeftPadding = lineOldText.trimStart(); + const leftblanks = lineOldText.length - lineNoLeftPadding.length; + const leftblanksPos = new vscode.Position(position2d.line, leftblanks); - let lineIndentation = getIndentation(document, containerInfo, position2d); - let lineStartPos2d = new vscode.Position(position2d.line, 0); + const lineIndentation = getIndentation(document, containerInfo, position2d); + const lineStartPos2d = new vscode.Position(position2d.line, 0); edits.push(TextEdit.delete(new vscode.Range(lineStartPos2d, leftblanksPos))); edits.push(TextEdit.insert(lineStartPos2d, lineIndentation)); } catch (err) { - vscode.window.showInformationMessage("It met some errors to compute the identation."); + vscode.window.showInformationMessage(`It met some errors to compute the identation.\n${err}`); } return edits; diff --git a/extension/src/format/formatProviders.ts b/extension/src/format/formatProviders.ts index a348073c..b1bdd040 100644 --- a/extension/src/format/formatProviders.ts +++ b/extension/src/format/formatProviders.ts @@ -5,45 +5,47 @@ import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export function registerDocumentFormatter() { - vscode.languages.registerDocumentFormattingEditProvider(['autolisp', 'lisp'], { - provideDocumentFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { - let activeTextEditor = vscode.window.activeTextEditor; - if (activeTextEditor == undefined) - return []; - let currentLSPDoc = activeTextEditor.document.fileName; - let ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); - if (ext === ".DCL") { - let msg = localize("autolispext.format.notsupport.dcl", "Command doesn't support DCL files."); - vscode.window.showInformationMessage(msg); - return []; - } + vscode.languages.registerDocumentFormattingEditProvider(['autolisp', 'lisp'], { + //eslint-disable-next-line + provideDocumentFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { + const activeTextEditor = vscode.window.activeTextEditor; + if (activeTextEditor == undefined) + return []; + const currentLSPDoc = activeTextEditor.document.fileName; + const ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); + if (ext === ".DCL") { + const msg = localize("autolispext.format.notsupport.dcl", "Command doesn't support DCL files."); + vscode.window.showInformationMessage(msg); + return []; + } - let fmt = LispFormatter.format(activeTextEditor.document, null); - return [vscode.TextEdit.replace(utils.getFullDocRange(activeTextEditor), fmt)]; - } - }); + const fmt = LispFormatter.format(activeTextEditor.document, null); + return [vscode.TextEdit.replace(utils.getFullDocRange(activeTextEditor), fmt)]; + } + }); } export function registeSelectionFormatter() { - vscode.languages.registerDocumentRangeFormattingEditProvider(['autolisp', 'lisp'], { - provideDocumentRangeFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { - let activeTextEditor = vscode.window.activeTextEditor; - if (activeTextEditor == undefined) - return []; - let currentLSPDoc = activeTextEditor.document.fileName; - let ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); - if (ext === ".DCL") { - let msg = localize("autolispext.format.notsupport.dcl", "Command doesn't support DCL files."); - vscode.window.showInformationMessage(msg); - return []; - } - if (activeTextEditor.selection.isEmpty) { - let msg = localize("autolispext.format.selectionlines", "First, select the lines of code to format."); - vscode.window.showInformationMessage(msg); - } + vscode.languages.registerDocumentRangeFormattingEditProvider(['autolisp', 'lisp'], { + //eslint-disable-next-line + provideDocumentRangeFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { + const activeTextEditor = vscode.window.activeTextEditor; + if (activeTextEditor == undefined) + return []; + const currentLSPDoc = activeTextEditor.document.fileName; + const ext = currentLSPDoc.substring(currentLSPDoc.length - 4, currentLSPDoc.length).toUpperCase(); + if (ext === ".DCL") { + const msg = localize("autolispext.format.notsupport.dcl", "Command doesn't support DCL files."); + vscode.window.showInformationMessage(msg); + return []; + } + if (activeTextEditor.selection.isEmpty) { + const msg = localize("autolispext.format.selectionlines", "First, select the lines of code to format."); + vscode.window.showInformationMessage(msg); + } - let fmt = LispFormatter.format(activeTextEditor.document, activeTextEditor.selection); - return [vscode.TextEdit.replace(utils.getSelectedDocRange(activeTextEditor), fmt)]; - } - }); + const fmt = LispFormatter.format(activeTextEditor.document, activeTextEditor.selection); + return [vscode.TextEdit.replace(utils.getSelectedDocRange(activeTextEditor), fmt)]; + } + }); } \ No newline at end of file diff --git a/extension/src/format/formatter.ts b/extension/src/format/formatter.ts index 1a14d369..0a38fca9 100644 --- a/extension/src/format/formatter.ts +++ b/extension/src/format/formatter.ts @@ -26,7 +26,7 @@ export class LispFormatter { return ""; try { - let parser = new LispParser(document); + const parser = new LispParser(document); parser.tokenizeString(textString, selectionStartOffset); if (fileParser) fileParser.tokenizeString(document.getText(), 0); @@ -39,17 +39,17 @@ export class LispFormatter { } private static formatGut(document: vscode.TextDocument, parser: LispParser, origCopy: string, fileParser?: LispParser): string { - let atoms = parser.atomsForest; + const atoms = parser.atomsForest; if (atoms.length == 0) return origCopy; let formattedstring = ""; - let linefeed = LispParser.getEOL(document); + const linefeed = LispParser.getEOL(document); for (let i = 0; i < atoms.length; i++) { if (atoms[i] instanceof Sexpression) { - let lispLists = atoms[i] as Sexpression; + const lispLists = atoms[i] as Sexpression; - let firstAtom = lispLists.atoms[0]; + const firstAtom = lispLists.atoms[0]; let isTopLevelAtom = true; if (fileParser) isTopLevelAtom = fileParser.isTopLevelAtom(firstAtom.line, firstAtom.column); @@ -58,14 +58,14 @@ export class LispFormatter { if (isTopLevelAtom) startColumn = 0; - let formatstr = lispLists.formatting(startColumn, linefeed); + const formatstr = lispLists.formatting(startColumn, linefeed); if (formatstr.length == 0) { - let msg = localize("autolispext.formatter.errors", "It meets some errors when formatting"); + const msg = localize("autolispext.formatter.errors", "It meets some errors when formatting"); throw new Error(msg); } if (isTopLevelAtom && formattedstring.length > 0) { - let lastCh = formattedstring.substring(-1); + const lastCh = formattedstring.substring(-1); if (lastCh != "\n") { formattedstring = formattedstring.trimEnd(); if (formattedstring != linefeed && formattedstring.length > 0) diff --git a/extension/src/format/listreader.ts b/extension/src/format/listreader.ts index 01e85c5a..1fa54b26 100644 --- a/extension/src/format/listreader.ts +++ b/extension/src/format/listreader.ts @@ -23,7 +23,7 @@ export class CursorPosition { } static create(offsetInSelection: number, offsetInDocument: number) { - let ret = new CursorPosition(); + const ret = new CursorPosition(); ret.offsetInSelection = offsetInSelection; ret.offsetInDocument = offsetInDocument; @@ -62,7 +62,7 @@ class StringInputStream { next() { if (this.pos < this.len) { - var ch = this.text.charAt(this.pos++); + const ch = this.text.charAt(this.pos++); if (ch == "\n") { ++this.line; this.col = 0; @@ -81,7 +81,7 @@ class StringInputStream { return ""; } - let startPos = this.pos; + const startPos = this.pos; let posAfterString = this.pos + length; if (posAfterString > this.len) { @@ -115,10 +115,10 @@ export class ListReader { startPosInDoc: CursorPosition; constructor(text: string, startPos: CursorPosition, curDoc: vscode.TextDocument) { - let trimmedStr = text.trimStart(); - let lengthOfLeftTrim = text.length - trimmedStr.length; + const trimmedStr = text.trimStart(); + const lengthOfLeftTrim = text.length - trimmedStr.length; - let startPos2D = curDoc.positionAt(startPos.offsetInDocument); + const startPos2D = curDoc.positionAt(startPos.offsetInDocument); this.input = new StringInputStream(text.trimEnd(), startPos2D); this.input.ignore(lengthOfLeftTrim); @@ -148,7 +148,7 @@ export class ListReader { case "\u2029": return true; } - let linefeed = ch == '\r' && chNext == '\n'; + const linefeed = ch == '\r' && chNext == '\n'; if (linefeed) return true; return false; @@ -161,34 +161,34 @@ export class ListReader { this.readWhen((ch) => { if (this.isBlank(ch)) return true; - let linefeed = ch == '\r' && this.peek(1) == '\n'; + const linefeed = ch == '\r' && this.peek(1) == '\n'; if (linefeed) return true; }); } readString() { - let sline = this.input.line; - let scol = this.input.col; + const sline = this.input.line; + const scol = this.input.col; assert(this.peek() == "\""); - let startPoint = new CursorPosition(); + const startPoint = new CursorPosition(); startPoint.offsetInSelection = this.input.currentOffset(); startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); - let stringLength = ListReader.getLengthOfStringSym(this.document, this.input.text, startPoint); + const stringLength = ListReader.getLengthOfStringSym(this.document, this.input.text, startPoint); - let res = this.input.nextString(stringLength); + const res = this.input.nextString(stringLength); - let lastList = this.cachedLists[this.cachedLists.length - 1]; + const lastList = this.cachedLists[this.cachedLists.length - 1]; lastList.addAtom(new LispAtom(sline, scol, res)); } readSymbol() { - let sline = this.input.line; - let scol = this.input.col; + const sline = this.input.line; + const scol = this.input.col; - let firstCh = this.next(); + const firstCh = this.next(); let res = this.readWhen((ch) => { if (this.isBlank(ch)) @@ -199,7 +199,7 @@ export class ListReader { case "(": case ";": case "\"": - case "\'": + case "'": return false; default: return true; @@ -207,46 +207,46 @@ export class ListReader { }); res = firstCh + res; - let lastList = this.cachedLists[this.cachedLists.length - 1]; + const lastList = this.cachedLists[this.cachedLists.length - 1]; lastList.addAtom(new LispAtom(sline, scol, res)); } readQuote() { - let quote = this.next(); + const quote = this.next(); this.skipBlanks(); return this.readList(new LispAtom(this.input.line, this.input.col, quote)); } readEndList() { this.next(); - let lastList = this.cachedLists[this.cachedLists.length - 1]; + const lastList = this.cachedLists[this.cachedLists.length - 1]; lastList.addAtom(new LispAtom(this.input.line, this.input.col, ")")); this.cachedLists.pop(); } readComment() { - let sline = this.input.line; - let scol = this.input.col; + const sline = this.input.line; + const scol = this.input.col; - let startPoint = new CursorPosition(); + const startPoint = new CursorPosition(); startPoint.offsetInSelection = this.input.currentOffset(); startPoint.offsetInDocument = this.input.currentOffset() + this.startPosInDoc.delta(); - let commentLength = ListReader.getCommentLength(this.document, this.input.text, startPoint); + const commentLength = ListReader.getCommentLength(this.document, this.input.text, startPoint); let res = this.input.nextString(commentLength); res = res.trimEnd(); - let lastList = this.cachedLists[this.cachedLists.length - 1]; + const lastList = this.cachedLists[this.cachedLists.length - 1]; lastList.addAtom(new LispAtom(sline, scol, res)); } readList(prefixAtom?: LispAtom) { - let sexpr = new Sexpression(); + const sexpr = new Sexpression(); sexpr.line = this.input.line; sexpr.column = this.input.col; if (prefixAtom != undefined) sexpr.addAtom(prefixAtom); - let parenAtom = "("; + const parenAtom = "("; sexpr.addAtom(new LispAtom(this.input.line, this.input.col, parenAtom)); this.cachedLists.push(sexpr); this.next(); @@ -254,7 +254,7 @@ export class ListReader { while (true) { this.skipBlanks(); - let ch = this.peek(); + const ch = this.peek(); if (ch == null) break; @@ -265,8 +265,7 @@ export class ListReader { switch (ch) { case "(": - let subList = this.readList(); - sexpr.addAtom(subList); + sexpr.addAtom(this.readList()); continue; case ";": @@ -277,13 +276,12 @@ export class ListReader { this.readString(); continue; - case "\'": - let nextCh = this.peek(1); - if (nextCh != "(") { + case "'": + if (this.peek(1) != "(") { this.readSymbol(); } else { - let quoteList = this.readQuote(); + const quoteList = this.readQuote(); sexpr.addAtom(quoteList); } continue; @@ -319,7 +317,7 @@ export class ListReader { //return the position right after the ending char of current comment //return null if the end is out of range or missing static findEndOfComment(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { - let inRangeStringLength = stringInRange.length; + const inRangeStringLength = stringInRange.length; if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; return null; //the given range ends with a comment @@ -334,7 +332,7 @@ export class ListReader { //the rest part of the given range is less than 2 characters; won't have a |; to end the comment return null; //let's take the rest as part of an incomplete comment - var endingOfComment = stringInRange.indexOf("|;", startPosOffset.offsetInSelection + 2); + const endingOfComment = stringInRange.indexOf("|;", startPosOffset.offsetInSelection + 2); if (endingOfComment < (startPosOffset.offsetInSelection + 2)) { //no ending |; found; the LSP in the given range is in problem and let's take the whole rest part as a block comment @@ -343,7 +341,7 @@ export class ListReader { //return the offset of the char that is right after current block comment - let endPos = new CursorPosition(); + const endPos = new CursorPosition(); endPos.offsetInSelection = endingOfComment + 2; endPos.offsetInDocument = endPos.offsetInSelection + startPosOffset.delta(); @@ -354,7 +352,7 @@ export class ListReader { //else, the rest of current line is a comment //skip the rest of current line - var cursorPos2d = document.positionAt(startPosOffset.offsetInDocument); + const cursorPos2d = document.positionAt(startPosOffset.offsetInDocument); if (cursorPos2d.line >= (document.lineCount - 1)) { //there's no next line @@ -362,11 +360,11 @@ export class ListReader { } //not the final line; continue to scan the next line - let next = new vscode.Position(cursorPos2d.line + 1, 0); + const next = new vscode.Position(cursorPos2d.line + 1, 0); - let nextCharOffsetInDoc = document.offsetAt(next); + const nextCharOffsetInDoc = document.offsetAt(next); - let endPos = new CursorPosition(); + const endPos = new CursorPosition(); endPos.offsetInDocument = nextCharOffsetInDoc; endPos.offsetInSelection = nextCharOffsetInDoc - startPosOffset.delta(); @@ -392,7 +390,7 @@ export class ListReader { //return the position right after the ending " //return null if the ending " is out of range or missing static findEndOfDoubleQuoteString(document: vscode.TextDocument, stringInRange: string, startPosOffset: CursorPosition): CursorPosition { - let inRangeStringLength = stringInRange.length; + const inRangeStringLength = stringInRange.length; if (startPosOffset.offsetInSelection >= (inRangeStringLength - 1))//it's the final char in the given range; return null; @@ -400,7 +398,7 @@ export class ListReader { let posAfterComment = -1; for (let curPos = startPosOffset.offsetInSelection + 1; curPos < inRangeStringLength; curPos++) { - let char = stringInRange.charAt(curPos); + const char = stringInRange.charAt(curPos); if (char == '"') { posAfterComment = curPos + 1; @@ -426,7 +424,7 @@ export class ListReader { if (posAfterComment == -1) return null; - let nextPos = new CursorPosition(); + const nextPos = new CursorPosition(); nextPos.offsetInSelection = posAfterComment; nextPos.offsetInDocument = posAfterComment + startPosOffset.delta(); diff --git a/extension/src/help/documentationLibrary.ts b/extension/src/help/documentationLibrary.ts index d55fd6a5..39bc2069 100644 --- a/extension/src/help/documentationLibrary.ts +++ b/extension/src/help/documentationLibrary.ts @@ -2,121 +2,121 @@ import { getExtensionSettingString } from '../resources'; import { ReadonlyDocument } from '../project/readOnlyDocument'; import { IJsonLoadable } from "../resources"; import { WebHelpDclAtt, WebHelpDclTile, WebHelpEntity, WebHelpFunction, WebHelpObject } from './documentationObjects'; -import {DocumentServices} from "../services/documentServices"; +import { DocumentServices, Selectors } from "../services/documentServices"; let _instance: WebHelpLibrarySingleton; // This container object represents all of the normalized data extracted from help.autodesk.com/view/OARX/ export class WebHelpLibrarySingleton implements IJsonLoadable { - dclAttributes: Map = new Map(); - dclTiles: Map = new Map(); - objects: Map = new Map(); - functions: Map = new Map(); - ambiguousFunctions: Map = new Map(); - enumerators: Map = new Map(); - private _jsonYear: string = ''; - private _testYear: string = null; - - private constructor() {} - - static get Instance(): WebHelpLibrarySingleton { - if (_instance instanceof WebHelpLibrarySingleton) { - return _instance; - } - return _instance = new WebHelpLibrarySingleton(); - } - - get year(): string { - return this._testYear ?? getExtensionSettingString('help.TargetYear'); - } - - set year(value: string) { - this._testYear = value; - } - - - get jsonCreatedWithVersionYear(): string { - return this._jsonYear; - } - - - // consumes a JSON converted object into the _instance - loadFromJsonObject(obj: object): void{ - // Issue #70, A user configured extension setting was requested by Issue #70 and deprecated the use of the embedded json year - // However, this was left available in case we would like to setup a unit test that insures the JSON isn't stale. - this._jsonYear = obj['year'] ?? '2021'; - - Object.keys(obj["dclAttributes"]).forEach(key => { - let newObj = new WebHelpDclAtt(obj["dclAttributes"][key]); - this.dclAttributes.set(key, newObj); - }); - Object.keys(obj["dclTiles"]).forEach(key => { - let newObj = new WebHelpDclTile(obj["dclTiles"][key]); - this.dclTiles.set(key, newObj); - }); - Object.keys(obj["objects"]).forEach(key => { - let newObj = new WebHelpObject(obj["objects"][key]); - this.objects.set(key, newObj); - }); - Object.keys(obj["functions"]).forEach(key => { - let newObj = new WebHelpFunction(obj["functions"][key]); - this.functions.set(key, newObj); - }); - Object.keys(obj["ambiguousFunctions"]).forEach(key => { - let newLst = []; - obj["ambiguousFunctions"][key].forEach(element => { - newLst.push(new WebHelpFunction(element)); - }); - this.ambiguousFunctions.set(key, newLst); - }); - Object.keys(obj["enumerators"]).forEach(key => { - this.enumerators.set(key, obj["enumerators"][key]); - }); - // The obj["events"] dictionary also exists but wasn't used because we really don't have a purpose for them right now. - } - - - // Searches the library dictionaries for a reference to the provided symbol name. - // If found, yields help URL relevant to that symbol, but otherwise outputs a filetypes contextual default help URL. - // Also removed all reference to ActiveEditor and added a filePath arg so the function would be easier - // to test and then becomes recyclable for use in markdown generation. - getWebHelpUrlBySymbolName(item: string, file: string|ReadonlyDocument|DocumentServices.Selectors): string { - const lowerKey = item.toLowerCase().trim(); - const selector = typeof file === 'string' - ? DocumentServices.getSelectorType(file) - : file instanceof ReadonlyDocument - ? DocumentServices.getSelectorType(file.fileName) - : file; - if (selector === DocumentServices.Selectors.LSP) { - return this.processLSP(lowerKey, selector); - } else if (selector === DocumentServices.Selectors.DCL) { - return this.processDCL(lowerKey); - } - return WebHelpEntity.getDefaultHelpLink(this.year); - } - - private processDCL(key: string): string { - if (this.dclTiles.has(key)){ - return this.dclTiles.get(key).getHelpLink(this.year); - } else if (this.dclAttributes.has(key)){ - return this.dclAttributes.get(key).getHelpLink(this.year); - } - return WebHelpEntity.createHelpLink("F8F5A79B-9A05-4E25-A6FC-9720216BA3E7", this.year); // DCL General Landing Page - } - - private processLSP(key: string, selector: DocumentServices.Selectors): string { - if (this.objects.has(key)){ - return this.objects.get(key).getHelpLink(this.year); - } else if (this.functions.has(key)){ - return this.functions.get(key).getHelpLink(this.year); - } else if (this.ambiguousFunctions.has(key)){ - return this.ambiguousFunctions.get(key)[0].getHelpLink(this.year); - } else if (this.enumerators.has(key)){ - return this.getWebHelpUrlBySymbolName(this.enumerators.get(key), selector); - } else { - return WebHelpEntity.createHelpLink("4CEE5072-8817-4920-8A2D-7060F5E16547", this.year); // LSP General Landing Page - } - } + dclAttributes: Map = new Map(); + dclTiles: Map = new Map(); + objects: Map = new Map(); + functions: Map = new Map(); + ambiguousFunctions: Map = new Map(); + enumerators: Map = new Map(); + private _jsonYear: string = ''; + private _testYear: string = null; + + private constructor() { } + + static get Instance(): WebHelpLibrarySingleton { + if (_instance instanceof WebHelpLibrarySingleton) { + return _instance; + } + return _instance = new WebHelpLibrarySingleton(); + } + + get year(): string { + return this._testYear ?? getExtensionSettingString('help.TargetYear'); + } + + set year(value: string) { + this._testYear = value; + } + + + get jsonCreatedWithVersionYear(): string { + return this._jsonYear; + } + + + // consumes a JSON converted object into the _instance + loadFromJsonObject(obj: object): void { + // Issue #70, A user configured extension setting was requested by Issue #70 and deprecated the use of the embedded json year + // However, this was left available in case we would like to setup a unit test that insures the JSON isn't stale. + this._jsonYear = obj['year'] ?? '2021'; + + Object.keys(obj["dclAttributes"]).forEach(key => { + const newObj = new WebHelpDclAtt(obj["dclAttributes"][key]); + this.dclAttributes.set(key, newObj); + }); + Object.keys(obj["dclTiles"]).forEach(key => { + const newObj = new WebHelpDclTile(obj["dclTiles"][key]); + this.dclTiles.set(key, newObj); + }); + Object.keys(obj["objects"]).forEach(key => { + const newObj = new WebHelpObject(obj["objects"][key]); + this.objects.set(key, newObj); + }); + Object.keys(obj["functions"]).forEach(key => { + const newObj = new WebHelpFunction(obj["functions"][key]); + this.functions.set(key, newObj); + }); + Object.keys(obj["ambiguousFunctions"]).forEach(key => { + const newLst = []; + obj["ambiguousFunctions"][key].forEach(element => { + newLst.push(new WebHelpFunction(element)); + }); + this.ambiguousFunctions.set(key, newLst); + }); + Object.keys(obj["enumerators"]).forEach(key => { + this.enumerators.set(key, obj["enumerators"][key]); + }); + // The obj["events"] dictionary also exists but wasn't used because we really don't have a purpose for them right now. + } + + + // Searches the library dictionaries for a reference to the provided symbol name. + // If found, yields help URL relevant to that symbol, but otherwise outputs a filetypes contextual default help URL. + // Also removed all reference to ActiveEditor and added a filePath arg so the function would be easier + // to test and then becomes recyclable for use in markdown generation. + getWebHelpUrlBySymbolName(item: string, file: string | ReadonlyDocument | Selectors): string { + const lowerKey = item.toLowerCase().trim(); + const selector = typeof file === 'string' + ? DocumentServices.getSelectorType(file) + : file instanceof ReadonlyDocument + ? DocumentServices.getSelectorType(file.fileName) + : file; + if (selector === Selectors.LSP) { + return this.processLSP(lowerKey, selector); + } else if (selector === Selectors.DCL) { + return this.processDCL(lowerKey); + } + return WebHelpEntity.getDefaultHelpLink(this.year); + } + + private processDCL(key: string): string { + if (this.dclTiles.has(key)) { + return this.dclTiles.get(key).getHelpLink(this.year); + } else if (this.dclAttributes.has(key)) { + return this.dclAttributes.get(key).getHelpLink(this.year); + } + return WebHelpEntity.createHelpLink("F8F5A79B-9A05-4E25-A6FC-9720216BA3E7", this.year); // DCL General Landing Page + } + + private processLSP(key: string, selector: Selectors): string { + if (this.objects.has(key)) { + return this.objects.get(key).getHelpLink(this.year); + } else if (this.functions.has(key)) { + return this.functions.get(key).getHelpLink(this.year); + } else if (this.ambiguousFunctions.has(key)) { + return this.ambiguousFunctions.get(key)[0].getHelpLink(this.year); + } else if (this.enumerators.has(key)) { + return this.getWebHelpUrlBySymbolName(this.enumerators.get(key), selector); + } else { + return WebHelpEntity.createHelpLink("4CEE5072-8817-4920-8A2D-7060F5E16547", this.year); // LSP General Landing Page + } + } } diff --git a/extension/src/help/documentationObjects.ts b/extension/src/help/documentationObjects.ts index 121ee9a8..c88b32e0 100644 --- a/extension/src/help/documentationObjects.ts +++ b/extension/src/help/documentationObjects.ts @@ -52,7 +52,7 @@ export class WebHelpEntity { } static getDefaultHelpLink(year: string): string { - let lang: string = WebHelpEntity.getLanguageUrlDomain(); + const lang: string = WebHelpEntity.getLanguageUrlDomain(); return "https://help.autodesk.com/view/OARX/" + year + lang; } diff --git a/extension/src/help/documentationPresenter.ts b/extension/src/help/documentationPresenter.ts index e9ad9c22..34043643 100644 --- a/extension/src/help/documentationPresenter.ts +++ b/extension/src/help/documentationPresenter.ts @@ -1,312 +1,320 @@ -import {WebHelpDclAtt, WebHelpEntity, WebHelpDclTile, WebHelpFunction, WebHelpObject, WebHelpValueType} from './documentationObjects'; -import {ILispDocs} from '../parsing/comments'; +import { WebHelpDclAtt, WebHelpEntity, WebHelpDclTile, WebHelpFunction, WebHelpValueType } from './documentationObjects'; +import { ILispDocs } from '../parsing/comments'; import * as vscode from "vscode"; -import {AutoLispExt} from "../context"; -import {LispAtom} from "../astObjects/lispAtom"; +import { AutoLispExt } from "../context"; +import { LispAtom } from "../astObjects/lispAtom"; import * as path from 'path'; export enum AnnoIcon { - METHOD = '$(symbol-method)', - STRUCT = '$(symbol-struct)', - ATTRIBUTE = '$(symbol-property)', - MEMBER = '$(symbol-enum-member)', + METHOD = '$(symbol-method)', + STRUCT = '$(symbol-struct)', + ATTRIBUTE = '$(symbol-property)', + MEMBER = '$(symbol-enum-member)', ERROR = '$(error)', WARNING = '$(warning)', USER = '$(account)' } -namespace MarkdownHelpers { - export const divider: string = '\n ------ '; +const divider: string = '\n ------ '; - export function bold(text: string): string { - return `**${text}**`; - } - - export function italic(text: string): string { - return `*${text}*`; - } - - export function emphasis(text: string): string { - return `\`${text}\``; - } +function bold(text: string): string { + return `**${text}**`; +} - export function webLink(text: string, url: string): string { - return `[${text}](${url})`; - } +function italic(text: string): string { + return `*${text}*`; +} - export function fileLink(text: string, filePath: string, line: number): string { - return text; +function emphasis(text: string): string { + return `\`${text}\``; +} - // TODO: there is a syntax for file links within vscode, but wasting far too much time trying to make it work; - // possibly need newer VSCode target version & @Types update. - //return `[${text}](vscode://${filePath}:${line})`; +function webLink(text: string, url: string): string { + return `[${text}](${url})`; +} +//eslint-disable-next-line +function fileLink(text: string, filePath: string, line: number): string { + return text; + + // TODO: there is a syntax for file links within vscode, but wasting far too much time trying to make it work; + // possibly need newer VSCode target version & @Types update. + //return `[${text}](vscode://${filePath}:${line})`; + + //// MISC Stuff I've Tried + //const normal = path.replace(/ /g, '%20'); + //const normal = DocumentServices.normalizeFilePath(path).replace(/ /g, '%20'); + //const thisLink = `[${atom.symbol}](file://${normal}:${atom.line})`; + //const thisLink = `[${atom.symbol}](vscode://${normal})`; + //md['baseUri'] = vscode.Uri.file(dirname(path)); +} - //// MISC Stuff I've Tried - //const normal = path.replace(/ /g, '%20'); - //const normal = DocumentServices.normalizeFilePath(path).replace(/ /g, '%20'); - //const thisLink = `[${atom.symbol}](file://${normal}:${atom.line})`; - //const thisLink = `[${atom.symbol}](vscode://${normal})`; - //md['baseUri'] = vscode.Uri.file(dirname(path)); - } +function bullet(text: string): string { + return ` - ${text}`; +} - export function bullet(text: string): string { - return ` - ${text}`; - } +function addParam(source: WebHelpValueType, active: boolean): string { + return `${divider}\n${webHelpValueTypeHandler(source, italic('param'), active)}`; +} - export function addParam(source: WebHelpValueType, active: boolean): string { - return `${divider}\n${webHelpValueTypeHandler(source, italic('param'), active)}`; - } +function addReturn(source: WebHelpValueType): string { + return `${divider}\n${webHelpValueTypeHandler(source, italic('returns'), false)}`; +} - export function addReturn(source: WebHelpValueType): string { - return `${divider}\n${webHelpValueTypeHandler(source, italic('returns'), false)}`; - } +function webHelpValueTypeHandler(item: WebHelpValueType, label: string, active: boolean): string { + let typeString = ''; + const types = item.typeNames.split(/,| /g).filter(x => x.length > 0); + if (types.length >= 1) { + const last = types.length - 1; + const year = AutoLispExt.WebHelpLibrary.year; + for (let i = 0; i < types.length; i++) { + const name = types[i]; + const def = AutoLispExt.WebHelpLibrary.objects.get(name.toLowerCase()); + if (!def) { + typeString += name; + } else { + typeString += webLink(def.id, def.getHelpLink(year)); + } - function webHelpValueTypeHandler(item: WebHelpValueType, label: string, active: boolean): string { - let typeString = ''; - const types = item.typeNames.split(/,| /g).filter(x => x.length > 0); - if (types.length >= 1) { - const last = types.length - 1; - const year = AutoLispExt.WebHelpLibrary.year; - for (let i = 0; i < types.length; i++) { - const name = types[i]; - const def = AutoLispExt.WebHelpLibrary.objects.get(name.toLowerCase()); - if (!def) { - typeString += name; - } else { - typeString += webLink(def.id, def.getHelpLink(year)); - } - - if (i !== last) { - typeString += ', '; - } + if (i !== last) { + typeString += ', '; } - } else { - typeString = 'nil'; } + } else { + typeString = 'nil'; + } - const enums = item.enums.filter(x => x.trim().length > 0); + const enums = item.enums.filter(x => x.trim().length > 0); - if (label.includes('returns')) { - return enums.length >= 1 + if (label.includes('returns')) { + return enums.length >= 1 ? `@${label} — <${item.primitive}>\n\nTypes: ${typeString}\n\n - ${enums.join('\n - ')}` : `@${label} — <${item.primitive}>\n\nTypes: ${typeString}`; - } + } - const id = active ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(item.id)) : MarkdownHelpers.emphasis(item.id); + const id = active ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(item.id)) : MarkdownHelpers.emphasis(item.id); - return enums.length >= 1 - ? `@${label} — ${id}<${item.primitive}>\n\nTypes: ${typeString}\n\n - ${enums.join('\n - ')}` - : `@${label} — ${id}<${item.primitive}>\n\nTypes: ${typeString}`; - } + return enums.length >= 1 + ? `@${label} — ${id}<${item.primitive}>\n\nTypes: ${typeString}\n\n - ${enums.join('\n - ')}` + : `@${label} — ${id}<${item.primitive}>\n\nTypes: ${typeString}`; } +const MarkdownHelpers = { + divider, + bold, + italic, + emphasis, + webLink, + fileLink, + bullet, + addParam, + addReturn, + webHelpValueTypeHandler +} +// TODO: later versions of VSCode.MarkdownString allow HTML and would give us a lot more layout/presentation control + +function asMarkdown(source: string): vscode.MarkdownString; +function asMarkdown(source: LispAtom, paramIndex?: number, args?: LispAtom[], docs?: ILispDocs, path?: string): vscode.MarkdownString; +function asMarkdown(source: WebHelpFunction, paramIndex?: number): vscode.MarkdownString; +function asMarkdown(source: WebHelpDclAtt): vscode.MarkdownString; +function asMarkdown(source: WebHelpDclTile): vscode.MarkdownString; +function asMarkdown(source: WebHelpEntity): vscode.MarkdownString; +function asMarkdown(source: string | LispAtom | WebHelpEntity, + paramIndex?: number, args?: LispAtom[], docs?: ILispDocs, path?: string): vscode.MarkdownString { + if (source instanceof WebHelpFunction) { + return FunctionMarkdown(source, paramIndex ?? -1); + } + if (source instanceof WebHelpDclAtt) { + return DclAttMarkdown(source); + } + if (source instanceof WebHelpDclTile) { + return DclTileMarkdown(source); + } + if (source instanceof LispAtom) { + return UserMarkdown(source, paramIndex ?? -1, args ?? [], docs, path); + } + if (source) { + return EnumMarkdown(source.toString()); + } -export namespace Annotation { - - // TODO: later versions of VSCode.MarkdownString allow HTML and would give us a lot more layout/presentation control + return null; +} - export function asMarkdown(source: string): vscode.MarkdownString; - export function asMarkdown(source: LispAtom, paramIndex?: number, args?: LispAtom[], docs?: ILispDocs, path?: string): vscode.MarkdownString; - export function asMarkdown(source: WebHelpFunction, paramIndex?: number): vscode.MarkdownString; - export function asMarkdown(source: WebHelpDclAtt): vscode.MarkdownString; - export function asMarkdown(source: WebHelpDclTile): vscode.MarkdownString; - export function asMarkdown(source: WebHelpEntity): vscode.MarkdownString; - export function asMarkdown(source: string | LispAtom | WebHelpEntity, - paramIndex?: number, args?: LispAtom[], docs?: ILispDocs, path?: string): vscode.MarkdownString { - if (source instanceof WebHelpFunction) { - return FunctionMarkdown(source, paramIndex ?? -1); - } - if (source instanceof WebHelpDclAtt) { - return DclAttMarkdown(source); - } - if (source instanceof WebHelpDclTile) { - return DclTileMarkdown(source); - } - if (source instanceof LispAtom) { - return UserMarkdown(source, paramIndex ?? -1, args ?? [], docs, path); +function FunctionMarkdown(source: WebHelpFunction, paramIndex: number): vscode.MarkdownString { + const lines = []; + const year = AutoLispExt.WebHelpLibrary.year; + const url = source.getHelpLink(year); + lines.push(`${AnnoIcon.METHOD} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); + lines.push(source.description); + lines.push(MarkdownHelpers.divider); + lines.push(source.signature.replace(//g, '>')); + + if (source.arguments.length > 0) { + for (let i = 0; i < source.arguments.length; i++) { + const arg = source.arguments[i]; + lines.push(MarkdownHelpers.addParam(arg, i === paramIndex)); } + } - if (source) { - return EnumMarkdown(source.toString()); - } + lines.push(MarkdownHelpers.addReturn(source.returnType)); - return null; - } + const result = new vscode.MarkdownString(lines.join('\n'), true); + result.isTrusted = true; + return result; +} - function FunctionMarkdown(source: WebHelpFunction, paramIndex: number): vscode.MarkdownString { - const lines = []; - let year = AutoLispExt.WebHelpLibrary.year; - let url = source.getHelpLink(year); - lines.push(`${AnnoIcon.METHOD} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); - lines.push(source.description); - lines.push(MarkdownHelpers.divider); - lines.push(source.signature.replace(/\/g, '>')); - if (source.arguments.length > 0) { - for (let i = 0; i < source.arguments.length; i++) { - const arg = source.arguments[i]; - lines.push(MarkdownHelpers.addParam(arg, i === paramIndex)); - } - } +function DclAttMarkdown(source: WebHelpDclAtt): vscode.MarkdownString { + const lines = []; + const year = AutoLispExt.WebHelpLibrary.year; + const url = source.getHelpLink(year); + lines.push(`${AnnoIcon.ATTRIBUTE} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); + lines.push(source.description); + lines.push(MarkdownHelpers.divider); + lines.push(source.signature); + lines.push(MarkdownHelpers.divider); + lines.push(`Type: ${source.valueType.primitive}`); + + if (source.valueType.enums.length > 0) { + source.valueType.enums.forEach(e => { + lines.push(MarkdownHelpers.bullet(e)); + }); + } + const result = new vscode.MarkdownString(lines.join('\n'), true); + result.isTrusted = true; + return result; +} - lines.push(MarkdownHelpers.addReturn(source.returnType)); - const result = new vscode.MarkdownString(lines.join('\n'), true); - result.isTrusted = true; - return result; - } +function DclTileMarkdown(source: WebHelpDclTile): vscode.MarkdownString { + const lines = []; + const year = AutoLispExt.WebHelpLibrary.year; + const url = source.getHelpLink(year); + lines.push(`${AnnoIcon.STRUCT} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); + lines.push(source.description); + lines.push(MarkdownHelpers.divider); - function DclAttMarkdown(source: WebHelpDclAtt) : vscode.MarkdownString { - const lines = []; - let year = AutoLispExt.WebHelpLibrary.year; - let url = source.getHelpLink(year); - lines.push(`${AnnoIcon.ATTRIBUTE} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); - lines.push(source.description); - lines.push(MarkdownHelpers.divider); - lines.push(source.signature); - lines.push(MarkdownHelpers.divider); - lines.push(`Type: ${source.valueType.primitive}`); + lines.push('Signatures:'); + if (source.id !== 'dialog') { + lines.push(MarkdownHelpers.bullet(`${source.id};`)); + } + if (source.attributes.length > 0) { + lines.push(MarkdownHelpers.bullet(`: ${source.id} { ${MarkdownHelpers.italic('attributes?')} }`)); + } + if (source.id === 'dialog' || source.attributes.some(x => x.match(/children/i))) { + lines.push(MarkdownHelpers.bullet(`: ${source.id} { ${MarkdownHelpers.italic('attributes?')} ${MarkdownHelpers.italic('tiles?')} }`)); + } - if (source.valueType.enums.length > 0) { - source.valueType.enums.forEach(e => { - lines.push(MarkdownHelpers.bullet(e)); - }); + if (source.attributes.length > 0) { + let text = `${MarkdownHelpers.divider}\nAttributes: `; + const last = source.attributes.length - 1; + for (let i = 0; i < source.attributes.length; i++) { + const att = source.attributes[i]; + const libItem = AutoLispExt.WebHelpLibrary.dclAttributes.get(att.toLowerCase()); + const itemLink = !libItem ? libItem : MarkdownHelpers.webLink(att, libItem.getHelpLink(year)); + text += i === last ? itemLink : `${itemLink}, `; } - const result = new vscode.MarkdownString(lines.join('\n'), true); - result.isTrusted = true; - return result; + lines.push(text); } + const result = new vscode.MarkdownString(lines.join('\n'), true); + result.isTrusted = true; + return result; +} - function DclTileMarkdown(source: WebHelpDclTile) : vscode.MarkdownString { - const lines = []; - let year = AutoLispExt.WebHelpLibrary.year; - let url = source.getHelpLink(year); +function EnumMarkdown(source: string): vscode.MarkdownString { + const result = new vscode.MarkdownString(`${AnnoIcon.MEMBER} ${MarkdownHelpers.bold(source)} [WIN|?]\n\nEnumerated Value`, true); + result.isTrusted = true; + return result; +} - lines.push(`${AnnoIcon.STRUCT} ${MarkdownHelpers.webLink(MarkdownHelpers.bold(source.id), url)} [${source.platforms}]\n`); - lines.push(source.description); - lines.push(MarkdownHelpers.divider); - lines.push('Signatures:'); - if (source.id !== 'dialog'){ - lines.push(MarkdownHelpers.bullet(`${source.id};`)); - } - if (source.attributes.length > 0) { - lines.push(MarkdownHelpers.bullet(`: ${source.id} { ${MarkdownHelpers.italic('attributes?')} }`)); - } - if (source.id === 'dialog' || source.attributes.some(x => x.match(/children/i))) { - lines.push(MarkdownHelpers.bullet(`: ${source.id} { ${MarkdownHelpers.italic('attributes?')} ${MarkdownHelpers.italic('tiles?')} }`)); - } - - if (source.attributes.length > 0) { - let text = `${MarkdownHelpers.divider}\nAttributes: `; - const last = source.attributes.length - 1; - for (let i = 0; i < source.attributes.length; i++) { - const att = source.attributes[i]; - const libItem = AutoLispExt.WebHelpLibrary.dclAttributes.get(att.toLowerCase()); - const itemLink = !libItem ? libItem : MarkdownHelpers.webLink(att, libItem.getHelpLink(year)); - text += i === last ? itemLink : `${itemLink}, `; - } - lines.push(text); - } - const result = new vscode.MarkdownString(lines.join('\n'), true); - result.isTrusted = true; - return result; +function UserMarkdown(source: LispAtom, index: number, args: LispAtom[], docs: ILispDocs, sourceFile: string): vscode.MarkdownString { + const lines = []; + lines.push(`${AnnoIcon.USER} ${MarkdownHelpers.fileLink(MarkdownHelpers.bold(source.symbol), sourceFile, source.line)} [?]\n`); + if (docs?.description) { + lines.push(docs.description.value); } + lines.push(MarkdownHelpers.divider); - function EnumMarkdown(source: string) : vscode.MarkdownString { - const result = new vscode.MarkdownString(`${AnnoIcon.MEMBER} ${MarkdownHelpers.bold(source)} [WIN|?]\n\nEnumerated Value`, true); - result.isTrusted = true; - return result; - } - + let sig = ''; + const sigIndex = lines.length; // placeholder index + lines.push(sig); + lines.push(MarkdownHelpers.divider); - function UserMarkdown(source: LispAtom, index: number, args: LispAtom[], docs: ILispDocs, sourceFile: string): vscode.MarkdownString { - const lines = []; - lines.push(`${AnnoIcon.USER} ${MarkdownHelpers.fileLink(MarkdownHelpers.bold(source.symbol), sourceFile, source.line)} [?]\n`); - if (docs?.description) { - lines.push(docs.description.value); - } + sig = docs?.params + ? extractDynamicSignature(source, args, index, docs, lines) + : extractGenericSignature(source, args, index); - lines.push(MarkdownHelpers.divider); + lines[sigIndex] = sig; // because extractDynamicSignature() adds additional lines - let sig = ''; - const sigIndex = lines.length; // placeholder index - lines.push(sig); - lines.push(MarkdownHelpers.divider); - sig = docs?.params - ? extractDynamicSignature(source, args, index, docs, lines) - : extractGenericSignature(source, args, index); + if (docs?.returns) { + lines.push(`@${MarkdownHelpers.italic('returns')} — ${docs.returns.value}`); + } else { + lines.push(`@${MarkdownHelpers.italic('returns')} — ${AnnoIcon.WARNING} Undocumented`); + } - lines[sigIndex] = sig; // because extractDynamicSignature() adds additional lines + if (docs?.remarks) { + lines.push(MarkdownHelpers.divider); + lines.push(`@${MarkdownHelpers.italic('remarks')} — ${docs.remarks.value}`); + } + lines.push(MarkdownHelpers.divider); + lines.push(`${MarkdownHelpers.italic('source')} — ${path.basename(sourceFile)}`); - if (docs?.returns) { - lines.push(`@${MarkdownHelpers.italic('returns')} — ${docs.returns.value}`); - } else { - lines.push(`@${MarkdownHelpers.italic('returns')} — ${AnnoIcon.WARNING} Undocumented`); - } + const result = new vscode.MarkdownString(lines.join('\n'), true); + result.isTrusted = true; + return result; +} - if (docs?.remarks) { - lines.push(MarkdownHelpers.divider); - lines.push(`@${MarkdownHelpers.italic('remarks')} — ${docs.remarks.value}`); - } +function extractGenericSignature(source: LispAtom, args: LispAtom[], index: number) { + let sig = `(${source.symbol}`; + for (let i = 0; i < args.length; i++) { + const id = i === index ? MarkdownHelpers.bold(args[i].symbol) : args[i].symbol; + sig += ` ${id}`; + } + return `${sig})`; +} - lines.push(MarkdownHelpers.divider); - lines.push(`${MarkdownHelpers.italic('source')} — ${path.basename(sourceFile)}`); +function extractDynamicSignature(source: LispAtom, args: LispAtom[], index: number, docs: ILispDocs, lines: string[]) { + let sig = `(${source.symbol}`; + const expect = args.map(x => x.symbol.toLowerCase()); + for (let i = 0; i < docs.params.length; i++) { + const param = docs.params[i]; - const result = new vscode.MarkdownString(lines.join('\n'), true); - result.isTrusted = true; - return result; - } + const id = args.length < i ? args[i].symbol : param.name; + const annoId = index === i ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(id)) : MarkdownHelpers.emphasis(id); + const sigId = index === i ? MarkdownHelpers.bold(id) : id; - function extractGenericSignature(source: LispAtom, args: LispAtom[], index: number) { - let sig = `(${source.symbol}`; - for (let i = 0; i < args.length; i++) { - const id = i === index ? MarkdownHelpers.bold(args[i].symbol) : args[i].symbol; - sig += ` ${id}`; + if (i >= expect.length || param.name.toLowerCase() !== expect[i]) { + lines.push(`@${MarkdownHelpers.italic('param')} — ${AnnoIcon.WARNING} ${annoId} ${param.value}\n${MarkdownHelpers.divider}`); + } else { + lines.push(`@${MarkdownHelpers.italic('param')} — ${annoId} ${param.value}\n${MarkdownHelpers.divider}`); } - return `${sig})`; - } - - function extractDynamicSignature(source: LispAtom, args: LispAtom[], index: number, docs: ILispDocs, lines: any[]) { - let sig = `(${source.symbol}`; - const expect = args.map(x => x.symbol.toLowerCase()); - for (let i = 0; i < docs.params.length; i++) { - const param = docs.params[i]; - let id = args.length < i ? args[i].symbol : param.name; - const annoId = index === i ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(id)) : MarkdownHelpers.emphasis(id); + sig += ` ${sigId}`; + } + if (args.length > docs.params.length) { + for (let i = docs.params.length; i < args.length; i++) { + const id = args[i].symbol; + const annoId = index === i ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(id)) : MarkdownHelpers.bold(id); const sigId = index === i ? MarkdownHelpers.bold(id) : id; - - if (i >= expect.length || param.name.toLowerCase() !== expect[i]) { - lines.push(`@${MarkdownHelpers.italic('param')} — ${AnnoIcon.WARNING} ${annoId} ${param.value}\n${MarkdownHelpers.divider}`); - } else { - lines.push(`@${MarkdownHelpers.italic('param')} — ${annoId} ${param.value}\n${MarkdownHelpers.divider}`); - } - + lines.push(`@${MarkdownHelpers.italic('param')} — ${AnnoIcon.WARNING} ${annoId} Undocumented\n${MarkdownHelpers.divider}`); sig += ` ${sigId}`; } - if (args.length > docs.params.length) { - for (let i = docs.params.length; i < args.length; i++) { - const id = args[i].symbol; - const annoId = index === i ? MarkdownHelpers.bold(MarkdownHelpers.emphasis(id)) : MarkdownHelpers.bold(id); - const sigId = index === i ? MarkdownHelpers.bold(id) : id; - lines.push(`@${MarkdownHelpers.italic('param')} — ${AnnoIcon.WARNING} ${annoId} Undocumented\n${MarkdownHelpers.divider}`); - sig += ` ${sigId}`; - } - } - - sig += ')'; - return sig; } + + sig += ')'; + return sig; } +export const Annotation = { + asMarkdown, +} \ No newline at end of file diff --git a/extension/src/help/userDocumentation.ts b/extension/src/help/userDocumentation.ts index f4e414dd..516c01ef 100644 --- a/extension/src/help/userDocumentation.ts +++ b/extension/src/help/userDocumentation.ts @@ -1,10 +1,10 @@ import * as vscode from 'vscode'; -import * as nls from 'vscode-nls'; +//import * as nls from 'vscode-nls'; import { SearchPatterns } from '../providers/providerShared'; import { ILispFragment } from '../astObjects/ILispFragment'; import { LispContainer } from '../astObjects/lispContainer'; -const localize = nls.loadMessageBundle(); +//const localize = nls.loadMessageBundle(); // This file exists to support the 'autolisp.generateDocumentation' command, which is register in: // /extension/src/commands.ts @@ -23,7 +23,7 @@ export async function getDefunAtPosition(atom: ILispFragment, pos: vscode.Positi await vscode.window.showQuickPick(quickPicks).then(response => { outResult = response; }); } defs = defs.filter(d => d.getNthKeyAtom(1).symbol === outResult); - } + } // Now we know what defun we are documenting, so we extract arguments; if applicable return defs[0]; } diff --git a/extension/src/parsing/lispParser.ts b/extension/src/parsing/lispParser.ts index 312aa35c..7c42d645 100644 --- a/extension/src/parsing/lispParser.ts +++ b/extension/src/parsing/lispParser.ts @@ -19,172 +19,172 @@ import { getEOL } from './shared'; class LeftParentItem { - public location: Number; + public location: number; - constructor(pos) { - this.location = pos; - } + constructor(pos) { + this.location = pos; + } } export class LispParser { - document: vscode.TextDocument; - atomsForest: Array; - - constructor(document: vscode.TextDocument) { - this.atomsForest = new Array(); - this.document = document; - } - - - // this new block of getters maintains some reverse compatibility before the code was restructured - static get getDocumentContainer() { return getDocumentContainer; } - static get getEOL() { return getEOL; } - - - isTopLevelAtom(line: number, column: number): boolean { - for (let i = 0; i < this.atomsForest.length; i++) { - if (this.atomsForest[i] instanceof Sexpression) { - let lispLists = this.atomsForest[i] as Sexpression; - if (lispLists.atoms[0].line == line - && lispLists.atoms[0].column == column) - return true; - } - } - return false; - } - - private static readComments(document: vscode.TextDocument, docAsString: string, startPosOffset: CursorPosition): string { - - if (docAsString.length == 0) { - console.log("scanning an empty string is meaningless\n") - return null; - } - - let offsetAfterComment = ListReader.findEndOfComment(document, docAsString, startPosOffset); - - if (offsetAfterComment == null) { - offsetAfterComment = new CursorPosition(); - offsetAfterComment.offsetInSelection = docAsString.length; - offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); - } - else if (offsetAfterComment.offsetInSelection > docAsString.length) { //out of the given range - offsetAfterComment.offsetInSelection = docAsString.length; - offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); - } - else if (offsetAfterComment.offsetInSelection <= startPosOffset.offsetInSelection) { - //it shouldn't run into this code path; - console.log("failed to locate the end of a comment\n"); - offsetAfterComment.offsetInSelection = docAsString.length; - offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); - } - - let startPos2d = document.positionAt(startPosOffset.offsetInDocument); - let endPos2d = document.positionAt(offsetAfterComment.offsetInDocument); - - return document.getText(new vscode.Range(startPos2d, endPos2d)); - } - - - public tokenizeString(needFmtString: string, offset: number) { - let selectionStartOffset = offset; - let textString = needFmtString; - - let document = this.document; - - let leftParensStack = []; - - for (let i = 0; i < textString.length; /*i++ is commented out on purpose, as the increment is different case by case*/) { - let ch = textString.charAt(i); - - if (ch == ";") { - let startPos = new CursorPosition() - startPos.offsetInSelection = i; - startPos.offsetInDocument = i + selectionStartOffset; - - let comments = LispParser.readComments(document, textString, startPos); - if (comments == null) - continue; - if (leftParensStack.length == 0) { - this.atomsForest.push(comments); - } - - i += comments.length; - - continue; - } - - if (ch == '\"') { - let startPos = new CursorPosition() - startPos.offsetInSelection = i; - startPos.offsetInDocument = i + selectionStartOffset; - - let endOfString = ListReader.findEndOfDoubleQuoteString(document, textString, startPos); - let startPos2d = document.positionAt(startPos.offsetInDocument); - let endPos2d = null; - if (endOfString != null) { - endPos2d = document.positionAt(endOfString.offsetInDocument); - } - else { - endPos2d = document.positionAt(selectionStartOffset + textString.length); - } - - let stringExpr = document.getText(new vscode.Range(startPos2d, endPos2d)); - //set the index of next iteration - i += stringExpr.length; - - if (stringExpr.length == 0) - console.log("failed to read string on top level\n"); - - if (leftParensStack.length == 0) { - this.atomsForest.push(stringExpr); - } - - continue; - } - - if (ch == "(") { - leftParensStack.push(new LeftParentItem(i)); - } - else if (ch == ")") { - if (leftParensStack.length == 0) { - // this is unbalnace paren - this.atomsForest.push(ch); - } - else if (leftParensStack.length == 1) { - // this is the toplevel scope s-expression - let leftparen = leftParensStack.pop(); - let sexpr = textString.substring(leftparen.location, i + 1); - - let exprStartPos = new CursorPosition(); - exprStartPos.offsetInSelection = 0; - exprStartPos.offsetInDocument = leftparen.location + selectionStartOffset; - - let reader = new ListReader(sexpr, exprStartPos, document); - let lispLists = reader.tokenize(); - this.atomsForest.push(lispLists); - } - else { - leftParensStack.pop(); - } - } - else if (leftParensStack.length == 0) { - this.atomsForest.push(ch); - } - - i++; - continue; - } - - if (leftParensStack.length > 0) { - let sexpr = textString.substring(leftParensStack[0].location, textString.length); - - let exprStartPos = new CursorPosition(); - exprStartPos.offsetInSelection = 0; - exprStartPos.offsetInDocument = leftParensStack[0].location + selectionStartOffset; - - let reader = new ListReader(sexpr, exprStartPos, document); - let lispLists = reader.tokenize(); - this.atomsForest.push(lispLists); - } - } + document: vscode.TextDocument; + atomsForest: Array; + + constructor(document: vscode.TextDocument) { + this.atomsForest = new Array(); + this.document = document; + } + + + // this new block of getters maintains some reverse compatibility before the code was restructured + static get getDocumentContainer() { return getDocumentContainer; } + static get getEOL() { return getEOL; } + + + isTopLevelAtom(line: number, column: number): boolean { + for (let i = 0; i < this.atomsForest.length; i++) { + if (this.atomsForest[i] instanceof Sexpression) { + const lispLists = this.atomsForest[i] as Sexpression; + if (lispLists.atoms[0].line == line + && lispLists.atoms[0].column == column) + return true; + } + } + return false; + } + + private static readComments(document: vscode.TextDocument, docAsString: string, startPosOffset: CursorPosition): string { + + if (docAsString.length == 0) { + console.log("scanning an empty string is meaningless\n") + return null; + } + + let offsetAfterComment = ListReader.findEndOfComment(document, docAsString, startPosOffset); + + if (offsetAfterComment == null) { + offsetAfterComment = new CursorPosition(); + offsetAfterComment.offsetInSelection = docAsString.length; + offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); + } + else if (offsetAfterComment.offsetInSelection > docAsString.length) { //out of the given range + offsetAfterComment.offsetInSelection = docAsString.length; + offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); + } + else if (offsetAfterComment.offsetInSelection <= startPosOffset.offsetInSelection) { + //it shouldn't run into this code path; + console.log("failed to locate the end of a comment\n"); + offsetAfterComment.offsetInSelection = docAsString.length; + offsetAfterComment.offsetInDocument = docAsString.length + startPosOffset.delta(); + } + + const startPos2d = document.positionAt(startPosOffset.offsetInDocument); + const endPos2d = document.positionAt(offsetAfterComment.offsetInDocument); + + return document.getText(new vscode.Range(startPos2d, endPos2d)); + } + + + public tokenizeString(needFmtString: string, offset: number) { + const selectionStartOffset = offset; + const textString = needFmtString; + + const document = this.document; + + const leftParensStack = []; + + for (let i = 0; i < textString.length; /*i++ is commented out on purpose, as the increment is different case by case*/) { + const ch = textString.charAt(i); + + if (ch == ";") { + const startPos = new CursorPosition() + startPos.offsetInSelection = i; + startPos.offsetInDocument = i + selectionStartOffset; + + const comments = LispParser.readComments(document, textString, startPos); + if (comments == null) + continue; + if (leftParensStack.length == 0) { + this.atomsForest.push(comments); + } + + i += comments.length; + + continue; + } + + if (ch == '"') { + const startPos = new CursorPosition() + startPos.offsetInSelection = i; + startPos.offsetInDocument = i + selectionStartOffset; + + const endOfString = ListReader.findEndOfDoubleQuoteString(document, textString, startPos); + const startPos2d = document.positionAt(startPos.offsetInDocument); + let endPos2d = null; + if (endOfString != null) { + endPos2d = document.positionAt(endOfString.offsetInDocument); + } + else { + endPos2d = document.positionAt(selectionStartOffset + textString.length); + } + + const stringExpr = document.getText(new vscode.Range(startPos2d, endPos2d)); + //set the index of next iteration + i += stringExpr.length; + + if (stringExpr.length == 0) + console.log("failed to read string on top level\n"); + + if (leftParensStack.length == 0) { + this.atomsForest.push(stringExpr); + } + + continue; + } + + if (ch == "(") { + leftParensStack.push(new LeftParentItem(i)); + } + else if (ch == ")") { + if (leftParensStack.length == 0) { + // this is unbalnace paren + this.atomsForest.push(ch); + } + else if (leftParensStack.length == 1) { + // this is the toplevel scope s-expression + const leftparen = leftParensStack.pop(); + const sexpr = textString.substring(leftparen.location, i + 1); + + const exprStartPos = new CursorPosition(); + exprStartPos.offsetInSelection = 0; + exprStartPos.offsetInDocument = leftparen.location + selectionStartOffset; + + const reader = new ListReader(sexpr, exprStartPos, document); + const lispLists = reader.tokenize(); + this.atomsForest.push(lispLists); + } + else { + leftParensStack.pop(); + } + } + else if (leftParensStack.length == 0) { + this.atomsForest.push(ch); + } + + i++; + continue; + } + + if (leftParensStack.length > 0) { + const sexpr = textString.substring(leftParensStack[0].location, textString.length); + + const exprStartPos = new CursorPosition(); + exprStartPos.offsetInSelection = 0; + exprStartPos.offsetInDocument = leftParensStack[0].location + selectionStartOffset; + + const reader = new ListReader(sexpr, exprStartPos, document); + const lispLists = reader.tokenize(); + this.atomsForest.push(lispLists); + } + } } \ No newline at end of file diff --git a/extension/src/platform.ts b/extension/src/platform.ts index 3be5ead2..3e76b20a 100644 --- a/extension/src/platform.ts +++ b/extension/src/platform.ts @@ -9,8 +9,8 @@ export function calculateABSPathForDAP(productPath){ if(!existsSync(productPath)){ return ""; } - let folder = path.dirname(productPath); - let platform = os.type(); //reference - https://nodejs.org/api/os.html#os_os_type + const folder = path.dirname(productPath); + const platform = os.type(); //reference - https://nodejs.org/api/os.html#os_os_type if(platform === 'Windows_NT'){ return folder + "\\AutoLispDebugAdapter.exe"; }else if(platform === 'Darwin'){ @@ -22,11 +22,11 @@ export function calculateABSPathForDAP(productPath){ //calculate the process name for AutoCAD process picker export function calculateACADProcessName(pName){ - let processName = pName ? pName.replace(".exe", "") : ""; + const processName = pName ? pName.replace(".exe", "") : ""; if(processName !== "") return processName; - let platform = os.type(); //reference - https://nodejs.org/api/os.html#os_os_type + const platform = os.type(); //reference - https://nodejs.org/api/os.html#os_os_type if(platform === 'Windows_NT'){ return "acad"; @@ -38,8 +38,8 @@ export function calculateACADProcessName(pName){ } export function isSupportedLispFile(path){ - let ext = path.substring(path.length - 3, path.length).toUpperCase(); - let platform = os.type(); + const ext = path.substring(path.length - 3, path.length).toUpperCase(); + const platform = os.type(); if(platform === 'Windows_NT'){ return ext === "LSP" || ext === "MNL" || ext === "DCL"; }else if(platform === 'Darwin'){ diff --git a/extension/src/process/acadPicker.ts b/extension/src/process/acadPicker.ts index c3b1164e..0bb73c65 100644 --- a/extension/src/process/acadPicker.ts +++ b/extension/src/process/acadPicker.ts @@ -11,25 +11,25 @@ import * as vscode from 'vscode'; import * as os from 'os'; import { basename } from 'path'; import { getProcesses } from './processTree'; -import {ProcessPathCache} from "./processCache"; +import { ProcessPathCache } from "./processCache"; import { calculateACADProcessName } from '../platform'; import { acitiveDocHasValidLanguageId } from '../utils'; import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); -interface ProcessItem extends vscode.QuickPickItem{ - pidOrPort:string; - sortKey:number; +interface ProcessItem extends vscode.QuickPickItem { + pidOrPort: string; + sortKey: number; } -function getProcesspickerPlaceHolderStr(){ - let platform = os.type(); - if(platform === 'Windows_NT'){ +function getProcesspickerPlaceHolderStr() { + const platform = os.type(); + if (platform === 'Windows_NT') { return localize('autolispext.pickprocess.acad.win', "Pick the process to attach. Make sure AutoCAD, or one of the specialized toolsets, is running. Type acad and select it from the list."); - }else if(platform === 'Darwin'){ + } else if (platform === 'Darwin') { return localize('autolispext.pickprocess.acad.osx', "Pick the process to attach. Make sure AutoCAD is running. Type AutoCAD and select it from the list."); - }else{ + } else { return localize('autolispext.pickprocess.acad.other', "Pick the process to attach"); } } @@ -37,60 +37,59 @@ function getProcesspickerPlaceHolderStr(){ /** * Process picker command (for launch config variable) */ -export function pickProcess(ports:any, defaultPid: number): Promise { +export function pickProcess(defaultPid: number): Promise { - return listProcesses(ports).then(items => { - let options: vscode.QuickPickOptions = { + return listProcesses().then(items => { + const options: vscode.QuickPickOptions = { placeHolder: getProcesspickerPlaceHolderStr(), matchOnDescription: true, matchOnDetail: true - }; - if (defaultPid > 0) { - let foundItem = items.find(x => { - return x.pidOrPort === defaultPid.toString(); - }); - if (foundItem) - return foundItem.pidOrPort; - } - - let choosedItem = vscode.window.showQuickPick(items, options).then(item => item ? item.pidOrPort : null); + }; + if (defaultPid > 0) { + const foundItem = items.find(x => { + return x.pidOrPort === defaultPid.toString(); + }); + if (foundItem) + return foundItem.pidOrPort; + } + + const choosedItem = vscode.window.showQuickPick(items, options).then(item => item ? item.pidOrPort : null); return choosedItem; }).catch(err => { - let chooseItem = vscode.window.showErrorMessage(localize('autolispext.pickprocess.pickfailed', "Process picker failed ({0})", err.message), { modal: true }).then(_ => null); + const chooseItem = vscode.window.showErrorMessage(localize('autolispext.pickprocess.pickfailed', "Process picker failed ({0})", err.message), { modal: true }).then(); return chooseItem; }); } //---- private -function listProcesses(ports: boolean): Promise { +function listProcesses(): Promise { const items: ProcessItem[] = []; let seq = 0; // default sort key return getProcesses((pid: number, ppid: number, command: string, args: string, executablePath: string, - date?: number, title?: string) => { - let ProcessFilter; + date?: number, title?: string) => { let processName = ""; // debugger's process name - if(ProcessPathCache.globalAcadNameInUserAttachConfig){ + if (ProcessPathCache.globalAcadNameInUserAttachConfig) { processName = ProcessPathCache.globalAcadNameInUserAttachConfig; } else if (vscode.window.activeTextEditor && acitiveDocHasValidLanguageId()) { //read attach configuration from launch.json - let configurations:[] = vscode.workspace.getConfiguration("launch", vscode.window.activeTextEditor.document.uri).get("configurations"); + const configurations: [] = vscode.workspace.getConfiguration("launch", vscode.window.activeTextEditor.document.uri).get("configurations"); let attachLispConfig; - configurations.forEach(function(item){ - if(item["type"] === "attachlisp"){ + configurations.forEach(function (item) { + if (item["type"] === "attachlisp") { attachLispConfig = item; } }); - if(attachLispConfig && attachLispConfig["attributes"]){ + if (attachLispConfig && attachLispConfig["attributes"]) { processName = attachLispConfig["attributes"]["process"] ? attachLispConfig["attributes"]["process"] : ""; } } - - ProcessFilter = new RegExp('^(?:' + calculateACADProcessName(processName) + '|iojs)$', 'i'); + + const ProcessFilter = new RegExp('^(?:' + calculateACADProcessName(processName) + '|iojs)$', 'i');; if (process.platform === 'win32' && executablePath.indexOf('\\??\\') === 0) { // remove leading device specifier @@ -99,19 +98,19 @@ function listProcesses(ports: boolean): Promise { const executable_name = basename(executablePath, '.exe'); - let port = -1; - let protocol: string | undefined = ''; - let usePort = false; + const port = -1; + const protocol: string | undefined = ''; + const usePort = false; let description = ''; let pidOrPort = ''; let titleField = ''; - if(title) - titleField = title; + if (title) + titleField = title; else - titleField = basename(executablePath, '.exe'); + titleField = basename(executablePath, '.exe'); if (usePort) { if (protocol === 'inspector') { @@ -129,14 +128,14 @@ function listProcesses(ports: boolean): Promise { let addintolist = false; if (ProcessFilter) { - if(ProcessFilter.test(executable_name)){ + if (ProcessFilter.test(executable_name)) { addintolist = true; } - }else{ + } else { addintolist = true; } - if(addintolist){ + if (addintolist) { ProcessPathCache.addGlobalProductProcessPathArr(executablePath, pid); description = localize('autolispext.pickprocess.process.id.singal', "process id: {0} ({1})", pid, 'SIGUSR1'); pidOrPort = pid.toString(); diff --git a/extension/src/process/processCache.ts b/extension/src/process/processCache.ts index 47999ba3..3ae87924 100644 --- a/extension/src/process/processCache.ts +++ b/extension/src/process/processCache.ts @@ -30,7 +30,7 @@ export class ProcessPathCache{ } }); if(!exist){ - let newPathPid = new ProductProcessPathPid(path, pid); + const newPathPid = new ProductProcessPathPid(path, pid); ProcessPathCache.globalProductProcessPathArr.push(newPathPid); } } diff --git a/extension/src/process/processTree.ts b/extension/src/process/processTree.ts index dd2540e8..eb47d41e 100644 --- a/extension/src/process/processTree.ts +++ b/extension/src/process/processTree.ts @@ -45,20 +45,20 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a else acadExeName = 'acad'; - const CMD_PAT = /^(.*)\s+([0-9]+)\.[0-9]+[+-][0-9]+\s+(.*)\s+([0-9]+)\s+([0-9]+)$/; + //const CMD_PAT = /^(.*)\s+([0-9]+)\.[0-9]+[+-][0-9]+\s+(.*)\s+([0-9]+)\s+([0-9]+)$/; //const CMD_PAT = /^(.*)\s+([0-9]+)\.[0-9]+[+-][0-9]+\s+([0-9]+)\s+([0-9]+)$/; const acadProcFinder = join(__dirname, 'acadProcessFinder.exe'); proc = spawn(acadProcFinder, [acadExeName]); proc.stdout.setEncoding('utf8'); proc.stdout.on('data', lines(line => { //let matches = _.compact(line.trim().split(' ')); - let cells = line.split('\t'); + const cells = line.split('\t'); if (cells.length == 5) { - let exePath = cells[0]; - let startTime = cells[1]; - let args = cells[2]; - let pid = cells[3]; - let title = cells[4]; + const exePath = cells[0]; + const startTime = cells[1]; + const args = cells[2]; + const pid = cells[3]; + const title = cells[4]; one(Number(pid), -1, exePath, args, exePath, Number(startTime), title); } diff --git a/extension/src/project/addFile2Project.ts b/extension/src/project/addFile2Project.ts index a8e3a69a..6e649675 100644 --- a/extension/src/project/addFile2Project.ts +++ b/extension/src/project/addFile2Project.ts @@ -9,19 +9,19 @@ import * as path from 'path' export async function AddFile2Project(fileList?: vscode.Uri[]) { try { if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.addfile.openproject", "A project must be open before you can add a file."); + const msg = localize("autolispext.project.addfile.openproject", "A project must be open before you can add a file."); return Promise.reject(msg); } - let selectedFiles = fileList ?? await SelectLspFiles(); + const selectedFiles = fileList ?? await SelectLspFiles(); if (!selectedFiles) return; //user has cancelled the open file dialog - let addedFiles = []; - for (let file of selectedFiles) { - let fileUpper = file.fsPath.toUpperCase(); + const addedFiles = []; + for (const file of selectedFiles) { + const fileUpper = file.fsPath.toUpperCase(); if (fileUpper.endsWith(".LSP") == false) { - let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); + const msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); return Promise.reject(msg); } @@ -30,19 +30,19 @@ export async function AddFile2Project(fileList?: vscode.Uri[]) { //Legacy IDE doesn't allow user to add hello.lsp.lsp into a project, but if there happen to be a file // named hello.lsp, it will add hello.lsp into project, and this is wrong. //To keep consistency with legacy IDE, we have to reject files of this kind. - let msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); + const msg = localize("autolispext.project.addfile.onlylspallowed", "Only LSP files are allowed."); return Promise.reject(msg); } if (isFileAlreadyInProject(file.fsPath, ProjectTreeProvider.instance().projectNode)) { - let msg = localize("autolispext.project.addfile.filealreadyexist", "File already exists in this project: "); + const msg = localize("autolispext.project.addfile.filealreadyexist", "File already exists in this project: "); vscode.window.showInformationMessage(msg + file.fsPath); continue; } if (hasFileWithSameName(file.fsPath, ProjectTreeProvider.instance().projectNode)) { - let msg = localize("autolispext.project.addfile.samenameexist", "File with the same name already exists in this project: "); + const msg = localize("autolispext.project.addfile.samenameexist", "File with the same name already exists in this project: "); vscode.window.showInformationMessage(msg + path.basename(file.fsPath)); continue; @@ -65,12 +65,12 @@ export async function AddFile2Project(fileList?: vscode.Uri[]) { } function hasMultipleExtensions(filePath: string): boolean { - let ext1 = path.extname(filePath); + const ext1 = path.extname(filePath); if (!ext1) return false; - let leftSide = filePath.substring(0, filePath.length - ext1.length); - let ext2 = path.extname(leftSide); + const leftSide = filePath.substring(0, filePath.length - ext1.length); + const ext2 = path.extname(leftSide); if (ext2) return true; @@ -79,7 +79,7 @@ function hasMultipleExtensions(filePath: string): boolean { } async function SelectLspFiles() { - let label = localize("autolispext.project.addfile.openlabel", "Add to Project"); + const label = localize("autolispext.project.addfile.openlabel", "Add to Project"); const filterDesc = localize("autolispext.project.addfile.sourcefilefilter", "AutoLISP Source Files"); const options: vscode.OpenDialogOptions = { canSelectMany: true, @@ -88,7 +88,7 @@ async function SelectLspFiles() { }; options.filters[filterDesc] = ['lsp']; - let fileUris = await vscode.window.showOpenDialog(options); + const fileUris = await vscode.window.showOpenDialog(options); if (fileUris && fileUris.length > 0) return Promise.resolve(fileUris); } diff --git a/extension/src/project/checkUnsavedChanges.ts b/extension/src/project/checkUnsavedChanges.ts index c2dabe1a..1382b1f9 100644 --- a/extension/src/project/checkUnsavedChanges.ts +++ b/extension/src/project/checkUnsavedChanges.ts @@ -17,7 +17,7 @@ export async function CheckUnsavedChanges(): Promise { // get unsaved source files const unsavedFiles = vscode.workspace.textDocuments.filter(file => { if (file.isDirty) { - for (let fileNode of root.sourceFiles) { + for (const fileNode of root.sourceFiles) { if (pathEqual(fileNode.filePath, file.fileName, false)) { return true; } @@ -28,15 +28,15 @@ export async function CheckUnsavedChanges(): Promise { // prompt user if there are unsaved changes if (root.projectModified || unsavedFiles.length > 0) { - let msg = localize("autolispext.project.checkunsavedchanges.message", "Unsaved changes found with the project or the files in the project.\nDo you want to save the changes?"); - let save = localize("autolispext.project.checkunsavedchanges.save", "Save"); - let dontSave = localize("autolispext.project.checkunsavedchanges.dontsave", "Don't Save"); + const msg = localize("autolispext.project.checkunsavedchanges.message", "Unsaved changes found with the project or the files in the project.\nDo you want to save the changes?"); + const save = localize("autolispext.project.checkunsavedchanges.save", "Save"); + const dontSave = localize("autolispext.project.checkunsavedchanges.dontsave", "Don't Save"); const selection = await vscode.window.showWarningMessage(msg, {modal: true}, save, dontSave); if (!selection) { return true; } if (selection == save) { - for (let file of unsavedFiles) { + for (const file of unsavedFiles) { file.save(); } if (root.projectModified) { diff --git a/extension/src/project/createProject.ts b/extension/src/project/createProject.ts index 762ed92c..f1965732 100644 --- a/extension/src/project/createProject.ts +++ b/extension/src/project/createProject.ts @@ -9,7 +9,7 @@ import * as nls from 'vscode-nls'; const localize = nls.loadMessageBundle(); export async function getNewProjectFilePath() { - let label = localize("autolispext.project.createproject.createlabel", "Create"); + const label = localize("autolispext.project.createproject.createlabel", "Create"); const filterDesc = localize("autolispext.project.createproject.projectfilter", "AutoLISP Project Files"); const options: vscode.SaveDialogOptions = { saveLabel: label, @@ -17,12 +17,12 @@ export async function getNewProjectFilePath() { }; options.filters[filterDesc] = ['prj']; - let fileUri = await vscode.window.showSaveDialog(options); + const fileUri = await vscode.window.showSaveDialog(options); if (fileUri) { if (path.basename(fileUri.fsPath).indexOf(' ') === -1) { return Promise.resolve(fileUri); } else { - let msg = localize("autolispext.project.createproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); + const msg = localize("autolispext.project.createproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); return Promise.reject(msg); } } else { @@ -31,9 +31,9 @@ export async function getNewProjectFilePath() { } export async function createProject(prjFilePath: string) { - let prjPathUpper = prjFilePath.toUpperCase(); + const prjPathUpper = prjFilePath.toUpperCase(); if (prjPathUpper.endsWith(".PRJ") == false) { - let msg = localize("autolispext.project.createproject.onlyprjallowed", "Only PRJ files are allowed."); + const msg = localize("autolispext.project.createproject.onlyprjallowed", "Only PRJ files are allowed."); return Promise.reject(msg) } @@ -44,7 +44,7 @@ export async function createProject(prjFilePath: string) { fileName = fileName.substring(0, fileName.length - 4); //create the project node - let root = new ProjectNode(); + const root = new ProjectNode(); root.projectName = fileName; root.projectFilePath = prjFilePath; root.projectDirectory = path.dirname(prjFilePath); diff --git a/extension/src/project/excludeFile.ts b/extension/src/project/excludeFile.ts index edb66bbd..2cb089de 100644 --- a/extension/src/project/excludeFile.ts +++ b/extension/src/project/excludeFile.ts @@ -6,13 +6,13 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export async function excludeFromProject(selected: LspFileNode) { if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.excludefile.openproject", "A project must be open before you can exclude a file."); + const msg = localize("autolispext.project.excludefile.openproject", "A project must be open before you can exclude a file."); return Promise.reject(msg); } let index2Del = -1; for (let i = 0; i < ProjectTreeProvider.instance().projectNode.sourceFiles.length; i++) { - let fileNode = ProjectTreeProvider.instance().projectNode.sourceFiles[i]; + const fileNode = ProjectTreeProvider.instance().projectNode.sourceFiles[i]; if(pathEqual(selected.filePath, fileNode.filePath, false) == false) continue; @@ -23,7 +23,7 @@ export async function excludeFromProject(selected: LspFileNode) { } if (index2Del < 0) { - let msg = localize("autolispext.project.excludefile.filenotexist", "File to exclude doesn't exist in the current project."); + const msg = localize("autolispext.project.excludefile.filenotexist", "File to exclude doesn't exist in the current project."); return Promise.reject(msg); } diff --git a/extension/src/project/findReplace/applyReplacement.ts b/extension/src/project/findReplace/applyReplacement.ts index 96cf4de6..368670c0 100644 --- a/extension/src/project/findReplace/applyReplacement.ts +++ b/extension/src/project/findReplace/applyReplacement.ts @@ -2,7 +2,7 @@ import * as fs from 'fs-extra'; import * as vscode from 'vscode' import { FileNode } from './searchTree'; -import { getTmpFilePath, getDocument } from '../../utils'; +import { getDocument } from '../../utils'; import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); @@ -13,7 +13,7 @@ export async function applyReplacementInFile(filePlan: FileNode) { return; } - let doc = getDocument(filePlan.filePath); + const doc = getDocument(filePlan.filePath); let data = null; if (doc != null) @@ -22,10 +22,12 @@ export async function applyReplacementInFile(filePlan: FileNode) { data = fs.readFileSync(filePlan.filePath).toString(); let newFileContent = ''; - for (let lineNum = 0; lineNum >= 0; lineNum++) { - let newlinePos = data.indexOf('\n'); + let lineNum = 0; + while (lineNum >= 0) { + const newlinePos = data.indexOf('\n'); if (newlinePos < 0) { //this is the last line + lineNum = -1 newFileContent += chooseLineContent(lineNum, data, filePlan); break; } @@ -47,10 +49,11 @@ export async function applyReplacementInFile(filePlan: FileNode) { newFileContent += '\r\n'; data = data.substring(newlinePos + 1); + lineNum++; } } - let done = await applyChangeInEditor(filePlan.filePath, newFileContent); + const done = await applyChangeInEditor(filePlan.filePath, newFileContent); if (done) return; @@ -66,22 +69,22 @@ export async function applyReplacementInFile(filePlan: FileNode) { //throws an error if the editor failed to replace text async function applyChangeInEditor(filePath: string, fileContent: string) { - let doc = getDocument(filePath); + const doc = getDocument(filePath); if (doc != null) { //ok, there's an editor shown for the same file - let docRange = doc.validateRange( + const docRange = doc.validateRange( new vscode.Range( new vscode.Position(0, 0), new vscode.Position(Number.MAX_VALUE, Number.MAX_VALUE) )); - let edit = new vscode.WorkspaceEdit(); + const edit = new vscode.WorkspaceEdit(); edit.replace(doc.uri, docRange, fileContent); - let succ = await vscode.workspace.applyEdit(edit); + const succ = await vscode.workspace.applyEdit(edit); if (!succ) { - let msg = localize("autolispext.project.findreplace.applyreplacement.replacetextfailed", "Failed to replace text: "); + const msg = localize("autolispext.project.findreplace.applyreplacement.replacetextfailed", "Failed to replace text: "); throw new Error(msg + filePath); } @@ -105,8 +108,8 @@ function applyChangeByFile(filePath: string, fileContent: string): string { } function chooseLineContent(line: number, oldLineText: string, replNode: FileNode) { - for (let finding of replNode.findings) { - let rgLine = finding.line - 1;//rg.exe line and column start with 1 + for (const finding of replNode.findings) { + const rgLine = finding.line - 1;//rg.exe line and column start with 1 if (line != rgLine) continue; diff --git a/extension/src/project/findReplace/clearResults.ts b/extension/src/project/findReplace/clearResults.ts index 52066726..bf992413 100644 --- a/extension/src/project/findReplace/clearResults.ts +++ b/extension/src/project/findReplace/clearResults.ts @@ -13,7 +13,7 @@ export function clearSearchResultWithError(err) { try { SearchTreeProvider.instance.clear(); - let summary = new SummaryNode(); + const summary = new SummaryNode(); summary.summary = err; summary.makeTooltip(SearchTreeProvider.instance.lastSearchOption, null); @@ -31,7 +31,7 @@ let isSearching: boolean = false; //this method is expected to never throw error, as it will be the first method to call in many use cases export function getWarnIsSearching(): boolean { if (isSearching) { - let msg = localize("autolispext.project.findReplace.clearresults.issearching", "A search is in progress, wait until the current search has completed and try again."); + const msg = localize("autolispext.project.findReplace.clearresults.issearching", "A search is in progress, wait until the current search has completed and try again."); vscode.window.showInformationMessage(msg); return true; } diff --git a/extension/src/project/findReplace/encoding.ts b/extension/src/project/findReplace/encoding.ts index 54efe9f2..7726cc99 100644 --- a/extension/src/project/findReplace/encoding.ts +++ b/extension/src/project/findReplace/encoding.ts @@ -2,13 +2,13 @@ import * as jschardet from "jschardet" import * as fs from "fs" //encodings that are listed on jschardet, but proved unsupported by ripgrep: -let unsupportedEncodings = ["EUC-TW", "HZ-GB-2312", "ISO-2022-CN", "ISO-2022-KR", "MacCyrillic", "IBM-855"] +const unsupportedEncodings = ["EUC-TW", "HZ-GB-2312", "ISO-2022-CN", "ISO-2022-KR", "MacCyrillic", "IBM-855"] // the caller should make sure the file does exists. export function detectEncoding(filePath: string): string { try { - let buf = fs.readFileSync(filePath); - let ret = jschardet.detect(buf); + const buf = fs.readFileSync(filePath); + const ret = jschardet.detect(buf); // jschardet supports a few encodings, e.g. UTF-32, which are not supported by rg.exe; // passing them to rg.exe will cause handled error, which will clean up the search tree; diff --git a/extension/src/project/findReplace/findInProject.ts b/extension/src/project/findReplace/findInProject.ts index 160c3763..d4327383 100644 --- a/extension/src/project/findReplace/findInProject.ts +++ b/extension/src/project/findReplace/findInProject.ts @@ -10,279 +10,279 @@ import { applyReplacementInFile } from './applyReplacement'; import { setIsSearching } from './clearResults'; import * as nls from 'vscode-nls'; import { detectEncoding } from './encoding'; -const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); +import * as fs from 'fs-extra' +import * as osLocale from 'os-locale' -const fs = require('fs-extra') +const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); -const osLocale = require('os-locale'); const encodings = new Map([["zh-CN", "gb2312"], ["zh-TW", "big5"], ["ja-JP", "shift-jis"], ["ko-KR", "ksc5601"]]); export async function findInProject() { - //check if there's a opened project - if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.find.openproject", "A project must be open before you can search for a text string."); - vscode.window.showInformationMessage(msg); - return; - } - - //get search option - let title = localize("autolispext.project.find.title", "Find in Project"); - let hint = localize("autolispext.project.find.hint", "Type a text string to find, and press Enter."); - let opt = await getSearchOption(title, hint); - if (opt.isKeywordProvided() == false) - return; - - opt.isReplace = false; - opt.stopRequested = false; - - //find in project - let finder = new FindInProject(); - await finder.execute(opt, ProjectTreeProvider.instance().projectNode); - - //update the UI - SearchTreeProvider.instance.reset(finder.resultByFile, finder.summaryNode, opt); + //check if there's a opened project + if (ProjectTreeProvider.hasProjectOpened() == false) { + const msg = localize("autolispext.project.find.openproject", "A project must be open before you can search for a text string."); + vscode.window.showInformationMessage(msg); + return; + } + + //get search option + const title = localize("autolispext.project.find.title", "Find in Project"); + const hint = localize("autolispext.project.find.hint", "Type a text string to find, and press Enter."); + const opt = await getSearchOption(title, hint); + if (opt.isKeywordProvided() == false) + return; + + opt.isReplace = false; + opt.stopRequested = false; + + //find in project + const finder = new FindInProject(); + await finder.execute(opt, ProjectTreeProvider.instance().projectNode); + + //update the UI + SearchTreeProvider.instance.reset(finder.resultByFile, finder.summaryNode, opt); } export class FindInProject { - public keyword: string = ''; - public projectName: string = ''; - public resultByFile: FileNode[] = []; - public summaryNode: SummaryNode = null; - - private timeStarted = undefined; - - public async execute(searchOption: SearchOption, prjNode: ProjectNode) { - if (os.platform() == 'win32') { - if (os.arch() != 'x64') { - let msg = localize("autolispext.project.find.supportos", "Find & Replace is supported only on 64-bit systems."); - return Promise.reject(msg); - } - } - - this.timeStarted = Date.now(); - - setIsSearching(true); - - try { - this.keyword = searchOption.keyword; - this.projectName = prjNode.projectName; - - this.resultByFile.splice(0, this.resultByFile.length); - this.summaryNode = new SummaryNode(); - // make default tooltip - this.summaryNode.makeTooltip(searchOption, prjNode); - - //update the search tree with some progress - let summary = localize("autolispext.project.find.inprogress", "In progress... "); - this.summaryNode.summary = summary; - SearchTreeProvider.instance.reset(this.resultByFile, this.summaryNode, searchOption); - - let exceedMaxResults = false; - let totalFiles = 0; - let totalLines = 0; - - let found = localize("autolispext.project.find.found", "Found "); - let lines = localize("autolispext.project.find.results", " result(s) in "); - let files = localize("autolispext.project.find.files", " file(s):"); - for (let srcFile of prjNode.sourceFiles) { - if (SearchOption.activeInstance.stopRequested) - break; - - this.updateProgress(summary, found, lines, files, totalLines, totalFiles, searchOption); - - if (fs.existsSync(srcFile.filePath) == false) - continue; - - let file2Search = saveOpenDoc2Tmp(srcFile.filePath); - try { - let encodingName = detectEncoding(file2Search); - - let ret = null; - if (encodingName) { - ret = await this.findWithEncoding(searchOption, file2Search, encodingName); - } - - if (!ret) { - //try to find with system locale: - ret = await this.findWithLocale(searchOption, file2Search); - } - - if (!ret) - continue; - - if (ret.failed || ret.killed || ret.timedOut || (ret.code != 0)) - return Promise.reject(ret.stderr); - - if (SearchOption.activeInstance.stopRequested) - break; //if user has requested to stop, there's no need to create finding nodes - - let findings = this.parseResult(ret.stdout, srcFile.filePath); - if (findings.length <= 0) - continue; - - if (totalLines + findings.length > 10000) { - exceedMaxResults = true; - break; - } - - let fileNode = new FileNode() - fileNode.filePath = srcFile.filePath; - fileNode.shortPath = srcFile.getDisplayText(); - fileNode.findings = findings; - - this.resultByFile.push(fileNode); - - if (searchOption.isReplace) - await applyReplacementInFile(fileNode); - - totalFiles++; - totalLines += findings.length; - } catch (ex) { - if (ex.message === "stdout maxBuffer exceeded") { - exceedMaxResults = true; - break; - } - throw ex; - } - finally { - if ((file2Search != srcFile.filePath) && fs.existsSync(file2Search)) { - //the file searched is a temp file; remove it; - fs.removeSync(file2Search); - } - } - } - - if (SearchOption.activeInstance.stopRequested) { - this.summaryNode.summary = localize("autolispext.project.find.stopped", "Find stopped. "); - } else { - this.summaryNode.summary = ''; - } - - if (exceedMaxResults) { - this.summaryNode.summary += localize("autolispext.project.find.exceedmaxresults", "Limit of search results exceeded. Refine your search to narrow down the results. "); - } - - if (totalLines <= 0) { - if (!exceedMaxResults) { - this.summaryNode.summary += localize("autolispext.project.find.noresults", "No results found."); - } - } - else { - this.summaryNode.summary += found + `${totalLines}` + lines + `${totalFiles}` + files; - } - // update tooltip after search is done - this.summaryNode.makeTooltip(searchOption, prjNode); - return Promise.resolve(); - } - catch (err) { - return Promise.reject(err); - } - finally { - setIsSearching(false); - } - } - - private updateProgress(summary: string, found: string, lines: string, files: string, - totalLines: number, totalFiles: number, searchOption: SearchOption) { - - let now = Date.now(); - if (now - this.timeStarted < 500) - return;//less than 0.5 second since the last UI update - - //update the search tree with some progress - this.timeStarted = now; - - this.summaryNode.summary = summary - + found + `${totalLines}` + lines + `${totalFiles}` + files; - SearchTreeProvider.instance.reset(this.resultByFile, this.summaryNode, searchOption); - } - - private async findWithEncoding(searchOption: SearchOption, file2Search: string, encoding: string = "utf8") { - try { - let ret = await findInFile(searchOption, file2Search, encoding); - return ret; - } catch (ex) { - if (ex.hasOwnProperty('stderr') && (!ex.stderr) && (ex.code == 1) && ex.failed) { - return null; - } - throw ex; - } - } - - //for Mac OS, the "system locale" is determined by both of the preferred language + region - //e.g., to get "zh-CN" from osLocale() on Mac OS, the settings are: - // 1. preferred language: Simplified Chinese - // 2. region: China Mainland - private async findWithLocale(searchOption: SearchOption, file2Search: string) { - const loc = await osLocale(); - let encoding = encodings.get(loc); - - if (!encoding) { - encoding = "windows-1252"; - } - - let ret = await this.findWithEncoding(searchOption, file2Search, encoding); - return ret; - } - - private parseResult(result: string, file: string) { - let stdout = result.split('\r\n').join('\n'); - - let lines = stdout.split('\n'); - - let findings: FindingNode[] = []; - - for (let oneLine of lines) { - if (!oneLine) { - console.log("an empty match is not expected."); - continue; - } - - //it's [line]:[column]:[text] - let cells = oneLine.split(':'); - - if ((!cells) || (cells.length < 3)) { - console.log("a match is in unexpected format."); - continue; - } - - let line = Number(cells[0]); - let colInBytes = Number(cells[1]); - - cells.splice(0, 2); - let text = cells.join(':');//it's possible that the matched line text contains ":" - - //get column by character index instead of byte index - let col = -1; - let bytes = 1; - for (let j = 0; j < text.length; j++) { - if (bytes == colInBytes) { - col = j + 1; - break; - } - let code = text.charCodeAt(j); - if (code <= 0x007f) { - bytes += 1; - } else if (code <= 0x07ff) { - bytes += 2; - } else if (code <= 0xffff) { - bytes += 3; - } else { - bytes += 4; - } - } - - let single = new FindingNode(); - single.line = line; - single.column = col; - single.text = text; - single.filePath = file; - - findings.push(single); - } - - return findings; - } + public keyword: string = ''; + public projectName: string = ''; + public resultByFile: FileNode[] = []; + public summaryNode: SummaryNode = null; + + private timeStarted = undefined; + + public async execute(searchOption: SearchOption, prjNode: ProjectNode) { + if (os.platform() == 'win32') { + if (os.arch() != 'x64') { + const msg = localize("autolispext.project.find.supportos", "Find & Replace is supported only on 64-bit systems."); + return Promise.reject(msg); + } + } + + this.timeStarted = Date.now(); + + setIsSearching(true); + + try { + this.keyword = searchOption.keyword; + this.projectName = prjNode.projectName; + + this.resultByFile.splice(0, this.resultByFile.length); + this.summaryNode = new SummaryNode(); + // make default tooltip + this.summaryNode.makeTooltip(searchOption, prjNode); + + //update the search tree with some progress + const summary = localize("autolispext.project.find.inprogress", "In progress... "); + this.summaryNode.summary = summary; + SearchTreeProvider.instance.reset(this.resultByFile, this.summaryNode, searchOption); + + let exceedMaxResults = false; + let totalFiles = 0; + let totalLines = 0; + + const found = localize("autolispext.project.find.found", "Found "); + const lines = localize("autolispext.project.find.results", " result(s) in "); + const files = localize("autolispext.project.find.files", " file(s):"); + for (const srcFile of prjNode.sourceFiles) { + if (SearchOption.activeInstance.stopRequested) + break; + + this.updateProgress(summary, found, lines, files, totalLines, totalFiles, searchOption); + + if (fs.existsSync(srcFile.filePath) == false) + continue; + + const file2Search = saveOpenDoc2Tmp(srcFile.filePath); + try { + const encodingName = detectEncoding(file2Search); + + let ret = null; + if (encodingName) { + ret = await this.findWithEncoding(searchOption, file2Search, encodingName); + } + + if (!ret) { + //try to find with system locale: + ret = await this.findWithLocale(searchOption, file2Search); + } + + if (!ret) + continue; + + if (ret.failed || ret.killed || ret.timedOut || (ret.code != 0)) + return Promise.reject(ret.stderr); + + if (SearchOption.activeInstance.stopRequested) + break; //if user has requested to stop, there's no need to create finding nodes + + const findings = this.parseResult(ret.stdout, srcFile.filePath); + if (findings.length <= 0) + continue; + + if (totalLines + findings.length > 10000) { + exceedMaxResults = true; + break; + } + + const fileNode = new FileNode() + fileNode.filePath = srcFile.filePath; + fileNode.shortPath = srcFile.getDisplayText(); + fileNode.findings = findings; + + this.resultByFile.push(fileNode); + + if (searchOption.isReplace) + await applyReplacementInFile(fileNode); + + totalFiles++; + totalLines += findings.length; + } catch (ex) { + if (ex.message === "stdout maxBuffer exceeded") { + exceedMaxResults = true; + break; + } + throw ex; + } + finally { + if ((file2Search != srcFile.filePath) && fs.existsSync(file2Search)) { + //the file searched is a temp file; remove it; + fs.removeSync(file2Search); + } + } + } + + if (SearchOption.activeInstance.stopRequested) { + this.summaryNode.summary = localize("autolispext.project.find.stopped", "Find stopped. "); + } else { + this.summaryNode.summary = ''; + } + + if (exceedMaxResults) { + this.summaryNode.summary += localize("autolispext.project.find.exceedmaxresults", "Limit of search results exceeded. Refine your search to narrow down the results. "); + } + + if (totalLines <= 0) { + if (!exceedMaxResults) { + this.summaryNode.summary += localize("autolispext.project.find.noresults", "No results found."); + } + } + else { + this.summaryNode.summary += found + `${totalLines}` + lines + `${totalFiles}` + files; + } + // update tooltip after search is done + this.summaryNode.makeTooltip(searchOption, prjNode); + return Promise.resolve(); + } + catch (err) { + return Promise.reject(err); + } + finally { + setIsSearching(false); + } + } + + private updateProgress(summary: string, found: string, lines: string, files: string, + totalLines: number, totalFiles: number, searchOption: SearchOption) { + + const now = Date.now(); + if (now - this.timeStarted < 500) + return;//less than 0.5 second since the last UI update + + //update the search tree with some progress + this.timeStarted = now; + + this.summaryNode.summary = summary + + found + `${totalLines}` + lines + `${totalFiles}` + files; + SearchTreeProvider.instance.reset(this.resultByFile, this.summaryNode, searchOption); + } + + private async findWithEncoding(searchOption: SearchOption, file2Search: string, encoding: string = "utf8") { + try { + const ret = await findInFile(searchOption, file2Search, encoding); + return ret; + } catch (ex) { + if (Object.prototype.hasOwnProperty.call(ex, 'stderr') && (!ex.stderr) && (ex.code == 1) && ex.failed) { + return null; + } + throw ex; + } + } + + //for Mac OS, the "system locale" is determined by both of the preferred language + region + //e.g., to get "zh-CN" from osLocale() on Mac OS, the settings are: + // 1. preferred language: Simplified Chinese + // 2. region: China Mainland + private async findWithLocale(searchOption: SearchOption, file2Search: string) { + const loc = osLocale.default(); + let encoding = encodings.get(loc); + + if (!encoding) { + encoding = "windows-1252"; + } + + const ret = await this.findWithEncoding(searchOption, file2Search, encoding); + return ret; + } + + private parseResult(result: string, file: string) { + const stdout = result.split('\r\n').join('\n'); + + const lines = stdout.split('\n'); + + const findings: FindingNode[] = []; + + for (const oneLine of lines) { + if (!oneLine) { + console.log("an empty match is not expected."); + continue; + } + + //it's [line]:[column]:[text] + const cells = oneLine.split(':'); + + if ((!cells) || (cells.length < 3)) { + console.log("a match is in unexpected format."); + continue; + } + + const line = Number(cells[0]); + const colInBytes = Number(cells[1]); + + cells.splice(0, 2); + const text = cells.join(':');//it's possible that the matched line text contains ":" + + //get column by character index instead of byte index + let col = -1; + let bytes = 1; + for (let j = 0; j < text.length; j++) { + if (bytes == colInBytes) { + col = j + 1; + break; + } + const code = text.charCodeAt(j); + if (code <= 0x007f) { + bytes += 1; + } else if (code <= 0x07ff) { + bytes += 2; + } else if (code <= 0xffff) { + bytes += 3; + } else { + bytes += 4; + } + } + + const single = new FindingNode(); + single.line = line; + single.column = col; + single.text = text; + single.filePath = file; + + findings.push(single); + } + + return findings; + } } diff --git a/extension/src/project/findReplace/openSearchResult.ts b/extension/src/project/findReplace/openSearchResult.ts index 4276807f..bc148c3c 100644 --- a/extension/src/project/findReplace/openSearchResult.ts +++ b/extension/src/project/findReplace/openSearchResult.ts @@ -10,20 +10,20 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export async function openSearchResult(clickedTreeItem: FindingNode, searchOpt: SearchOption) { try { - let isSingleResult = clickedTreeItem instanceof FindingNode; + const isSingleResult = clickedTreeItem instanceof FindingNode; if (!isSingleResult) return; - let finding = clickedTreeItem as FindingNode; + const finding = clickedTreeItem as FindingNode; const exists = fs.existsSync(finding.filePath); if (exists == false) { - let msg = localize("autolispext.project.findreplace.opensearchresult.filenotexist", "File doesn't exist: "); + const msg = localize("autolispext.project.findreplace.opensearchresult.filenotexist", "File doesn't exist: "); return Promise.reject(msg + finding.filePath); } - let line = finding.line - 1; //rp line starts with 1 but vscode starts with 0 - let col = finding.column - 1; + const line = finding.line - 1; //rp line starts with 1 but vscode starts with 0 + const col = finding.column - 1; let textLen = 0; if (searchOpt.isReplace == false) { @@ -36,7 +36,7 @@ export async function openSearchResult(clickedTreeItem: FindingNode, searchOpt: } else { reg = new RegExp(searchOpt.keyword, 'i'); } - let matches = reg.exec(finding.text); + const matches = reg.exec(finding.text); if (matches.length <= 0) { console.log("Can't determine keyword length with regular expression enabled."); } else { @@ -53,22 +53,22 @@ export async function openSearchResult(clickedTreeItem: FindingNode, searchOpt: if (!doc) { doc = ReadonlyDocument.open(finding.filePath); if (!doc) { - let msg = localize("autolispext.project.findreplace.opensearchresult.openfailed", "File couldn't be opened: "); + const msg = localize("autolispext.project.findreplace.opensearchresult.openfailed", "File couldn't be opened: "); return Promise.reject(msg + finding.filePath); } } // get text inside the searched range of the document and don't select the range if the text is changed since last search - let start = new vscode.Position(line, col); - let end = new vscode.Position(line, col + textLen); + const start = new vscode.Position(line, col); + const end = new vscode.Position(line, col + textLen); let range = new vscode.Range(start, end); - let text = doc.getText(range); - let textFound = finding.text.substring(col, textLen) + const text = doc.getText(range); + const textFound = finding.text.substring(col, textLen) if (text != textFound) { range = range.with(start, start); } - let opt = { "selection": range, "preserveFocus": true }; + const opt = { "selection": range, "preserveFocus": true }; return vscode.commands.executeCommand("vscode.open", vscode.Uri.file(finding.filePath), opt); diff --git a/extension/src/project/findReplace/optionButton.ts b/extension/src/project/findReplace/optionButton.ts index bc88d10e..832c93eb 100644 --- a/extension/src/project/findReplace/optionButton.ts +++ b/extension/src/project/findReplace/optionButton.ts @@ -35,29 +35,29 @@ export class optionButton implements vscode.QuickInputButton { public static getButtons() { if (!optionButton.matchCaseBtn) { - let matchCase = localize("autolispext.project.findreplace.optionbutton.matchcase", "Match Case"); + const matchCase = localize("autolispext.project.findreplace.optionbutton.matchcase", "Match Case"); optionButton.matchCaseBtn = new optionButton(IconUris.matchCase(true), IconUris.matchCase(false), SearchOption.activeInstance.matchCase, matchCase, optionButton.name_MatchCase); - let matchWholeWord = localize("autolispext.project.findreplace.optionbutton.matchwholeword", "Match Whole Word"); + const matchWholeWord = localize("autolispext.project.findreplace.optionbutton.matchwholeword", "Match Whole Word"); optionButton.matchWordBtn = new optionButton(IconUris.matchWord(true), IconUris.matchWord(false), SearchOption.activeInstance.matchWholeWord, matchWholeWord, optionButton.name_MatchWord); - let regExp = localize("autolispext.project.findreplace.optionbutton.regexp", "Use Regular Expression"); + const regExp = localize("autolispext.project.findreplace.optionbutton.regexp", "Use Regular Expression"); optionButton.useRegularExprBtn = new optionButton(IconUris.useRegularExpr(true), IconUris.useRegularExpr(false), SearchOption.activeInstance.useRegularExpr, regExp, optionButton.name_UseRegularExpr); - let closeTooltip = localize("autolispext.project.findreplace.optionbutton.close", "Close"); + const closeTooltip = localize("autolispext.project.findreplace.optionbutton.close", "Close"); optionButton.closeBtn = new optionButton(IconUris.closeUri(), null, true, closeTooltip, optionButton.name_Close); } - let len = optionButton.buttons.length; + const len = optionButton.buttons.length; optionButton.buttons.splice(0, len); optionButton.buttons.push(optionButton.matchCaseBtn.updateStatus(SearchOption.activeInstance.matchCase)); diff --git a/extension/src/project/findReplace/options.ts b/extension/src/project/findReplace/options.ts index 2a82e97d..24385cd6 100644 --- a/extension/src/project/findReplace/options.ts +++ b/extension/src/project/findReplace/options.ts @@ -45,7 +45,7 @@ export async function getSearchOption(title: string, hint: string) { quickpick.onDidTriggerButton(async e => { if (e instanceof optionButton) { - let btn = e as optionButton; + const btn = e as optionButton; if (btn.name == optionButton.name_MatchCase) { SearchOption.activeInstance.matchCase = !SearchOption.activeInstance.matchCase; @@ -109,8 +109,8 @@ export async function getString(title: string, hint: string) { quickpick.value = ''; quickpick.ignoreFocusOut = true; - let closeTooltip = localize("autolispext.project.findreplace.optionbutton.close", "Close"); - let closeBtn = new optionButton(IconUris.closeUri(), null, true, closeTooltip, optionButton.name_Close); + const closeTooltip = localize("autolispext.project.findreplace.optionbutton.close", "Close"); + const closeBtn = new optionButton(IconUris.closeUri(), null, true, closeTooltip, optionButton.name_Close); quickpick.buttons = [closeBtn]; quickpick.onDidAccept(async () => { @@ -127,7 +127,7 @@ export async function getString(title: string, hint: string) { quickpick.onDidTriggerButton(async e => { if (e instanceof optionButton) { - let btn = e as optionButton; + const btn = e as optionButton; if (btn.name == optionButton.name_Close) { quickpick.hide(); diff --git a/extension/src/project/findReplace/replaceInProject.ts b/extension/src/project/findReplace/replaceInProject.ts index b838d5be..542d8d34 100644 --- a/extension/src/project/findReplace/replaceInProject.ts +++ b/extension/src/project/findReplace/replaceInProject.ts @@ -9,21 +9,21 @@ const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export async function replaceInProject() { if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.findreplace.replace.openproject", "A project must be open before you can replace a text string."); + const msg = localize("autolispext.project.findreplace.replace.openproject", "A project must be open before you can replace a text string."); vscode.window.showInformationMessage(msg); return; } //get find options: keyword, match case, etc. - let title = localize("autolispext.project.findreplace.replace.title", "Replace in Project"); - let keywordHint = localize("autolispext.project.findreplace.replace.hint.keyword", "Type a text string to find, and press Enter."); - let opt = await getSearchOption(title, keywordHint); + const title = localize("autolispext.project.findreplace.replace.title", "Replace in Project"); + const keywordHint = localize("autolispext.project.findreplace.replace.hint.keyword", "Type a text string to find, and press Enter."); + const opt = await getSearchOption(title, keywordHint); if (opt.isKeywordProvided() == false) return; - let replacementHint = localize("autolispext.project.findreplace.replace.hint.replacement", "Type a text string to replace with, and press Enter."); + const replacementHint = localize("autolispext.project.findreplace.replace.hint.replacement", "Type a text string to replace with, and press Enter."); //get the replacment of given keyword - let repl = await getString(title, replacementHint); + const repl = await getString(title, replacementHint); if (repl == undefined) return; @@ -32,7 +32,7 @@ export async function replaceInProject() { opt.replacement = repl; opt.stopRequested = false; - let finder = new FindInProject(); + const finder = new FindInProject(); await finder.execute(opt, ProjectTreeProvider.instance().projectNode); //update the search tree diff --git a/extension/src/project/findReplace/ripGrep.ts b/extension/src/project/findReplace/ripGrep.ts index da5972ac..25ff2273 100644 --- a/extension/src/project/findReplace/ripGrep.ts +++ b/extension/src/project/findReplace/ripGrep.ts @@ -6,71 +6,72 @@ import * as execa from "execa"; import * as fs from 'fs'; export async function findInFile(searchOption: SearchOption, file2Search: string, encoding: string) { - let commandArgs: string[] = [ - searchOption.keyword, - file2Search, - "--vimgrep", - "--line-number", - "--color", - "never", - "--no-heading", - "--no-filename", - "--encoding", - encoding - ]; + const commandArgs: string[] = [ + searchOption.keyword, + file2Search, + "--vimgrep", + "--line-number", + "--color", + "never", + "--no-heading", + "--no-filename", + "--encoding", + encoding + ]; - if (searchOption.keyword.startsWith('-')) { - commandArgs.splice(0, 0, '-e'); - } + if (searchOption.keyword.startsWith('-')) { + commandArgs.splice(0, 0, '-e'); + } - if (SearchOption.activeInstance.matchCase) - commandArgs.push('--case-sensitive'); - else - commandArgs.push('--ignore-case'); + if (SearchOption.activeInstance.matchCase) + commandArgs.push('--case-sensitive'); + else + commandArgs.push('--ignore-case'); - if (SearchOption.activeInstance.matchWholeWord) - commandArgs.push('--word-regexp'); + if (SearchOption.activeInstance.matchWholeWord) + commandArgs.push('--word-regexp'); - if (SearchOption.activeInstance.useRegularExpr) - commandArgs.push('--no-fixed-strings'); - else - commandArgs.push('--fixed-strings'); + if (SearchOption.activeInstance.useRegularExpr) + commandArgs.push('--no-fixed-strings'); + else + commandArgs.push('--fixed-strings'); - if (SearchOption.activeInstance.isReplace && (SearchOption.activeInstance.replacement != null)) { - commandArgs.push('--replace'); - commandArgs.push(SearchOption.activeInstance.replacement); - } + if (SearchOption.activeInstance.isReplace && (SearchOption.activeInstance.replacement != null)) { + commandArgs.push('--replace'); + commandArgs.push(SearchOption.activeInstance.replacement); + } - if (process.platform === 'darwin') { - return execa.$(getRgPathMac(), commandArgs); - } + if (process.platform === 'darwin') { + return execa.$(getRgPathMac(), commandArgs); + } - return execa.$(rgPath, commandArgs); + return execa.$(rgPath, commandArgs); } function getRgPathMac(): string { - return rgPath + '.app'; + return rgPath + '.app'; } export function grantExePermission() { - let platform = os.type(); - if (platform !== 'Darwin') - return; + const platform = os.type(); + if (platform !== 'Darwin') + return; - let rgPathMac = getRgPathMac(); - try { - fs.accessSync(rgPathMac, fs.constants.X_OK); - return; - } - catch (err) { - // it has no execute permisson; - } + const rgPathMac = getRgPathMac(); + try { + fs.accessSync(rgPathMac, fs.constants.X_OK); + return; + } + catch (err) { + console.log(`Execute permissions are not granted for ripgrep.\n${err}`) + // it has no execute permisson; + } - try { - fs.chmodSync(rgPathMac, '755'); - // it then becomes executable - } - catch (err) { - console.log("failed to grant execute permission: " + err); - } + try { + fs.chmodSync(rgPathMac, '755'); + // it then becomes executable + } + catch (err) { + console.log("failed to grant execute permission: " + err); + } } \ No newline at end of file diff --git a/extension/src/project/findReplace/searchTree.ts b/extension/src/project/findReplace/searchTree.ts index b4459324..a9435e5c 100644 --- a/extension/src/project/findReplace/searchTree.ts +++ b/extension/src/project/findReplace/searchTree.ts @@ -8,246 +8,246 @@ import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export class FileNode implements DisplayNode { - filePath: string = ''; - shortPath: string = ''; - findings: FindingNode[] = []; + filePath: string = ''; + shortPath: string = ''; + findings: FindingNode[] = []; - errorInReplace: string = null;//error message provided when replace in file - collapsibleState: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.Expanded; - getDisplayText(): string { - return this.shortPath + " (" + this.findings.length + ")"; - } + errorInReplace: string = null;//error message provided when replace in file + collapsibleState: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.Expanded; + getDisplayText(): string { + return this.shortPath + " (" + this.findings.length + ")"; + } - getTooltip(): string { - if (!this.errorInReplace) - return this.filePath; + getTooltip(): string { + if (!this.errorInReplace) + return this.filePath; - return this.filePath + "\r\n" + this.errorInReplace; - } + return this.filePath + "\r\n" + this.errorInReplace; + } - getIconUri(): vscode.Uri | vscode.IconPath { - if (!this.errorInReplace) - return IconUris.lspFile(); + getIconUri(): vscode.Uri | vscode.IconPath { + if (!this.errorInReplace) + return IconUris.lspFile(); - return IconUris.missingFile(); - } + return IconUris.missingFile(); + } - getNodeType(): string { - return "findinggroup"; - } + getNodeType(): string { + return "findinggroup"; + } - getChildren(): FindingNode[] { - if (!this.errorInReplace) - return this.findings; + getChildren(): FindingNode[] { + if (!this.errorInReplace) + return this.findings; - return null; - } + return null; + } - getCollapsibleState(): vscode.TreeItemCollapsibleState { - if (!this.errorInReplace) - return this.collapsibleState; + getCollapsibleState(): vscode.TreeItemCollapsibleState { + if (!this.errorInReplace) + return this.collapsibleState; - return vscode.TreeItemCollapsibleState.None; - } + return vscode.TreeItemCollapsibleState.None; + } - setCollapsibleState(state: vscode.TreeItemCollapsibleState) { - this.collapsibleState = state; - } + setCollapsibleState(state: vscode.TreeItemCollapsibleState) { + this.collapsibleState = state; + } } export class FindingNode implements DisplayNode { - line: number = -1; - column: number = -1; - text: string = ''; - filePath: string = ''; - - errorInReplace: string = '';//error message provided when replace in file - - getDisplayText(): string { - return this.text; - } - - getTooltip(): string { - let tooltip = `${this.line}: ${this.text}`; - if ((this.line <= 0) || (this.column <= 0)) { - //in rg, the line/column number starts with 1 - console.log("invalid finding node: " + tooltip); - return this.text; - } - - return tooltip; - } - - getIconUri(): vscode.Uri | vscode.IconPath { - return null; //no icon for a single find result - } - - getNodeType(): string { - return "finding"; - } - - getCollapsibleState(): vscode.TreeItemCollapsibleState { - return vscode.TreeItemCollapsibleState.None; - } - - setCollapsibleState() { - } + line: number = -1; + column: number = -1; + text: string = ''; + filePath: string = ''; + + errorInReplace: string = '';//error message provided when replace in file + + getDisplayText(): string { + return this.text; + } + + getTooltip(): string { + const tooltip = `${this.line}: ${this.text}`; + if ((this.line <= 0) || (this.column <= 0)) { + //in rg, the line/column number starts with 1 + console.log("invalid finding node: " + tooltip); + return this.text; + } + + return tooltip; + } + + getIconUri(): vscode.Uri | vscode.IconPath { + return null; //no icon for a single find result + } + + getNodeType(): string { + return "finding"; + } + + getCollapsibleState(): vscode.TreeItemCollapsibleState { + return vscode.TreeItemCollapsibleState.None; + } + + setCollapsibleState() { + } } export class SummaryNode implements DisplayNode { - summary: string = ''; - tooltip: string = ''; - - makeTooltip(opt: SearchOption, prjNode: ProjectNode) { - this.tooltip = ''; - - let prjNameClause = ''; - let prjPathStatement = ''; - if (prjNode) { - let inStr = localize("autolispext.project.findreplace.searchtree.in", " in "); - let prjFileStr = localize("autolispext.project.findreplace.searchtree.prjfile", "\r\nProject file: "); - prjNameClause = inStr + `${prjNode.projectName}`; - prjPathStatement = prjFileStr + `${prjNode.projectFilePath}`; - } - - if (opt.isReplace) { - let replace = localize("autolispext.project.findreplace.searchtree.replace", "Replace "); - let withStr = localize("autolispext.project.findreplace.searchtree.with", " with "); - this.tooltip = replace + `\"${opt.keyword}\"` + withStr + `\"${opt.replacement}\"${prjNameClause};`; - } - else { - let findStr = localize("autolispext.project.findreplace.searchtree.find", "Find "); - this.tooltip = findStr + `\"${opt.keyword}\"${prjNameClause};`; - } - this.tooltip += prjPathStatement; - - if (opt.matchCase) { - this.tooltip += localize("autolispext.project.findreplace.searchtree.matchcaseon", "\r\nMatch case: ON"); - } - if (opt.matchWholeWord) { - this.tooltip += localize("autolispext.project.findreplace.searchtree.matchwholewordon", "\r\nMatch whole word: ON"); - } - if (opt.useRegularExpr) { - this.tooltip += localize("autolispext.project.findreplace.searchtree.regexpon", "\r\nUse regular expression: ON"); - } - - this.tooltip += "\r\n" + this.summary; - } - - getDisplayText(): string { - return this.summary; - } - - getTooltip(): string { - return this.tooltip; - } - - getIconUri(): vscode.Uri | vscode.IconPath { - return null; - } - - getNodeType(): string { - return SummaryNode.nodeTypeString; - } - - getCollapsibleState(): vscode.TreeItemCollapsibleState { - return vscode.TreeItemCollapsibleState.None; - } - - setCollapsibleState() { - } - - static readonly nodeTypeString = "summary"; + summary: string = ''; + tooltip: string = ''; + + makeTooltip(opt: SearchOption, prjNode: ProjectNode) { + this.tooltip = ''; + + let prjNameClause = ''; + let prjPathStatement = ''; + if (prjNode) { + const inStr = localize("autolispext.project.findreplace.searchtree.in", " in "); + const prjFileStr = localize("autolispext.project.findreplace.searchtree.prjfile", "\r\nProject file: "); + prjNameClause = inStr + `${prjNode.projectName}`; + prjPathStatement = prjFileStr + `${prjNode.projectFilePath}`; + } + + if (opt.isReplace) { + const replace = localize("autolispext.project.findreplace.searchtree.replace", "Replace "); + const withStr = localize("autolispext.project.findreplace.searchtree.with", " with "); + this.tooltip = replace + `"${opt.keyword}"` + withStr + `"${opt.replacement}"${prjNameClause};`; + } + else { + const findStr = localize("autolispext.project.findreplace.searchtree.find", "Find "); + this.tooltip = findStr + `"${opt.keyword}"${prjNameClause};`; + } + this.tooltip += prjPathStatement; + + if (opt.matchCase) { + this.tooltip += localize("autolispext.project.findreplace.searchtree.matchcaseon", "\r\nMatch case: ON"); + } + if (opt.matchWholeWord) { + this.tooltip += localize("autolispext.project.findreplace.searchtree.matchwholewordon", "\r\nMatch whole word: ON"); + } + if (opt.useRegularExpr) { + this.tooltip += localize("autolispext.project.findreplace.searchtree.regexpon", "\r\nUse regular expression: ON"); + } + + this.tooltip += "\r\n" + this.summary; + } + + getDisplayText(): string { + return this.summary; + } + + getTooltip(): string { + return this.tooltip; + } + + getIconUri(): vscode.Uri | vscode.IconPath { + return null; + } + + getNodeType(): string { + return SummaryNode.nodeTypeString; + } + + getCollapsibleState(): vscode.TreeItemCollapsibleState { + return vscode.TreeItemCollapsibleState.None; + } + + setCollapsibleState() { + } + + static readonly nodeTypeString = "summary"; } export class SearchTreeProvider implements vscode.TreeDataProvider { - private constructor() { - this.treeControl = vscode.window.createTreeView('Autolisp-FindReplaceView', { treeDataProvider: this }); - this.treeControl.onDidCollapseElement(e => { - e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Collapsed); - }) - this.treeControl.onDidExpandElement(e => { - e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Expanded); - }) - } - - public static instance: SearchTreeProvider = new SearchTreeProvider(); - public static showResult: string = "showSearchResult"; - - private onChanged: vscode.EventEmitter = new vscode.EventEmitter(); - public readonly onDidChangeTreeData?: vscode.Event = this.onChanged.event; - - private rootNodes: DisplayNode[] = null; - private treeControl: vscode.TreeView = null; - - public lastSearchOption: SearchOption = null; - - public reset(newResult: DisplayNode[], summary: SummaryNode, opt: SearchOption) { - this.rootNodes = new Array(); - this.rootNodes.push(summary); - if (newResult != null) { - for (let fileNode of newResult) { - this.rootNodes.push(fileNode); - } - } - - this.lastSearchOption = opt; - - this.onChanged.fire(null); - } - - public clear() { - this.rootNodes = null; - - this.onChanged.fire(null); - } - - - public getTreeItem(element: DisplayNode): vscode.TreeItem | Thenable { - try { - let treeNode = new vscode.TreeItem(element.getDisplayText()); - treeNode.collapsibleState = element.getCollapsibleState(); - treeNode.tooltip = element.getTooltip(); - treeNode.iconPath = element.getIconUri(); - treeNode.contextValue = element.getNodeType(); - - treeNode.command = { - title: getTreeItemTitle(treeNode), - command: SearchTreeProvider.showResult, - tooltip: treeNode.tooltip, - arguments: [ - element - ] - } - - return treeNode; - } - catch (err) { - console.log(err); - return null; - } - } - - public getChildren(element?: DisplayNode): vscode.ProviderResult { - try { - if (!element) { - //asking for elements on top level - return SearchTreeProvider.instance.rootNodes; - } - else { - //asking for children of given element - if (element instanceof FileNode) { - let fileNode = element as FileNode; - return fileNode.getChildren(); - } - - return null; - } - } - catch (err) { - console.log(err); - return null; - } - } + private constructor() { + this.treeControl = vscode.window.createTreeView('Autolisp-FindReplaceView', { treeDataProvider: this }); + this.treeControl.onDidCollapseElement(e => { + e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Collapsed); + }) + this.treeControl.onDidExpandElement(e => { + e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Expanded); + }) + } + + public static instance: SearchTreeProvider = new SearchTreeProvider(); + public static showResult: string = "showSearchResult"; + + private onChanged: vscode.EventEmitter = new vscode.EventEmitter(); + public readonly onDidChangeTreeData?: vscode.Event = this.onChanged.event; + + private rootNodes: DisplayNode[] = null; + private treeControl: vscode.TreeView = null; + + public lastSearchOption: SearchOption = null; + + public reset(newResult: DisplayNode[], summary: SummaryNode, opt: SearchOption) { + this.rootNodes = new Array(); + this.rootNodes.push(summary); + if (newResult != null) { + for (const fileNode of newResult) { + this.rootNodes.push(fileNode); + } + } + + this.lastSearchOption = opt; + + this.onChanged.fire(null); + } + + public clear() { + this.rootNodes = null; + + this.onChanged.fire(null); + } + + + public getTreeItem(element: DisplayNode): vscode.TreeItem | Thenable { + try { + const treeNode = new vscode.TreeItem(element.getDisplayText()); + treeNode.collapsibleState = element.getCollapsibleState(); + treeNode.tooltip = element.getTooltip(); + treeNode.iconPath = element.getIconUri(); + treeNode.contextValue = element.getNodeType(); + + treeNode.command = { + title: getTreeItemTitle(treeNode), + command: SearchTreeProvider.showResult, + tooltip: treeNode.tooltip, + arguments: [ + element + ] + } + + return treeNode; + } + catch (err) { + console.log(err); + return null; + } + } + + public getChildren(element?: DisplayNode): vscode.ProviderResult { + try { + if (!element) { + //asking for elements on top level + return SearchTreeProvider.instance.rootNodes; + } + else { + //asking for children of given element + if (element instanceof FileNode) { + const fileNode = element as FileNode; + return fileNode.getChildren(); + } + + return null; + } + } + catch (err) { + console.log(err); + return null; + } + } } diff --git a/extension/src/project/openLspFile.ts b/extension/src/project/openLspFile.ts index 8db54f51..82745c74 100644 --- a/extension/src/project/openLspFile.ts +++ b/extension/src/project/openLspFile.ts @@ -1,33 +1,33 @@ import * as vscode from 'vscode' import { DisplayNode, LspFileNode, ProjectTreeProvider } from './projectTree' - +import * as fs from 'fs' import * as nls from 'vscode-nls'; + const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); -const fs = require('fs') export async function openLspFile(clickedTreeItem: DisplayNode) { - try { - let isLspFile = clickedTreeItem instanceof LspFileNode; - if (!isLspFile) - return; + try { + const isLspFile = clickedTreeItem instanceof LspFileNode; + if (!isLspFile) + return; - let lspNode = clickedTreeItem as LspFileNode; - const exists = fs.existsSync(lspNode.filePath); - if (exists != lspNode.fileExists) { - ProjectTreeProvider.instance().refreshData(clickedTreeItem); - } + const lspNode = clickedTreeItem as LspFileNode; + const exists = fs.existsSync(lspNode.filePath); + if (exists != lspNode.fileExists) { + ProjectTreeProvider.instance().refreshData(clickedTreeItem); + } - if (exists == false) { - let msg = localize("autolispext.project.openlspfile.filenotexist", "File doesn't exist: "); - return Promise.reject(msg + lspNode.filePath); - } + if (exists == false) { + const msg = localize("autolispext.project.openlspfile.filenotexist", "File doesn't exist: "); + return Promise.reject(msg + lspNode.filePath); + } - let options = { "preview": false, "preserveFocus": true }; + const options = { "preview": false, "preserveFocus": true }; - return vscode.commands.executeCommand("vscode.open", vscode.Uri.file(lspNode.filePath), options); - } - catch (e) { - return Promise.reject(e); - } + return vscode.commands.executeCommand("vscode.open", vscode.Uri.file(lspNode.filePath), options); + } + catch (e) { + return Promise.reject(e); + } } diff --git a/extension/src/project/openProject.ts b/extension/src/project/openProject.ts index 98bd3001..8c0f5e52 100644 --- a/extension/src/project/openProject.ts +++ b/extension/src/project/openProject.ts @@ -3,15 +3,15 @@ import { CursorPosition, ListReader } from '../format/listreader'; import { Sexpression } from '../astObjects/sexpression'; import { ProjectDefinition } from './projectDefinition'; import { CheckUnsavedChanges } from './checkUnsavedChanges'; -import { AutoLispExt } from '../context'; +//import { AutoLispExt } from '../context'; import * as vscode from 'vscode' import * as path from 'path' import { ReadonlyDocument } from './readOnlyDocument'; import * as nls from 'vscode-nls'; -const localize = nls.loadMessageBundle(); -const fs = require('fs'); +//import * as fs from 'fs'; import * as os from 'os'; +const localize = nls.loadMessageBundle(); export async function OpenProject() { try { @@ -19,17 +19,17 @@ export async function OpenProject() { return; } - let prjUri = await SelectProjectFile(); + const prjUri = await SelectProjectFile(); if (!prjUri) return; - let prjPathUpper = prjUri.fsPath.toUpperCase(); + const prjPathUpper = prjUri.fsPath.toUpperCase(); if (prjPathUpper.endsWith(".PRJ") == false) { - let msg = localize("autolispext.project.openproject.onlyprjallowed", "Only PRJ files are allowed."); + const msg = localize("autolispext.project.openproject.onlyprjallowed", "Only PRJ files are allowed."); return Promise.reject(msg); } - let prjNode = OpenProjectFile(prjUri); + const prjNode = OpenProjectFile(prjUri); return Promise.resolve(prjNode); } catch (e) { @@ -38,15 +38,15 @@ export async function OpenProject() { } export function OpenProjectFile(prjUri: vscode.Uri): ProjectNode { - let document = ReadonlyDocument.open(prjUri.fsPath); + const document = ReadonlyDocument.open(prjUri.fsPath); if (!document) { - let msg = localize("autolispext.project.openproject.readfailed", "Can't read project file: "); + const msg = localize("autolispext.project.openproject.readfailed", "Can't read project file: "); throw new Error(msg + prjUri.fsPath); } - let ret = ParseProjectDocument(prjUri.fsPath, document); + const ret = ParseProjectDocument(prjUri.fsPath, document); if (!ret) { - let msg = localize("autolispext.project.openproject.malformedfile", "Malformed project file: "); + const msg = localize("autolispext.project.openproject.malformedfile", "Malformed project file: "); throw new Error(msg + prjUri.fsPath); } @@ -54,7 +54,7 @@ export function OpenProjectFile(prjUri: vscode.Uri): ProjectNode { } async function SelectProjectFile() { - let label = localize("autolispext.project.openproject.label", "Open Project"); + const label = localize("autolispext.project.openproject.label", "Open Project"); const filterDesc = localize("autolispext.project.openproject.projectfilter", "AutoLISP Project Files"); const options: vscode.OpenDialogOptions = { canSelectMany: false, @@ -63,12 +63,12 @@ async function SelectProjectFile() { }; options.filters[filterDesc] = ['prj']; - let fileUri = await vscode.window.showOpenDialog(options); + const fileUri = await vscode.window.showOpenDialog(options); if (fileUri && fileUri.length > 0) { if (path.basename(fileUri[0].fsPath).indexOf(' ') === -1) { return Promise.resolve(fileUri[0]); } else { - let msg = localize("autolispext.project.openproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); + const msg = localize("autolispext.project.openproject.nospaces", "Legacy PRJ naming rules do not allow spaces"); return Promise.reject(msg); } } else { @@ -79,13 +79,13 @@ async function SelectProjectFile() { function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): ProjectNode { - let readerStartPos = new CursorPosition(); + const readerStartPos = new CursorPosition(); readerStartPos.offsetInSelection = 0; //the start position in sexpr is 0 readerStartPos.offsetInDocument = 0; //the start position in doc - let reader = new ListReader(document.getText(), readerStartPos, document); + const reader = new ListReader(document.getText(), readerStartPos, document); - let lispLists = reader.tokenize(); - let atomCount = lispLists.atoms.length; + const lispLists = reader.tokenize(); + const atomCount = lispLists.atoms.length; if ((!lispLists) || (!lispLists.atoms) || (atomCount < 2)) return undefined; @@ -93,10 +93,10 @@ function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): P let index = IndexOfProjectList(lispLists); if (index < 0) return undefined; - let vlspPrjList = lispLists.atoms[index] as Sexpression; + const vlspPrjList = lispLists.atoms[index] as Sexpression; //parse project metadata - let prjMetaData = ProjectDefinition.Create(vlspPrjList); + const prjMetaData = ProjectDefinition.Create(vlspPrjList); if (IsValidProjectExpression(prjMetaData) == false) return undefined; //its content is not valid @@ -104,10 +104,10 @@ function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): P index = IndexOfSourceList(vlspPrjList); if (index < 0)//if there's no source file, we should at least get a "nil" string return undefined; - let srcFileExpr = vlspPrjList.atoms[index]; + const srcFileExpr = vlspPrjList.atoms[index]; //create the project node - let root = new ProjectNode(); + const root = new ProjectNode(); root.projectName = prjMetaData.Name; root.projectFilePath = prjPath; root.projectDirectory = path.dirname(prjPath); @@ -115,11 +115,11 @@ function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): P root.projectMetadata = prjMetaData; if (srcFileExpr instanceof Sexpression) { - let fileList = srcFileExpr as Sexpression; + const fileList = srcFileExpr as Sexpression; //create source file nodes for (let j = 1; j < (fileList.atoms.length - 1); j++) { - let fileName = Convert2AbsoluteLspFilePath(fileList.atoms[j].symbol, root.projectDirectory); + const fileName = Convert2AbsoluteLspFilePath(fileList.atoms[j].symbol, root.projectDirectory); if (!fileName) return undefined; @@ -134,7 +134,7 @@ function ParseProjectDocument(prjPath: string, document: vscode.TextDocument): P } function IndexOfSourceList(prjExpr: Sexpression): number { - let atomsCount = prjExpr.atoms.length; + const atomsCount = prjExpr.atoms.length; for (let i = 0; i < atomsCount; i++) { if (prjExpr.atoms[i].symbol.toUpperCase() != ProjectDefinition.key_own_list) continue; @@ -151,14 +151,14 @@ function IndexOfSourceList(prjExpr: Sexpression): number { } function IndexOfProjectList(rootExpr: Sexpression): number { - let atomsCount = rootExpr.atoms.length; + const atomsCount = rootExpr.atoms.length; for (let i = 0; i < atomsCount; i++) { //find for the VLISP-PROJECT-LIST expression if (rootExpr.atoms[i] == null) continue; if (!(rootExpr.atoms[i] instanceof Sexpression)) continue; - let vlspPrjList = rootExpr.atoms[i] as Sexpression; + const vlspPrjList = rootExpr.atoms[i] as Sexpression; if (vlspPrjList.atoms.length < 2) continue; @@ -175,13 +175,13 @@ function IndexOfProjectList(rootExpr: Sexpression): number { function Convert2AbsoluteLspFilePath(fileName: string, prjDir: string): string { //remove the starting and ending " - if (fileName.startsWith('\"') == false) + if (fileName.startsWith('"') == false) return undefined; - if (fileName.endsWith('\"') == false) + if (fileName.endsWith('"') == false) return undefined; - fileName = fileName.substring(1, fileName.length - 2); + fileName = fileName.substring(1, fileName.length - 1); //make sure it's absolute path if (isAbsolutePath(fileName) == false) @@ -196,7 +196,7 @@ function Convert2AbsoluteLspFilePath(fileName: string, prjDir: string): string { return fileName; } -let platform = os.type(); +const platform = os.type(); function isAbsolutePath(fileName: string): boolean { if (path.isAbsolute(fileName)) @@ -207,8 +207,8 @@ function isAbsolutePath(fileName: string): boolean { if (fileName.length < 3) return false; - let char2 = fileName.charAt(1); - let char3 = fileName.charAt(2); + const char2 = fileName.charAt(1); + const char3 = fileName.charAt(2); if ((char2 == ':') && (char3 == '\\')) return true; @@ -220,7 +220,7 @@ function isAbsolutePath(fileName: string): boolean { return false; } -function IsValidProjectExpression(metaData: ProjectDefinition): Boolean { +function IsValidProjectExpression(metaData: ProjectDefinition): boolean { if (!metaData) return false; diff --git a/extension/src/project/projectCommands.ts b/extension/src/project/projectCommands.ts index 977552b8..9ccbf978 100644 --- a/extension/src/project/projectCommands.ts +++ b/extension/src/project/projectCommands.ts @@ -8,7 +8,7 @@ import { SaveProject, SaveAll } from './saveProject'; import { excludeFromProject } from './excludeFile'; import { getNewProjectFilePath, createProject } from './createProject'; import { findInProject } from './findReplace/findInProject'; -import { SearchTreeProvider, SummaryNode } from './findReplace/searchTree'; +import { SearchTreeProvider } from './findReplace/searchTree'; import { openSearchResult } from './findReplace/openSearchResult'; import { replaceInProject } from './findReplace/replaceInProject'; import { CheckUnsavedChanges } from './checkUnsavedChanges'; @@ -22,273 +22,273 @@ import { grantExePermission } from './findReplace/ripGrep'; const localize = nls.loadMessageBundle(); export function registerProjectCommands(context: vscode.ExtensionContext) { - try { - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.createProject', async () => { - try { - if (getWarnIsSearching()) - return; - - if (await CheckUnsavedChanges()) { - return; - } - - let prjPath = await getNewProjectFilePath(); - if (!prjPath) - return; - - let prjNode = await createProject(prjPath.fsPath); - - ProjectTreeProvider.instance().updateData(prjNode); - - await SaveProject(false); - } - catch (err) { - let msg = localize("autolispext.project.commands.createprojectfailed", "Failed to create the new project."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.openProject', async () => { - if (getWarnIsSearching()) - return; - - OpenProject() - .then(prjNode => { - if (!prjNode) - return;//it's possible that the user cancelled the operation - - ProjectTreeProvider.instance().updateData(prjNode); - }) - .catch(err => { - let msg = localize("autolispext.project.commands.openprojectfailed", "Failed to open the specified project."); - showErrorMessage(msg, err); - }); - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.closeProject', async () => { - if (ProjectTreeProvider.hasProjectOpened() === true){ - let promptmsg = localize("autolispext.project.commands.closepromptmsg", "Confirm close request on: "); - let responseYes = localize("autolispext.project.commands.closepromptyes", "Yes"); - let responseNo = localize("autolispext.project.commands.closepromptno", "No"); - vscode.window.showWarningMessage(promptmsg + ProjectTreeProvider.instance().projectNode.projectName, responseYes, responseNo).then(result => { - if (result === responseYes){ - ProjectTreeProvider.instance().updateData(null); - } - }); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.addFile2Project', async () => { - if (getWarnIsSearching()) - return; - - try { - let addedFiles = await AddFile2Project(); - if (!addedFiles) - return;//it's possible that the user cancelled the operation - } - catch (err) { - let msg = localize("autolispext.project.commands.addfilefailed", "Failed to add selected files to project."); - showErrorMessage(msg, err); - return; - } - - try { - await SaveProject(true); - } - catch (err) { - let msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.addWorkspaceFile2Project', async (clickedFile: vscode.Uri, selectedFiles: vscode.Uri[]) => { - if (!selectedFiles || selectedFiles.length === 0 || getWarnIsSearching()){ - return; - } - let selectedDirs = selectedFiles.filter(f => fs.statSync(f.fsPath, { bigint: false}).isDirectory()); - selectedFiles = selectedFiles.filter(f => - fs.statSync(f.fsPath, { bigint: false}).isFile() && - AutoLispExt.Documents.getSelectorType(f.fsPath) === AutoLispExt.Selectors.LSP - ); - - selectedDirs.forEach(dir => { - fs.readdirSync(dir.fsPath).forEach(name => { - const fspath = dir.fsPath.replace(/[\/\\]$/, '') + '\\' + name; - if (fs.existsSync(fspath) && fs.statSync(fspath, { bigint: false}).isFile()) { - if (AutoLispExt.Documents.getSelectorType(fspath) === AutoLispExt.Selectors.LSP){ - selectedFiles.push(vscode.Uri.file(fspath)); - } - } - }); - }); - - try { - let addedFiles = await AddFile2Project(selectedFiles); - if (!addedFiles){ - return; //it's possible that the user cancelled the operation - } else { - const msg = localize("autolispext.project.commands.addedworkspacefiles", 'lisp files have been added to'); - vscode.window.showInformationMessage(addedFiles.length + ' ' + msg + ' ' + ProjectTreeProvider.instance().projectNode.projectName + '.prj'); - } - } - catch (err) { - let msg = localize("autolispext.project.commands.addfilefailed", "Failed to add selected files to project."); - showErrorMessage(msg, err); - return; - } - - try { - await SaveProject(true); - } - catch (err) { - let msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.removeFileFromProject', async (selected) => { - if (getWarnIsSearching()) - return; - - try { - await excludeFromProject(selected); - } - catch (err) { - let msg = localize("autolispext.project.commands.removefilefailed", "Failed to remove selected file."); - showErrorMessage(msg, err); - return; - } - - try { - await SaveProject(true); - } - catch (err) { - let msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.SaveProject', async () => { - if (getWarnIsSearching()) - return; - - SaveProject(true) - .then(prjPath => { - let msg = localize("autolispext.project.commands.projectsaved", "Project file saved."); - vscode.window.showInformationMessage(msg); - }) - .catch(err => { - let msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); - showErrorMessage(msg, err); - }); - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.SaveAll', async () => { - if (getWarnIsSearching()) - return; - - SaveAll() - .then(() => { - let msg = localize("autolispext.project.commands.allsaved", "All files saved."); - vscode.window.showInformationMessage(msg); - }) - .catch(err => { - let msg = localize("autolispext.project.commands.saveallfailed", "Failed to save all the files in the project."); - showErrorMessage(msg, err); - }); - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.refresh', async () => { - try { - RefreshProject(); - } catch (err) { - let msg = localize("autolispext.project.commands.refreshfailed", "Failed to refresh the project."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand(ProjectTreeProvider.TreeItemClicked, (treeItem) => { - openLspFile(treeItem) - .catch(err => { - let msg = localize("autolispext.project.commands.openfilefailed", "Failed to open the file."); - showErrorMessage(msg, err); - }) - })); - - //register the handler of "find in project" - context.subscriptions.push(vscode.commands.registerCommand('autolisp.findInProject', async () => { - if (getWarnIsSearching()) - return; - - findInProject().catch(err => { - let msg = localize("autolispext.project.commands.findfailed", "Failed to find in project."); - showErrorMessage(msg, err); - clearSearchResultWithError(msg + (err ? err.toString() : '')); - }); - })); - - //register the handler of "replace in project" - context.subscriptions.push(vscode.commands.registerCommand('autolisp.replaceInProject', async () => { - if (getWarnIsSearching()) - return; - - replaceInProject().catch(err => { - let msg = localize("autolispext.project.commands.replacefailed", "Failed to replace text string in project."); - showErrorMessage(msg, err); - clearSearchResultWithError(msg + (err ? err.toString() : '')); - }) - })); - - context.subscriptions.push(vscode.commands.registerCommand(SearchTreeProvider.showResult, (treeItem) => { - openSearchResult(treeItem, SearchTreeProvider.instance.lastSearchOption) - .catch(err => { - let msg = localize("autolispext.project.commands.openresultfailed", "Failed to open search results."); - showErrorMessage(msg, err); - }) - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.clearSearchResults', (treeItem) => { - if (getWarnIsSearching()) - return; - - try { - clearSearchResults(); - } - catch (err) { - let msg = localize("autolispext.project.commands.clearresultfailed", "Failed to clear search results."); - showErrorMessage(msg, err); - } - })); - - context.subscriptions.push(vscode.commands.registerCommand('autolisp.stopSearch', () => { - try { - stopSearching(); - } - catch (err) { - if (err) - console.log(err.toString()); - } - })); - - IconUris.initialize(); - - grantExePermission(); - } - catch (e) { - let msg = localize("autolispext.project.commands.initializefailed", "Failed to initalize the AutoLISP Project Manager."); - vscode.window.showErrorMessage(msg); - console.log(e); - } + try { + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.createProject', async () => { + try { + if (getWarnIsSearching()) + return; + + if (await CheckUnsavedChanges()) { + return; + } + + const prjPath = await getNewProjectFilePath(); + if (!prjPath) + return; + + const prjNode = await createProject(prjPath.fsPath); + + ProjectTreeProvider.instance().updateData(prjNode); + + await SaveProject(false); + } + catch (err) { + const msg = localize("autolispext.project.commands.createprojectfailed", "Failed to create the new project."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.openProject', async () => { + if (getWarnIsSearching()) + return; + + OpenProject() + .then(prjNode => { + if (!prjNode) + return;//it's possible that the user cancelled the operation + + ProjectTreeProvider.instance().updateData(prjNode); + }) + .catch(err => { + const msg = localize("autolispext.project.commands.openprojectfailed", "Failed to open the specified project."); + showErrorMessage(msg, err); + }); + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.closeProject', async () => { + if (ProjectTreeProvider.hasProjectOpened() === true) { + const promptmsg = localize("autolispext.project.commands.closepromptmsg", "Confirm close request on: "); + const responseYes = localize("autolispext.project.commands.closepromptyes", "Yes"); + const responseNo = localize("autolispext.project.commands.closepromptno", "No"); + vscode.window.showWarningMessage(promptmsg + ProjectTreeProvider.instance().projectNode.projectName, responseYes, responseNo).then(result => { + if (result === responseYes) { + ProjectTreeProvider.instance().updateData(null); + } + }); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.addFile2Project', async () => { + if (getWarnIsSearching()) + return; + + try { + const addedFiles = await AddFile2Project(); + if (!addedFiles) + return;//it's possible that the user cancelled the operation + } + catch (err) { + const msg = localize("autolispext.project.commands.addfilefailed", "Failed to add selected files to project."); + showErrorMessage(msg, err); + return; + } + + try { + await SaveProject(true); + } + catch (err) { + const msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.addWorkspaceFile2Project', async (clickedFile: vscode.Uri, selectedFiles: vscode.Uri[]) => { + if (!selectedFiles || selectedFiles.length === 0 || getWarnIsSearching()) { + return; + } + const selectedDirs = selectedFiles.filter(f => fs.statSync(f.fsPath, { bigint: false }).isDirectory()); + selectedFiles = selectedFiles.filter(f => + fs.statSync(f.fsPath, { bigint: false }).isFile() && + AutoLispExt.Documents.getSelectorType(f.fsPath) === AutoLispExt.Selectors.LSP + ); + + selectedDirs.forEach(dir => { + fs.readdirSync(dir.fsPath).forEach(name => { + const fspath = dir.fsPath.replace(/[/\\]$/, '') + '\\' + name; + if (fs.existsSync(fspath) && fs.statSync(fspath, { bigint: false }).isFile()) { + if (AutoLispExt.Documents.getSelectorType(fspath) === AutoLispExt.Selectors.LSP) { + selectedFiles.push(vscode.Uri.file(fspath)); + } + } + }); + }); + + try { + const addedFiles = await AddFile2Project(selectedFiles); + if (!addedFiles) { + return; //it's possible that the user cancelled the operation + } else { + const msg = localize("autolispext.project.commands.addedworkspacefiles", 'lisp files have been added to'); + vscode.window.showInformationMessage(addedFiles.length + ' ' + msg + ' ' + ProjectTreeProvider.instance().projectNode.projectName + '.prj'); + } + } + catch (err) { + const msg = localize("autolispext.project.commands.addfilefailed", "Failed to add selected files to project."); + showErrorMessage(msg, err); + return; + } + + try { + await SaveProject(true); + } + catch (err) { + const msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.removeFileFromProject', async (selected) => { + if (getWarnIsSearching()) + return; + + try { + await excludeFromProject(selected); + } + catch (err) { + const msg = localize("autolispext.project.commands.removefilefailed", "Failed to remove selected file."); + showErrorMessage(msg, err); + return; + } + + try { + await SaveProject(true); + } + catch (err) { + const msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.SaveProject', async () => { + if (getWarnIsSearching()) + return; + + SaveProject(true) + .then(prjPath => { + const msg = localize("autolispext.project.commands.projectsaved", `Project file saved at ${prjPath}`); + vscode.window.showInformationMessage(msg); + }) + .catch(err => { + const msg = localize("autolispext.project.commands.saveprojectfailed", "Failed to save the project."); + showErrorMessage(msg, err); + }); + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.SaveAll', async () => { + if (getWarnIsSearching()) + return; + + SaveAll() + .then(() => { + const msg = localize("autolispext.project.commands.allsaved", "All files saved."); + vscode.window.showInformationMessage(msg); + }) + .catch(err => { + const msg = localize("autolispext.project.commands.saveallfailed", "Failed to save all the files in the project."); + showErrorMessage(msg, err); + }); + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.refresh', async () => { + try { + RefreshProject(); + } catch (err) { + const msg = localize("autolispext.project.commands.refreshfailed", "Failed to refresh the project."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand(ProjectTreeProvider.TreeItemClicked, (treeItem) => { + openLspFile(treeItem) + .catch(err => { + const msg = localize("autolispext.project.commands.openfilefailed", "Failed to open the file."); + showErrorMessage(msg, err); + }) + })); + + //register the handler of "find in project" + context.subscriptions.push(vscode.commands.registerCommand('autolisp.findInProject', async () => { + if (getWarnIsSearching()) + return; + + findInProject().catch(err => { + const msg = localize("autolispext.project.commands.findfailed", "Failed to find in project."); + showErrorMessage(msg, err); + clearSearchResultWithError(msg + (err ? err.toString() : '')); + }); + })); + + //register the handler of "replace in project" + context.subscriptions.push(vscode.commands.registerCommand('autolisp.replaceInProject', async () => { + if (getWarnIsSearching()) + return; + + replaceInProject().catch(err => { + const msg = localize("autolispext.project.commands.replacefailed", "Failed to replace text string in project."); + showErrorMessage(msg, err); + clearSearchResultWithError(msg + (err ? err.toString() : '')); + }) + })); + + context.subscriptions.push(vscode.commands.registerCommand(SearchTreeProvider.showResult, (treeItem) => { + openSearchResult(treeItem, SearchTreeProvider.instance.lastSearchOption) + .catch(err => { + const msg = localize("autolispext.project.commands.openresultfailed", "Failed to open search results."); + showErrorMessage(msg, err); + }) + })); + //eslint-disable-next-line + context.subscriptions.push(vscode.commands.registerCommand('autolisp.clearSearchResults', (treeItem) => { + if (getWarnIsSearching()) + return; + + try { + clearSearchResults(); + } + catch (err) { + const msg = localize("autolispext.project.commands.clearresultfailed", "Failed to clear search results."); + showErrorMessage(msg, err); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('autolisp.stopSearch', () => { + try { + stopSearching(); + } + catch (err) { + if (err) + console.log(err.toString()); + } + })); + + IconUris.initialize(); + + grantExePermission(); + } + catch (e) { + const msg = localize("autolispext.project.commands.initializefailed", "Failed to initalize the AutoLISP Project Manager."); + vscode.window.showErrorMessage(msg); + console.log(e); + } } const showErrOpt = { modal: true }; export function showErrorMessage(description: string, detail: string) { - if (!detail) { - vscode.window.showErrorMessage(description, showErrOpt); - } else { - vscode.window.showErrorMessage(description + "\r\n" + detail, showErrOpt); - } + if (!detail) { + vscode.window.showErrorMessage(description, showErrOpt); + } else { + vscode.window.showErrorMessage(description + "\r\n" + detail, showErrOpt); + } } diff --git a/extension/src/project/projectDefinition.ts b/extension/src/project/projectDefinition.ts index fa20531d..80711279 100644 --- a/extension/src/project/projectDefinition.ts +++ b/extension/src/project/projectDefinition.ts @@ -1,107 +1,107 @@ import { Sexpression } from '../astObjects/sexpression'; -import * as nls from 'vscode-nls'; -const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); +//import * as nls from 'vscode-nls'; +//const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export class ProjectDefinition { - static key_name: string = ":NAME"; - static key_own_list: string = ":OWN-LIST"; - static key_fas_dir: string = ":FAS-DIRECTORY"; - static key_tmp_dir: string = ":TMP-DIRECTORY"; - static key_proj_keys: string = ":PROJECT-KEYS"; - static key_cxt_id: string = ":CONTEXT-ID"; - - static key_expr_name: string = "VLISP-PROJECT-LIST"; - - static standardKeys: string[] = [ - ProjectDefinition.key_name, - ProjectDefinition.key_own_list, - ProjectDefinition.key_fas_dir, - ProjectDefinition.key_tmp_dir, - ProjectDefinition.key_proj_keys, - ProjectDefinition.key_cxt_id - ]; - - metaData: object = {}; - - public static CreateEmpty(prjName: string): ProjectDefinition { - if (!prjName) - return null; - - let ret = new ProjectDefinition(); - ret.metaData[ProjectDefinition.key_name] = prjName; - ret.metaData[ProjectDefinition.key_own_list] = 'nil'; - ret.metaData[ProjectDefinition.key_fas_dir] = 'nil'; - ret.metaData[ProjectDefinition.key_tmp_dir] = 'nil'; - ret.metaData[ProjectDefinition.key_proj_keys] = '(:BUILD (:standard))'; - ret.metaData[ProjectDefinition.key_cxt_id] = ':AUTOLISP'; - - return ret; - } - - public static Create(prjExpr: Sexpression): ProjectDefinition { - if (!prjExpr) - return null; - - let atomNum = prjExpr.atoms.length; - if (atomNum % 2 != 1) { - //project expression is something like (VLISP-PROJECT-LIST key1 value1 key2 value2) - console.log("Malformed project expression."); - return null; - } - - if ((prjExpr.atoms[0].isLeftParen() == false) || - (prjExpr.atoms[atomNum - 1].isRightParen() == false)) - return null; - - let ret = new ProjectDefinition(); - - let pairNum = (atomNum - 1) / 2 - 1; - for (let i = 0; i < pairNum; i++) { - let keyIndex = 2 + i * 2; - let valueIndex = 2 + i * 2 + 1; - - let key = prjExpr.atoms[keyIndex].symbol.toUpperCase(); - let value = prjExpr.atoms[valueIndex].symbol; - - if (prjExpr.atoms[valueIndex] instanceof Sexpression) { - value = Sexpression.getRawText(prjExpr.atoms[valueIndex] as Sexpression); - } - - ret.metaData[key] = value; - } - - return ret; - } - - public get Name(): string { - if (!this.metaData.hasOwnProperty(ProjectDefinition.key_name)) - return null; - - return this.metaData[ProjectDefinition.key_name]; - } - - public getProperty(key: string): string { - if (this.metaData.hasOwnProperty(key)) - return this.metaData[key]; - - return "nil"; - } - - public hasProperty(key: string): boolean { - if (this.metaData.hasOwnProperty(key)) - return true; - - return false; - } - - public static isStandardProperty(key: string): boolean { - let upper = key.toUpperCase(); - - for (let sKey of ProjectDefinition.standardKeys) { - if (upper == sKey) - return true; - } - - return false; - } + static key_name: string = ":NAME"; + static key_own_list: string = ":OWN-LIST"; + static key_fas_dir: string = ":FAS-DIRECTORY"; + static key_tmp_dir: string = ":TMP-DIRECTORY"; + static key_proj_keys: string = ":PROJECT-KEYS"; + static key_cxt_id: string = ":CONTEXT-ID"; + + static key_expr_name: string = "VLISP-PROJECT-LIST"; + + static standardKeys: string[] = [ + ProjectDefinition.key_name, + ProjectDefinition.key_own_list, + ProjectDefinition.key_fas_dir, + ProjectDefinition.key_tmp_dir, + ProjectDefinition.key_proj_keys, + ProjectDefinition.key_cxt_id + ]; + + metaData: object = {}; + + public static CreateEmpty(prjName: string): ProjectDefinition { + if (!prjName) + return null; + + const ret = new ProjectDefinition(); + ret.metaData[ProjectDefinition.key_name] = prjName; + ret.metaData[ProjectDefinition.key_own_list] = 'nil'; + ret.metaData[ProjectDefinition.key_fas_dir] = 'nil'; + ret.metaData[ProjectDefinition.key_tmp_dir] = 'nil'; + ret.metaData[ProjectDefinition.key_proj_keys] = '(:BUILD (:standard))'; + ret.metaData[ProjectDefinition.key_cxt_id] = ':AUTOLISP'; + + return ret; + } + + public static Create(prjExpr: Sexpression): ProjectDefinition { + if (!prjExpr) + return null; + + const atomNum = prjExpr.atoms.length; + if (atomNum % 2 != 1) { + //project expression is something like (VLISP-PROJECT-LIST key1 value1 key2 value2) + console.log("Malformed project expression."); + return null; + } + + if ((prjExpr.atoms[0].isLeftParen() == false) || + (prjExpr.atoms[atomNum - 1].isRightParen() == false)) + return null; + + const ret = new ProjectDefinition(); + + const pairNum = (atomNum - 1) / 2 - 1; + for (let i = 0; i < pairNum; i++) { + const keyIndex = 2 + i * 2; + const valueIndex = 2 + i * 2 + 1; + + const key = prjExpr.atoms[keyIndex].symbol.toUpperCase(); + let value = prjExpr.atoms[valueIndex].symbol; + + if (prjExpr.atoms[valueIndex] instanceof Sexpression) { + value = Sexpression.getRawText(prjExpr.atoms[valueIndex] as Sexpression); + } + + ret.metaData[key] = value; + } + + return ret; + } + + public get Name(): string { + if (!Object.prototype.hasOwnProperty.call(this.metaData, ProjectDefinition.key_name)) + return null; + + return this.metaData[ProjectDefinition.key_name]; + } + + public getProperty(key: string): string { + if (!Object.prototype.hasOwnProperty.call(this.metaData, key)) + return this.metaData[key]; + + return "nil"; + } + + public hasProperty(key: string): boolean { + if (Object.prototype.hasOwnProperty.call(this.metaData, key)) + return true; + + return false; + } + + public static isStandardProperty(key: string): boolean { + const upper = key.toUpperCase(); + + for (const sKey of ProjectDefinition.standardKeys) { + if (upper == sKey) + return true; + } + + return false; + } } diff --git a/extension/src/project/projectTree.ts b/extension/src/project/projectTree.ts index b572855c..00f75775 100644 --- a/extension/src/project/projectTree.ts +++ b/extension/src/project/projectTree.ts @@ -4,237 +4,236 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { pathEqual } from '../utils'; import { getTreeItemTitle } from './projectutil' - +import * as fs from 'fs' import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); -const fs = require('fs'); export interface DisplayNode { - getDisplayText: () => string; - getTooltip: () => string; - getIconUri: () => vscode.Uri | vscode.IconPath; - getNodeType: () => string; - getCollapsibleState: () => vscode.TreeItemCollapsibleState; - setCollapsibleState(state: vscode.TreeItemCollapsibleState): void; + getDisplayText: () => string; + getTooltip: () => string; + getIconUri: () => vscode.Uri | vscode.IconPath; + getNodeType: () => string; + getCollapsibleState: () => vscode.TreeItemCollapsibleState; + setCollapsibleState(state: vscode.TreeItemCollapsibleState): void; } export class ProjectNode implements DisplayNode { - sourceFiles: Array; + sourceFiles: Array; - projectFilePath: string; - projectDirectory: string; + projectFilePath: string; + projectDirectory: string; - projectName: string; + projectName: string; - projectModified: Boolean = false; + projectModified: boolean = false; - projectMetadata: ProjectDefinition = null; - collapsibleState: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.Expanded; + projectMetadata: ProjectDefinition = null; + collapsibleState: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.Expanded; - getDisplayText(): string { - if (this.projectModified) { - let unsaved = localize("autolispext.project.tree.unsaved", " (UNSAVED)"); - return this.projectName + unsaved; - } else { - return this.projectName; - } - } + getDisplayText(): string { + if (this.projectModified) { + const unsaved = localize("autolispext.project.tree.unsaved", " (UNSAVED)"); + return this.projectName + unsaved; + } else { + return this.projectName; + } + } - getTooltip(): string { - return this.projectFilePath; - } + getTooltip(): string { + return this.projectFilePath; + } - getNodeType(): string { - return "project" - } + getNodeType(): string { + return "project" + } - getCollapsibleState(): vscode.TreeItemCollapsibleState { - return this.collapsibleState; - } + getCollapsibleState(): vscode.TreeItemCollapsibleState { + return this.collapsibleState; + } - setCollapsibleState(state: vscode.TreeItemCollapsibleState) { - this.collapsibleState = state; - } + setCollapsibleState(state: vscode.TreeItemCollapsibleState) { + this.collapsibleState = state; + } - getIconUri(): vscode.Uri | vscode.IconPath { - return null;//currently we don't provide icon for project node - } + getIconUri(): vscode.Uri | vscode.IconPath { + return null;//currently we don't provide icon for project node + } } export class LspFileNode implements DisplayNode { - filePath: string; - fileExists: boolean; - rawFilePath: string;//the raw path string read from .prj file; for new added file, it should be null - - getDisplayText(): string { - return path.basename(this.filePath); - } - - getTooltip(): string { - this.fileExists = fs.existsSync(this.filePath); - if (this.fileExists) { - return this.filePath; - } else { - let msg = localize("autolispext.project.tree.filenotexist", "File doesn't exist: "); - return msg + this.filePath; - } - } - - getNodeType(): string { - return "lspFile" - } - - getCollapsibleState(): vscode.TreeItemCollapsibleState { - return vscode.TreeItemCollapsibleState.None; - } - - setCollapsibleState() { - } - - getIconUri(): vscode.Uri | vscode.IconPath { - this.fileExists = fs.existsSync(this.filePath); - if (this.fileExists) - return IconUris.lspFile(); - else - return IconUris.missingFile(); - } + filePath: string; + fileExists: boolean; + rawFilePath: string;//the raw path string read from .prj file; for new added file, it should be null + + getDisplayText(): string { + return path.basename(this.filePath); + } + + getTooltip(): string { + this.fileExists = fs.existsSync(this.filePath); + if (this.fileExists) { + return this.filePath; + } else { + const msg = localize("autolispext.project.tree.filenotexist", "File doesn't exist: "); + return msg + this.filePath; + } + } + + getNodeType(): string { + return "lspFile" + } + + getCollapsibleState(): vscode.TreeItemCollapsibleState { + return vscode.TreeItemCollapsibleState.None; + } + + setCollapsibleState() { + } + + getIconUri(): vscode.Uri | vscode.IconPath { + this.fileExists = fs.existsSync(this.filePath); + if (this.fileExists) + return IconUris.lspFile(); + else + return IconUris.missingFile(); + } } export class ProjectTreeProvider implements vscode.TreeDataProvider { - private rootNode: ProjectNode = null; - private treeControl: vscode.TreeView = null; - - private constructor() { - ProjectTreeProvider.currentInstance = this; - - this.treeControl = vscode.window.createTreeView('Autolisp-ProjectView', { treeDataProvider: this }); - this.treeControl.onDidCollapseElement(e => { - e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Collapsed); - }) - this.treeControl.onDidExpandElement(e => { - e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Expanded); - }) - } - - private static currentInstance: ProjectTreeProvider = new ProjectTreeProvider(); - static instance(): ProjectTreeProvider { - return ProjectTreeProvider.currentInstance; - } - - public updateData(newRootNode: ProjectNode) { - this.rootNode = newRootNode; - vscode.commands.executeCommand("setContext", "autolisp.hasProject", ProjectTreeProvider.hasProjectOpened()); - this.refreshData(null); - } - - public refreshData(data?: DisplayNode) { - this.onChanged.fire(data); - } - - public get projectNode(): ProjectNode { - return this.rootNode; - } - - public static hasProjectOpened(): Boolean { - if (!ProjectTreeProvider.currentInstance) - return false; - - if (!ProjectTreeProvider.currentInstance.projectNode) - return false; - - return true; - } - - public addFileNode(filePath: string) { - if (!this.rootNode) - return; - - addLispFileNode2ProjectTree(this.rootNode, filePath, null); - this.rootNode.projectModified = true; - } - - private onChanged: vscode.EventEmitter = new vscode.EventEmitter(); - public readonly onDidChangeTreeData?: vscode.Event = this.onChanged.event; - - public static TreeItemClicked = 'LispProjectNodeClicked'; - public getTreeItem(element: DisplayNode): vscode.TreeItem | Thenable { - try { - let treeNode = new vscode.TreeItem(element.getDisplayText()); - treeNode.collapsibleState = element.getCollapsibleState(); - treeNode.tooltip = element.getTooltip(); - treeNode.iconPath = element.getIconUri(); - treeNode.contextValue = element.getNodeType(); - - treeNode.command = { - title: getTreeItemTitle(treeNode), - command: ProjectTreeProvider.TreeItemClicked, - tooltip: treeNode.tooltip, - arguments: [ - element - ] - } - return treeNode; - } - catch (err) { - console.log(err); - return null; - } - } - - public getChildren(element?: DisplayNode): vscode.ProviderResult { - try { - if (!this.rootNode) - return null; - - if (!element) { - //it's asking for the root node - let ret: DisplayNode[] = [this.rootNode]; - return ret; - } - - if (element == this.rootNode) { - return this.rootNode.sourceFiles; - } - - return null; - } - catch (err) { - console.log(err); - return null; - } - } + private rootNode: ProjectNode = null; + private treeControl: vscode.TreeView = null; + + private constructor() { + ProjectTreeProvider.currentInstance = this; + + this.treeControl = vscode.window.createTreeView('Autolisp-ProjectView', { treeDataProvider: this }); + this.treeControl.onDidCollapseElement(e => { + e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Collapsed); + }) + this.treeControl.onDidExpandElement(e => { + e.element.setCollapsibleState(vscode.TreeItemCollapsibleState.Expanded); + }) + } + + private static currentInstance: ProjectTreeProvider = new ProjectTreeProvider(); + static instance(): ProjectTreeProvider { + return ProjectTreeProvider.currentInstance; + } + + public updateData(newRootNode: ProjectNode) { + this.rootNode = newRootNode; + vscode.commands.executeCommand("setContext", "autolisp.hasProject", ProjectTreeProvider.hasProjectOpened()); + this.refreshData(null); + } + + public refreshData(data?: DisplayNode) { + this.onChanged.fire(data); + } + + public get projectNode(): ProjectNode { + return this.rootNode; + } + + public static hasProjectOpened(): boolean { + if (!ProjectTreeProvider.currentInstance) + return false; + + if (!ProjectTreeProvider.currentInstance.projectNode) + return false; + + return true; + } + + public addFileNode(filePath: string) { + if (!this.rootNode) + return; + + addLispFileNode2ProjectTree(this.rootNode, filePath, null); + this.rootNode.projectModified = true; + } + + private onChanged: vscode.EventEmitter = new vscode.EventEmitter(); + public readonly onDidChangeTreeData?: vscode.Event = this.onChanged.event; + + public static TreeItemClicked = 'LispProjectNodeClicked'; + public getTreeItem(element: DisplayNode): vscode.TreeItem | Thenable { + try { + const treeNode = new vscode.TreeItem(element.getDisplayText()); + treeNode.collapsibleState = element.getCollapsibleState(); + treeNode.tooltip = element.getTooltip(); + treeNode.iconPath = element.getIconUri(); + treeNode.contextValue = element.getNodeType(); + + treeNode.command = { + title: getTreeItemTitle(treeNode), + command: ProjectTreeProvider.TreeItemClicked, + tooltip: treeNode.tooltip, + arguments: [ + element + ] + } + return treeNode; + } + catch (err) { + console.log(err); + return null; + } + } + + public getChildren(element?: DisplayNode): vscode.ProviderResult { + try { + if (!this.rootNode) + return null; + + if (!element) { + //it's asking for the root node + const ret: DisplayNode[] = [this.rootNode]; + return ret; + } + + if (element == this.rootNode) { + return this.rootNode.sourceFiles; + } + + return null; + } + catch (err) { + console.log(err); + return null; + } + } } export function isFileAlreadyInProject(fileName: string, root: ProjectNode): boolean { - for (let fileNode of root.sourceFiles) { - if (pathEqual(fileName, fileNode.filePath, false)) - return true; - } + for (const fileNode of root.sourceFiles) { + if (pathEqual(fileName, fileNode.filePath, false)) + return true; + } - return false; + return false; } export function hasFileWithSameName(fileName: string, root: ProjectNode): boolean { - let lowerLeft = path.basename(fileName).toLocaleLowerCase(); + const lowerLeft = path.basename(fileName).toLocaleLowerCase(); - for (let fileNode of root.sourceFiles) { - let lowerRight = path.basename(fileNode.filePath).toLocaleLowerCase(); + for (const fileNode of root.sourceFiles) { + const lowerRight = path.basename(fileNode.filePath).toLocaleLowerCase(); - if (lowerLeft == lowerRight) - return true; - } + if (lowerLeft == lowerRight) + return true; + } - return false; + return false; } //root: node of the owner project //fileName: the absolute file path of the lsp file to add //rawFilePath: the raw string of file path read from .prj file; for new added file, it should be null export function addLispFileNode2ProjectTree(root: ProjectNode, fileName: string, rawFilePath: string) { - let fileNode = new LspFileNode(); - fileNode.filePath = fileName; - fileNode.fileExists = fs.existsSync(fileName); - fileNode.rawFilePath = rawFilePath; - root.sourceFiles.push(fileNode); + const fileNode = new LspFileNode(); + fileNode.filePath = fileName; + fileNode.fileExists = fs.existsSync(fileName); + fileNode.rawFilePath = rawFilePath; + root.sourceFiles.push(fileNode); } diff --git a/extension/src/project/projectutil.ts b/extension/src/project/projectutil.ts index c7ee48d8..f76c4331 100644 --- a/extension/src/project/projectutil.ts +++ b/extension/src/project/projectutil.ts @@ -2,9 +2,9 @@ import * as vscode from "vscode"; export function getTreeItemTitle(treeNode: vscode.TreeItem): string { if (treeNode.label instanceof String) { - var res = treeNode.label as string; + const res = treeNode.label as string; return res; } - var itemlebel = treeNode.label as vscode.TreeItemLabel; + const itemlebel = treeNode.label as vscode.TreeItemLabel; return itemlebel.label; } diff --git a/extension/src/project/readOnlyDocument.ts b/extension/src/project/readOnlyDocument.ts index 0b388797..6e76de04 100644 --- a/extension/src/project/readOnlyDocument.ts +++ b/extension/src/project/readOnlyDocument.ts @@ -2,264 +2,264 @@ import * as vscode from 'vscode'; import * as fs from 'fs'; import * as nls from 'vscode-nls'; import { LispParser } from '../parsing/lispParser'; -import { DocumentServices } from '../services/documentServices'; +import { DocumentServices, Selectors } from '../services/documentServices'; import { LispContainer } from '../astObjects/lispContainer'; import { DclTile } from '../astObjects/dclTile'; import * as DclParser from '../parsing/dclParser'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export class ReadonlyLine implements vscode.TextLine { - private constructor() { } + private constructor() { } - static Create(txt: string, line: number): ReadonlyLine { - let ret = new ReadonlyLine(); + static Create(txt: string, line: number): ReadonlyLine { + const ret = new ReadonlyLine(); - ret.text = txt; - ret.lineNumber = line; + ret.text = txt; + ret.lineNumber = line; - return ret; - } + return ret; + } - lineNumber: number; - text: string; + lineNumber: number; + text: string; - get rangeIncludingLineBreak(): vscode.Range { - throw new Error("Method not implemented");//not used in AutolispExt - } + get rangeIncludingLineBreak(): vscode.Range { + throw new Error("Method not implemented");//not used in AutolispExt + } - get range(): vscode.Range { - throw new Error("Method not implemented");//not used in AutolispExt - } + get range(): vscode.Range { + throw new Error("Method not implemented");//not used in AutolispExt + } - get firstNonWhitespaceCharacterIndex(): number { - throw new Error("Method not implemented");//not used in AutolispExt - } + get firstNonWhitespaceCharacterIndex(): number { + throw new Error("Method not implemented");//not used in AutolispExt + } - get isEmptyOrWhitespace(): boolean { - throw new Error("Method not implemented");//not used in AutolispExt - } + get isEmptyOrWhitespace(): boolean { + throw new Error("Method not implemented");//not used in AutolispExt + } } export class ReadonlyDocument implements vscode.TextDocument { - private constructor(filePath: string) { - this.uri = vscode.Uri.file(filePath); - this.fileName = DocumentServices.normalizeFilePath(filePath); - this.isUntitled = false; - this.version = 1; - this.isDirty = false; - this.isClosed = false; - } - - static open(filePath: string): ReadonlyDocument { - const langId = DocumentServices.getSelectorType(filePath); - if (fs.existsSync(filePath) === false || langId === "") { - return null; - } - - let ret = new ReadonlyDocument(filePath); - - let data = fs.readFileSync(filePath).toString(); - ret.initialize(data, langId); - return ret; - } - - // Example Use Cases - // Identify global variables from fragments of AutoLisp code - // Currently in use to save/create PRJ files - static createMemoryDocument(fileContent: string, languageId: string): ReadonlyDocument { - let ret = new ReadonlyDocument(''); - ret.initialize(fileContent, languageId); - return ret; - } - - // Added this to essentially cast standard TextDocument's to a ROD type enabling work to be done with enhanced standardized/functionality - // Related to to discussion issue#30 - static getMemoryDocument(doc: vscode.TextDocument): ReadonlyDocument { - let ret = new ReadonlyDocument(''); - ret.eol = vscode.EndOfLine.CRLF; - ret.eolLength = 2; - ret.lineCount = doc.lineCount; - ret.languageId = DocumentServices.getSelectorType(doc.fileName); - ret.lines = []; - ret.fileName = doc.fileName; - for (let i = 0; i < doc.lineCount; i++) { - ret.lines.push(doc.lineAt(i).text); - } - ret.fileContent = ret.lines.join('\r\n'); - return ret; - } - - initialize(rawContent: string, langId: string) { - this.fileContent = rawContent.replace(/\r*\n/g, '\r\n');//rawContent.split('\r\n').join('\n').split('\n').join('\r\n');//to make sure every line ends with \r\n - this.eol = vscode.EndOfLine.CRLF; - this.eolLength = 2; - - this.languageId = langId; - - if (this.fileContent.length === 0) { - this.lineCount = 0; - this.lines = []; - } else { - this.lines = this.fileContent.split('\r\n'); - this.lineCount = this.lines.length; - } - } - - fileContent: string; - lines: string[]; - eolLength: number; - private _documentContainer: LispContainer | DclTile;// Added to drastically reduces complexity in other places. - - //#region implementing vscode.TextDocument - - uri: vscode.Uri; - fileName: string; - isUntitled: boolean; - languageId: string; - version: number; - isDirty: boolean; - isClosed: boolean; - encoding: string; - eol: vscode.EndOfLine; - lineCount: number; - - save(): Thenable { - throw new Error('save is not allowed on read-only document.'); - } - - lineAt(line: number): vscode.TextLine; - lineAt(position: vscode.Position): vscode.TextLine; - lineAt(position: number | vscode.Position): vscode.TextLine { - let line = -1; - if (typeof position === 'number') { - line = position; - } else { - line = position.line; - } - - if (line >= this.lineCount) { //line number starts by 0 - return null; - } - - return ReadonlyLine.Create(this.lines[line], line); - } - - offsetAt(position: vscode.Position): number { - if (position.line >= this.lineCount) { - return this.fileContent.length; //invalid input; put the "cursor" after the last char - } - let offset = 0; - //count char number before the given line - for (let line = 0; line < position.line; line++) { - offset += this.lines[line].length; - offset += this.eolLength; - } - - //now the last line - let lastLine = this.lines[position.line]; - let charNum = position.character; - if (position.character >= lastLine.length) { - charNum = lastLine.length; //put the "cursor" after the last char - } - offset += charNum; - - return offset; - } - - positionAt(offset: number): vscode.Position { - let charCounted = 0; - - for (let line = 0; line < this.lineCount; line++) { - let lineText = this.lines[line]; - if (charCounted + lineText.length >= offset) { - //the offset is inside current line - let charNum = offset - charCounted; - - return new vscode.Position(line, charNum); - } - - //now, the offset is outside current line - - if (line === this.lineCount - 1) { - //current line is the end of all, so the given position is invalid - return new vscode.Position(line, lineText.length);//put the "cursor" after the last char - } - - //then there's at least 1 more line; continue the loop - charCounted += lineText.length; - charCounted += this.eolLength; - - if (charCounted >= offset) { - //well, the given offset is inside or right after the '\r\n' - return new vscode.Position(line + 1, 0); - } - } - - //the code shouldn't get here because it should have returned in the for loop when line == this.lineCount - 1 - let msg = localize("autolispext.project.readonlydocument.convertoffsettopositionfailed", "Failed to convert offset to position."); - throw new Error(msg); - } - - getText(range?: vscode.Range): string { - if (!range) { - return this.fileContent; - } - range = this.validateRange(range); - - let start = this.offsetAt(range.start); - let end = this.offsetAt(range.end); - - if (start >= this.fileContent.length) { - return ''; - } - return this.fileContent.substring(start, end); - } - - getWordRangeAtPosition(position: vscode.Position, regex?: RegExp): vscode.Range { - throw new Error('Method not implemented.');//it's only needed by auto complete, which won't run for a .prj - } - - validateRange(range: vscode.Range): vscode.Range { - let start = this.offsetAt(range.start); - let end = this.offsetAt(range.end); - - let startPos = this.positionAt(start); - let endPos = this.positionAt(end); - - return new vscode.Range(startPos, endPos); - } - - validatePosition(position: vscode.Position): vscode.Position { - throw new Error('Method not implemented.'); //not used in AutolispExt - } - //#endregion - - equal(doc: vscode.TextDocument): boolean { - return this.fileName.toUpperCase().replace(/\\/g, '/') === doc.fileName.toUpperCase().replace(/\\/g, '/') - && this.fileContent === doc.getText().replace(/\r\n|\r|\n/g, '\r\n');//.split('\r\n').join('\n').split('\n').join('\r\n'); - } - - get documentContainer(): LispContainer { - if (this.languageId !== DocumentServices.Selectors.LSP) { - return null; - } - - return this._documentContainer instanceof LispContainer - ? this._documentContainer - : this._documentContainer = LispParser.getDocumentContainer(this.fileContent); - } - - get documentDclContainer(): DclTile { - if (this.languageId !== DocumentServices.Selectors.DCL) { - return null; - } - - return this._documentContainer instanceof DclTile - ? this._documentContainer - : this._documentContainer = DclParser.getDocumentTileContainer(this.fileContent); - } - - get isLSP(): boolean { - return this.languageId === DocumentServices.Selectors.LSP; - } + private constructor(filePath: string) { + this.uri = vscode.Uri.file(filePath); + this.fileName = DocumentServices.normalizeFilePath(filePath); + this.isUntitled = false; + this.version = 1; + this.isDirty = false; + this.isClosed = false; + } + + static open(filePath: string): ReadonlyDocument { + const langId = DocumentServices.getSelectorType(filePath); + if (fs.existsSync(filePath) === false || langId === "") { + return null; + } + + const ret = new ReadonlyDocument(filePath); + + const data = fs.readFileSync(filePath).toString(); + ret.initialize(data, langId); + return ret; + } + + // Example Use Cases + // Identify global variables from fragments of AutoLisp code + // Currently in use to save/create PRJ files + static createMemoryDocument(fileContent: string, languageId: string): ReadonlyDocument { + const ret = new ReadonlyDocument(''); + ret.initialize(fileContent, languageId); + return ret; + } + + // Added this to essentially cast standard TextDocument's to a ROD type enabling work to be done with enhanced standardized/functionality + // Related to to discussion issue#30 + static getMemoryDocument(doc: vscode.TextDocument): ReadonlyDocument { + const ret = new ReadonlyDocument(''); + ret.eol = vscode.EndOfLine.CRLF; + ret.eolLength = 2; + ret.lineCount = doc.lineCount; + ret.languageId = DocumentServices.getSelectorType(doc.fileName); + ret.lines = []; + ret.fileName = doc.fileName; + for (let i = 0; i < doc.lineCount; i++) { + ret.lines.push(doc.lineAt(i).text); + } + ret.fileContent = ret.lines.join('\r\n'); + return ret; + } + + initialize(rawContent: string, langId: string) { + this.fileContent = rawContent.replace(/\r*\n/g, '\r\n');//rawContent.split('\r\n').join('\n').split('\n').join('\r\n');//to make sure every line ends with \r\n + this.eol = vscode.EndOfLine.CRLF; + this.eolLength = 2; + + this.languageId = langId; + + if (this.fileContent.length === 0) { + this.lineCount = 0; + this.lines = []; + } else { + this.lines = this.fileContent.split('\r\n'); + this.lineCount = this.lines.length; + } + } + + fileContent: string; + lines: string[]; + eolLength: number; + private _documentContainer: LispContainer | DclTile;// Added to drastically reduces complexity in other places. + + //#region implementing vscode.TextDocument + + uri: vscode.Uri; + fileName: string; + isUntitled: boolean; + languageId: string; + version: number; + isDirty: boolean; + isClosed: boolean; + encoding: string; + eol: vscode.EndOfLine; + lineCount: number; + + save(): Thenable { + throw new Error('save is not allowed on read-only document.'); + } + + lineAt(line: number): vscode.TextLine; + lineAt(position: vscode.Position): vscode.TextLine; + lineAt(position: number | vscode.Position): vscode.TextLine { + let line = -1; + if (typeof position === 'number') { + line = position; + } else { + line = position.line; + } + + if (line >= this.lineCount) { //line number starts by 0 + return null; + } + + return ReadonlyLine.Create(this.lines[line], line); + } + + offsetAt(position: vscode.Position): number { + if (position.line >= this.lineCount) { + return this.fileContent.length; //invalid input; put the "cursor" after the last char + } + let offset = 0; + //count char number before the given line + for (let line = 0; line < position.line; line++) { + offset += this.lines[line].length; + offset += this.eolLength; + } + + //now the last line + const lastLine = this.lines[position.line]; + let charNum = position.character; + if (position.character >= lastLine.length) { + charNum = lastLine.length; //put the "cursor" after the last char + } + offset += charNum; + + return offset; + } + + positionAt(offset: number): vscode.Position { + let charCounted = 0; + + for (let line = 0; line < this.lineCount; line++) { + const lineText = this.lines[line]; + if (charCounted + lineText.length >= offset) { + //the offset is inside current line + const charNum = offset - charCounted; + + return new vscode.Position(line, charNum); + } + + //now, the offset is outside current line + + if (line === this.lineCount - 1) { + //current line is the end of all, so the given position is invalid + return new vscode.Position(line, lineText.length);//put the "cursor" after the last char + } + + //then there's at least 1 more line; continue the loop + charCounted += lineText.length; + charCounted += this.eolLength; + + if (charCounted >= offset) { + //well, the given offset is inside or right after the '\r\n' + return new vscode.Position(line + 1, 0); + } + } + + //the code shouldn't get here because it should have returned in the for loop when line == this.lineCount - 1 + const msg = localize("autolispext.project.readonlydocument.convertoffsettopositionfailed", "Failed to convert offset to position."); + throw new Error(msg); + } + + getText(range?: vscode.Range): string { + if (!range) { + return this.fileContent; + } + range = this.validateRange(range); + + const start = this.offsetAt(range.start); + const end = this.offsetAt(range.end); + + if (start >= this.fileContent.length) { + return ''; + } + return this.fileContent.substring(start, end); + } + //eslint-disable-next-line + getWordRangeAtPosition(position: vscode.Position, regex?: RegExp): vscode.Range { + throw new Error('Method not implemented.');//it's only needed by auto complete, which won't run for a .prj + } + + validateRange(range: vscode.Range): vscode.Range { + const start = this.offsetAt(range.start); + const end = this.offsetAt(range.end); + + const startPos = this.positionAt(start); + const endPos = this.positionAt(end); + + return new vscode.Range(startPos, endPos); + } + //eslint-disable-next-line + validatePosition(position: vscode.Position): vscode.Position { + throw new Error('Method not implemented.'); //not used in AutolispExt + } + //#endregion + + equal(doc: vscode.TextDocument): boolean { + return this.fileName.toUpperCase().replace(/\\/g, '/') === doc.fileName.toUpperCase().replace(/\\/g, '/') + && this.fileContent === doc.getText().replace(/\r\n|\r|\n/g, '\r\n');//.split('\r\n').join('\n').split('\n').join('\r\n'); + } + + get documentContainer(): LispContainer { + if (this.languageId !== Selectors.LSP) { + return null; + } + + return this._documentContainer instanceof LispContainer + ? this._documentContainer + : this._documentContainer = LispParser.getDocumentContainer(this.fileContent); + } + + get documentDclContainer(): DclTile { + if (this.languageId !== Selectors.DCL) { + return null; + } + + return this._documentContainer instanceof DclTile + ? this._documentContainer + : this._documentContainer = DclParser.getDocumentTileContainer(this.fileContent); + } + + get isLSP(): boolean { + return this.languageId === Selectors.LSP; + } } \ No newline at end of file diff --git a/extension/src/project/refreshProject.ts b/extension/src/project/refreshProject.ts index 2115e86c..1c1e9f14 100644 --- a/extension/src/project/refreshProject.ts +++ b/extension/src/project/refreshProject.ts @@ -6,7 +6,7 @@ export function RefreshProject(){ if (!ProjectTreeProvider.hasProjectOpened()) { return; } - let prjFilePath = ProjectTreeProvider.instance().projectNode.projectFilePath; - let prjNode = OpenProjectFile(vscode.Uri.file(prjFilePath)); + const prjFilePath = ProjectTreeProvider.instance().projectNode.projectFilePath; + const prjNode = OpenProjectFile(vscode.Uri.file(prjFilePath)); ProjectTreeProvider.instance().updateData(prjNode); } diff --git a/extension/src/project/saveProject.ts b/extension/src/project/saveProject.ts index 82f7bcd1..bea5fcdc 100644 --- a/extension/src/project/saveProject.ts +++ b/extension/src/project/saveProject.ts @@ -16,27 +16,27 @@ import * as vscode from 'vscode'; export async function SaveProject(refresh: boolean) { try { if (ProjectTreeProvider.hasProjectOpened() == false) { - let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); + const msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); return Promise.reject(msg); } - let root = ProjectTreeProvider.instance().projectNode; + const root = ProjectTreeProvider.instance().projectNode; //work out the correct project file text - let prjFileText = generateProjectText(root); + const prjFileText = generateProjectText(root); if (!prjFileText) { - let msg = localize("autolispext.project.saveproject.generateprjcontentfailed", "Failed to generate project content."); + const msg = localize("autolispext.project.saveproject.generateprjcontentfailed", "Failed to generate project content."); return Promise.reject(msg); } //format the text before writing to file - let doc = ReadonlyDocument.createMemoryDocument(prjFileText, 'autolispprj'); + const doc = ReadonlyDocument.createMemoryDocument(prjFileText, 'autolispprj'); longListFormatAsSingleColum(); - let formatedText = LispFormatter.format(doc, null); + const formatedText = LispFormatter.format(doc, null); resetLongListFormatAsSingleColum(); //write to file - let targetPath = root.projectFilePath; + const targetPath = root.projectFilePath; fs.writeFileSync(targetPath, formatedText); root.projectModified = false; @@ -59,14 +59,14 @@ export async function SaveProject(refresh: boolean) { export async function SaveAll() { const root = ProjectTreeProvider.instance().projectNode; if (!root) { - let msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); + const msg = localize("autolispext.project.saveproject.noprojecttosave", "No project to save."); return Promise.reject(msg); } // get unsaved source files const unsavedFiles = vscode.workspace.textDocuments.filter(file => { if (file.isDirty) { - for (let fileNode of root.sourceFiles) { + for (const fileNode of root.sourceFiles) { if (pathEqual(fileNode.filePath, file.fileName, false)) { return true; } @@ -75,7 +75,7 @@ export async function SaveAll() { } }); - for (let file of unsavedFiles) { + for (const file of unsavedFiles) { file.save(); } @@ -89,7 +89,7 @@ export async function SaveAll() { //return the raw text of project file, using the latest source file list to replace the original one; //return null on error function generateProjectText(root: ProjectNode): string { - let fileList = makeSourceFileList(root); + const fileList = makeSourceFileList(root); let prjFileText = makeProjectFileHeader(root); prjFileText += makeProjectExpression(fileList, root.projectMetadata); @@ -99,7 +99,7 @@ function generateProjectText(root: ProjectNode): string { } function makeProjectFileHeader(root: ProjectNode): string { - let today = new Date(); + const today = new Date(); let ret = ';;; VLisp project file [V2.0] ' + root.projectName; ret += ' saved to:[' + root.projectDirectory + ']'; ret += ' at:[' + today.toLocaleDateString() + ']'; @@ -122,7 +122,7 @@ function makeProjectExpression(srcFileList: string, prjDef: ProjectDefinition): ret += makeKeyValuePair(prjDef, ProjectDefinition.key_cxt_id); //in case there're some more properties other than the standard properties - for (let key in prjDef.metaData) { + for (const key in prjDef.metaData) { if (ProjectDefinition.isStandardProperty(key)) continue; @@ -147,26 +147,26 @@ function makeSourceFileList(root: ProjectNode): string { else { fileList = ' ('; - for (let file of root.sourceFiles) { + for (const file of root.sourceFiles) { if (file.rawFilePath) { fileList += file.rawFilePath; //use the original text read on opening fileList += " "; continue; } - let fileDir = path.dirname(file.filePath); + const fileDir = path.dirname(file.filePath); if (pathEqual(root.projectDirectory, fileDir, true) == false) { //in this case, we use absolute path, and file extension will be ignored let str2Add = path.normalize(file.filePath).split('\\').join('/');// "/" is used in file path in .prj file str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension - fileList += ('\"' + str2Add + '\" '); + fileList += ('"' + str2Add + '" '); continue; } //in this case, the directory and file extension will be ignored let str2Add = path.basename(file.filePath); str2Add = str2Add.substring(0, str2Add.length - 4);//to remove the extension - fileList += ('\"' + str2Add + '\" '); + fileList += ('"' + str2Add + '" '); continue; } diff --git a/extension/src/providers/gotoProvider.ts b/extension/src/providers/gotoProvider.ts index c6e0ef66..c20ad158 100644 --- a/extension/src/providers/gotoProvider.ts +++ b/extension/src/providers/gotoProvider.ts @@ -8,152 +8,154 @@ import { ISymbolHost, ISymbolReference, IRootSymbolHost, SymbolManager } from '. import { SharedAtomic } from './providerShared'; import { ILispFragment } from '../astObjects/ILispFragment'; - -export function AutoLispExtProvideDefinition(document: vscode.TextDocument|ReadonlyDocument, position: vscode.Position) : vscode.Location[] { - const roDoc = document instanceof ReadonlyDocument ? document : AutoLispExt.Documents.getDocument(document); - let selectedAtom = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); - if (!selectedAtom || SymbolServices.isNative(selectedAtom.symbol.toLowerCase())){ - return null; - } - const result = GotoProviderSupport.getDefinitionLocations(roDoc, selectedAtom); - if (result.length === 1 && result[0].range.contains(position)) { - return null; - } else { - return result; - } +interface IDocumentAtomContext { + atom: ILispFragment; + symbolKey: string; + symbolRefs: Array; + flatView: Array; + reference: ISymbolReference; + symbolMap: IRootSymbolHost; + parent: ISymbolHost; + isFuncLike: boolean; } +function getDefinitionLocations(roDoc: ReadonlyDocument, atom: ILispFragment): Array { + const context = getAtomDocumentContext(roDoc, atom); + if (!context.parent.equal(context.symbolMap)) { + // A localized symbol cannot have external scope, go directly to 1st parent (localization) reference + return [convertReferenceToLocation(context.parent.collectAllSymbols().get(context.symbolKey)[0])]; + } -// Namespace is intentionally not exported. Nothing in here is expected to be used beyond this file. -namespace GotoProviderSupport { - - interface IDocumentAtomContext { - atom: ILispFragment; - symbolKey: string; - symbolRefs: Array; - flatView: Array; - reference: ISymbolReference; - symbolMap: IRootSymbolHost; - parent: ISymbolHost; - isFuncLike: boolean; + const scope = getAllMatchingVerifiedGlobalReferences(context.symbolKey); + if (scope.length > 0) { + // return globalized reference, we don't care if its in an opened, project or workspace context + // not obvious, but this path doesn't care if its a variable or function; exported ids just win... + return scope.map(iRef => convertReferenceToLocation(iRef)); } - export function getDefinitionLocations (roDoc: ReadonlyDocument, atom: ILispFragment) : Array { - const context = getAtomDocumentContext(roDoc, atom); + return context.isFuncLike ? processAsFunctionReference(context) : processAsVariableReference(context); +} - if (!context.parent.equal(context.symbolMap)) { - // A localized symbol cannot have external scope, go directly to 1st parent (localization) reference - return [convertReferenceToLocation(context.parent.collectAllSymbols().get(context.symbolKey)[0])]; +function processAsFunctionReference(context: IDocumentAtomContext): Array { + // this previously prioritized different categories, but now just finds everything in the opened, project & workspace + // also note that there is no special handling for already being on a function DEFUN, it always finds all variants + const results: Array = []; + DocumentServices.findAllDocumentsWithCustomSymbolKey(context.symbolKey).forEach(roDoc => { + // hunting for non-globalized defuns, go ahead and build their IdocumentAtomContext + // IF you can't get the IsDefun from the document container symbol information.... <- Investigate + const flatView = roDoc.documentContainer.flatten(); + const possible = roDoc.documentContainer.userSymbols.get(context.symbolKey); + let subContext: IDocumentAtomContext = null; + for (let i = 0; i < possible.length; i++) { + const possibleIndex = possible[i]; + if (!FlatContainerServices.getParentAtomIfDefun(flatView, possibleIndex)) { + continue; + } + if (!subContext) { + // this has some performance impacts so we only want to pull it once per document + subContext = getAtomDocumentContext(roDoc, flatView[possibleIndex], flatView); + } + const iRef = subContext.symbolRefs.find(x => x.flatIndex === possibleIndex); + if (iRef.isDefinition && iRef.findLocalizingParent().equal(subContext.symbolMap)) { + // IReference is a named Defun[-q] and does not have a localization parent + results.push(convertReferenceToLocation(iRef)); + } } - - const scope = getAllMatchingVerifiedGlobalReferences(context.symbolKey); - if (scope.length > 0) { - // return globalized reference, we don't care if its in an opened, project or workspace context - // not obvious, but this path doesn't care if its a variable or function; exported ids just win... - return scope.map(iRef => convertReferenceToLocation(iRef)); + }); + return results; +} + +function processAsVariableReference(context: IDocumentAtomContext): Array { + // localized and exported globals scenarios were already handled + // This just deals the active document globals by walking up setq locations + const existing = context.symbolMap.collectAllSymbols().get(context.symbolKey); + const activeIndex = existing.indexOf(context.reference); + for (let i = activeIndex - 1; i >= 0; i--) { + const iRef = existing[i]; + if (FlatContainerServices.getParentAtomIfValidSetq(context.flatView, context.flatView[iRef.flatIndex])) { + return [convertReferenceToLocation(iRef)]; } - - return context.isFuncLike ? processAsFunctionReference(context) : processAsVariableReference(context); } + // if no better occurrence found, then just regurgitate the starting location + return [convertReferenceToLocation(context.reference)]; +} - export function processAsFunctionReference(context: IDocumentAtomContext) : Array { - // this previously prioritized different categories, but now just finds everything in the opened, project & workspace - // also note that there is no special handling for already being on a function DEFUN, it always finds all variants - const results: Array = []; - DocumentServices.findAllDocumentsWithCustomSymbolKey(context.symbolKey).forEach(roDoc => { - // hunting for non-globalized defuns, go ahead and build their IdocumentAtomContext - // IF you can't get the IsDefun from the document container symbol information.... <- Investigate - const flatView = roDoc.documentContainer.flatten(); - const possible = roDoc.documentContainer.userSymbols.get(context.symbolKey); - let subContext: IDocumentAtomContext = null; - for (let i = 0; i < possible.length; i++) { - const possibleIndex = possible[i]; - if (!FlatContainerServices.getParentAtomIfDefun(flatView, possibleIndex)) { - continue; - } - if (!subContext) { - // this has some performance impacts so we only want to pull it once per document - subContext = getAtomDocumentContext(roDoc, flatView[possibleIndex], flatView); - } - const iRef = subContext.symbolRefs.find(x => x.flatIndex === possibleIndex); - if (iRef.isDefinition && iRef.findLocalizingParent().equal(subContext.symbolMap)) { - // IReference is a named Defun[-q] and does not have a localization parent - results.push(convertReferenceToLocation(iRef)); - } - } - }); - return results; - } - export function processAsVariableReference(context: IDocumentAtomContext) : Array { - // localized and exported globals scenarios were already handled - // This just deals the active document globals by walking up setq locations - const existing = context.symbolMap.collectAllSymbols().get(context.symbolKey); - const activeIndex = existing.indexOf(context.reference); - for (let i = activeIndex - 1; i >= 0; i--) { - const iRef = existing[i]; - if (FlatContainerServices.getParentAtomIfValidSetq(context.flatView, context.flatView[iRef.flatIndex])) { - return [convertReferenceToLocation(iRef)]; - } - } - // if no better occurrence found, then just regurgitate the starting location - return [convertReferenceToLocation(context.reference)]; - } +function convertReferenceToLocation(iRef: ISymbolReference): vscode.Location { + const filePointer = vscode.Uri.file(iRef.filePath); + return new vscode.Location(filePointer, iRef.range); +} - export function convertReferenceToLocation(iRef: ISymbolReference) : vscode.Location { - const filePointer = vscode.Uri.file(iRef.filePath); - return new vscode.Location(filePointer, iRef.range); +function getAtomDocumentContext(roDoc: ReadonlyDocument, selected: ILispFragment, linearView?: Array): IDocumentAtomContext { + const key = selected.symbol.toLowerCase(); + const map = SymbolManager.getSymbolMap(roDoc); + const pointers = map.collectAllSymbols().get(key); + const reference = pointers.find(item => item.flatIndex === selected.flatIndex); + if (!linearView) { + linearView = roDoc.documentContainer.flatten(); } + return { + atom: selected, + flatView: linearView, + parent: reference.findLocalizingParent(), + symbolKey: key, + symbolMap: map, + symbolRefs: pointers, + reference: reference, + isFuncLike: FlatContainerServices.isPossibleFunctionReference(linearView, selected) + }; +} - - export function getAtomDocumentContext(roDoc: ReadonlyDocument, selected: ILispFragment, linearView?: Array) : IDocumentAtomContext { - const key = selected.symbol.toLowerCase(); - const map = SymbolManager.getSymbolMap(roDoc); - const pointers = map.collectAllSymbols().get(key); - const reference = pointers.find(item => item.flatIndex === selected.flatIndex); - if (!linearView) { - linearView = roDoc.documentContainer.flatten(); +function getAllMatchingVerifiedGlobalReferences(lowerKey: string): Array { + const documentReferences = DocumentServices.findAllDocumentsWithCustomSymbolKey(lowerKey); + const result: Array = []; + for (let i = 0; i < documentReferences.length; i++) { + const roDoc = documentReferences[i]; + const flatView = roDoc.documentContainer.flatten(); + const possible = DocumentServices.getUnverifiedGlobalizerList(roDoc, lowerKey, flatView); + if (possible.length === 0) { + continue; } - return { - atom: selected, - flatView: linearView, - parent: reference.findLocalizingParent(), - symbolKey: key, - symbolMap: map, - symbolRefs: pointers, - reference: reference, - isFuncLike: FlatContainerServices.isPossibleFunctionReference(linearView, selected) - }; - } - export function getAllMatchingVerifiedGlobalReferences(lowerKey: string): Array { - const documentReferences = DocumentServices.findAllDocumentsWithCustomSymbolKey(lowerKey); - const result: Array = []; - for (let i = 0; i < documentReferences.length; i++) { - const roDoc = documentReferences[i]; - const flatView = roDoc.documentContainer.flatten(); - const possible = DocumentServices.getUnverifiedGlobalizerList(roDoc, lowerKey, flatView); - if (possible.length === 0) { - continue; + const symbolMap = SymbolManager.getSymbolMap(roDoc); + const targets = symbolMap.collectAllSymbols().get(lowerKey); + possible.forEach(atom => { + const iRef = targets.find(x => x.flatIndex === atom.flatIndex); + if (iRef?.findLocalizingParent().equal(symbolMap)) { + result.push(iRef); } - - const symbolMap = SymbolManager.getSymbolMap(roDoc); - const targets = symbolMap.collectAllSymbols().get(lowerKey); - possible.forEach(atom => { - const iRef = targets.find(x => x.flatIndex === atom.flatIndex); - if (iRef?.findLocalizingParent().equal(symbolMap)) { - result.push(iRef); - } - }); - } - return result; + }); } + return result; +} +const GotoProviderSupport = { + getDefinitionLocations, + processAsFunctionReference, + processAsVariableReference, + convertReferenceToLocation, + getAtomDocumentContext, + getAllMatchingVerifiedGlobalReferences } +export function AutoLispExtProvideDefinition(document: vscode.TextDocument | ReadonlyDocument, position: vscode.Position): vscode.Location[] { + const roDoc = document instanceof ReadonlyDocument ? document : AutoLispExt.Documents.getDocument(document); + const selectedAtom = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); + if (!selectedAtom || SymbolServices.isNative(selectedAtom.symbol.toLowerCase())) { + return null; + } + const result = GotoProviderSupport.getDefinitionLocations(roDoc, selectedAtom); + if (result.length === 1 && result[0].range.contains(position)) { + return null; + } else { + return result; + } +} + + /** * This exports the GotoProviderSupport Namespace specifically for testing, these resources are not meant for interoperability. */ -export const TDD = GotoProviderSupport; \ No newline at end of file +export const TDD = GotoProviderSupport \ No newline at end of file diff --git a/extension/src/providers/hoverProvider.ts b/extension/src/providers/hoverProvider.ts index 270c57eb..7a73dad2 100644 --- a/extension/src/providers/hoverProvider.ts +++ b/extension/src/providers/hoverProvider.ts @@ -2,178 +2,176 @@ import * as vscode from "vscode"; import { IDclContainer, IDclFragment } from '../astObjects/dclInterfaces'; import { AutoLispExt } from '../context'; import { ReadonlyDocument } from '../project/readOnlyDocument'; -import {DocumentServices} from "../services/documentServices"; -import {ISymbolReference, SymbolManager} from "../symbols"; -import {LispAtom} from "../astObjects/lispAtom"; +import { DocumentServices } from "../services/documentServices"; +import { ISymbolReference, SymbolManager } from "../symbols"; +import { LispAtom } from "../astObjects/lispAtom"; import * as nls from "vscode-nls"; -import {AnnoIcon, Annotation} from "../help/documentationPresenter"; -import {parseDocumentation} from "../parsing/comments"; +import { AnnoIcon, Annotation } from "../help/documentationPresenter"; +import { parseDocumentation } from "../parsing/comments"; const localize = nls.loadMessageBundle(); const ambiguityError = localize("autolispext.hoverProvider.ambiguous", "Multiple definitions containing the @Global flag"); -export function AutoLispExtProvideHover(doc: ReadonlyDocument, position: vscode.Position) : vscode.ProviderResult -{ - if (doc.documentDclContainer) { - return handlersDCL.getHoverResults(doc, position); - } - - if (doc.documentContainer) { - return handlersLSP.getHoverResults(doc, position); - } - - return null; -} +export function AutoLispExtProvideHover(doc: ReadonlyDocument, position: vscode.Position): vscode.ProviderResult { + if (doc.documentDclContainer) { + return handlersDCL.getHoverResults(doc, position); + } + if (doc.documentContainer) { + return handlersLSP.getHoverResults(doc, position); + } -namespace handlersDCL { - export function getHoverResults(roDoc: ReadonlyDocument, position: vscode.Position): vscode.Hover { - const parent = roDoc.documentDclContainer.getParentFrom(position); - if (!parent) { - return null; - } - const atom = parent.getAtomFromPosition(position); - return parent.asTile ? processTileAtom(parent, atom) : processAttributeAtom(parent, atom); - } - - - function processAttributeAtom(parent: IDclContainer, atom: IDclFragment): vscode.Hover { - const def = AutoLispExt.WebHelpLibrary.dclAttributes.get(atom.symbol.toLowerCase()); - if (!def || parent.firstAtom.flatIndex !== atom.flatIndex) { - return null; - } - return new vscode.Hover(Annotation.asMarkdown(def)); - } - - function processTileAtom(parent: IDclContainer, atom: IDclFragment): vscode.Hover { - const def = AutoLispExt.WebHelpLibrary.dclTiles.get(atom.symbol.toLowerCase()); - if (def) { - return new vscode.Hover(Annotation.asMarkdown(def)); - } - return null; - } + return null; } -namespace handlersLSP { - export function getHoverResults(roDoc: ReadonlyDocument, position: vscode.Position): vscode.Hover { - const atom = roDoc.documentContainer.getAtomFromPos(position); - if (!atom || atom.isPrimitive()) { - return null; - } +const handlersDCL = { + getHoverResults(roDoc: ReadonlyDocument, position: vscode.Position): vscode.Hover { + const parent = roDoc.documentDclContainer.getParentFrom(position); + if (!parent) { + return null; + } + const atom = parent.getAtomFromPosition(position); + return parent.asTile ? this.processTileAtom(parent, atom) : this.processAttributeAtom(parent, atom); + }, + + processAttributeAtom(parent: IDclContainer, atom: IDclFragment): vscode.Hover { + const def = AutoLispExt.WebHelpLibrary.dclAttributes.get(atom.symbol.toLowerCase()); + if (!def || parent.firstAtom.flatIndex !== atom.flatIndex) { + return null; + } + return new vscode.Hover(Annotation.asMarkdown(def)); + }, + + processTileAtom(parent: IDclContainer, atom: IDclFragment): vscode.Hover { + const def = AutoLispExt.WebHelpLibrary.dclTiles.get(atom.symbol.toLowerCase()); + if (def) { + return new vscode.Hover(Annotation.asMarkdown(def)); + } + return null; + } +} + - const key = atom.symbol.toLowerCase(); - const markdown = getNativeResource(key) ?? getUserResources(key, roDoc, position); - if (markdown === null) { - return null; - } - - return new vscode.Hover(markdown, atom.getRange()); - } - - - function getNativeResource(lowerKey: string) : vscode.MarkdownString|Array { - const webHelp = AutoLispExt.WebHelpLibrary; - - if (webHelp.ambiguousFunctions.has(lowerKey)) { - return webHelp.ambiguousFunctions.get(lowerKey).map(x => Annotation.asMarkdown(x)); - } - - if (webHelp.functions.has(lowerKey)) { - return Annotation.asMarkdown(webHelp.functions.get(lowerKey)); - } - - if (webHelp.enumerators.has(lowerKey)) { - return Annotation.asMarkdown(webHelp.enumerators.get(lowerKey)); - } - - return null; - } - - - - function getUserResources(lowerKey: string, doc: ReadonlyDocument, pos: vscode.Position) : vscode.MarkdownString { - return tryLocalUserResource(lowerKey, doc, pos) ?? tryGlobalUserResources(lowerKey, doc); - } - - - function tryLocalUserResource(lowerKey: string, roDoc: ReadonlyDocument, pos: vscode.Position) : vscode.MarkdownString { - if (!roDoc.documentContainer.userSymbols.has(lowerKey)) { - return null; - } - - const map = SymbolManager.getSymbolMap(roDoc); - const pointers = map.collectAllSymbols().get(lowerKey); - const defs = pointers.filter(x => x.isDefinition); - if (defs.length === 0) { - return null; - } - - if (defs.length === 1) { - return getUserResourceMarkdown(defs[0], roDoc.documentContainer.flatten(), roDoc); - } - - // fallback, provide last defined; this assumes it will override prior definitions - return getUserResourceMarkdown(defs[defs.length - 1], roDoc.documentContainer.flatten(), roDoc); - } - - - function tryGlobalUserResources(lowerKey: string, skipSource: ReadonlyDocument) : vscode.MarkdownString { - let possible = DocumentServices.findAllDocumentsWithCustomSymbolKey(lowerKey); - for (let i = 0; i < possible.length; i++) { - const doc = possible[i]; - if (doc === skipSource) { - continue; - } - - const result = findGlobalUserResource(lowerKey, doc); - if (result) { - // If there are 5 documents and 2, 4 & 5 all have @Global labels, then only 2 will be returned - // In most languages this wouldn't make sense, but lisp cannot have overloads and we have no - // way of knowing which of the 3 will be loaded at the time. - return result; - } - } - return null; - } - - - function findGlobalUserResource(lowerKey: string, roDoc: ReadonlyDocument) : vscode.MarkdownString { - const map = SymbolManager.getSymbolMap(roDoc); - const pointers = map.collectAllSymbols().get(lowerKey); - const flatView = roDoc.documentContainer.flatten(); - const defs = pointers.filter(x => x.isDefinition && flatView[x.flatIndex].hasGlobalFlag); - if (defs.length === 0) { - return null; - } - - if (defs.length === 1) { - return getUserResourceMarkdown(defs[0], flatView, roDoc); - } - - const errorResult = new vscode.MarkdownString(`${AnnoIcon.ERROR} ${ambiguityError}`); - errorResult.supportThemeIcons = true; - return errorResult; - } - - - const breakables = ['nil', 't', '/', ')']; - function getUserResourceMarkdown(source: ISymbolReference, flatView: LispAtom[], roDoc: ReadonlyDocument) : vscode.MarkdownString { - const atom = flatView[source.flatIndex]; - const userData = atom.commentLinks ? parseDocumentation(flatView[atom.commentLinks[atom.commentLinks.length - 1]]) : null; - const args: Array = []; - for (let i = source.flatIndex + 1; i < flatView.length; i++) { - const current = flatView[i]; - if (breakables.includes(current.symbol.toLowerCase())) { - break; - } else if (current.symbol === '(') { - continue; - } - - args.push(current); - } - return Annotation.asMarkdown(atom, null, args, userData, roDoc.fileName); - } +const handlersLSP = { + getHoverResults(roDoc: ReadonlyDocument, position: vscode.Position): vscode.Hover { + const atom = roDoc.documentContainer.getAtomFromPos(position); + if (!atom || atom.isPrimitive()) { + return null; + } + + const key = atom.symbol.toLowerCase(); + const markdown = this.getNativeResource(key) ?? this.getUserResources(key, roDoc, position); + if (markdown === null) { + return null; + } + + return new vscode.Hover(markdown, atom.getRange()); + }, + + + getNativeResource(lowerKey: string): vscode.MarkdownString | Array { + const webHelp = AutoLispExt.WebHelpLibrary; + + if (webHelp.ambiguousFunctions.has(lowerKey)) { + return webHelp.ambiguousFunctions.get(lowerKey).map(x => Annotation.asMarkdown(x)); + } + + if (webHelp.functions.has(lowerKey)) { + return Annotation.asMarkdown(webHelp.functions.get(lowerKey)); + } + + if (webHelp.enumerators.has(lowerKey)) { + return Annotation.asMarkdown(webHelp.enumerators.get(lowerKey)); + } + + return null; + }, + + + + getUserResources(lowerKey: string, doc: ReadonlyDocument, pos: vscode.Position): vscode.MarkdownString { + return this.tryLocalUserResource(lowerKey, doc, pos) ?? this.tryGlobalUserResources(lowerKey, doc); + }, + + //eslint-disable-next-line + tryLocalUserResource(lowerKey: string, roDoc: ReadonlyDocument, pos: vscode.Position): vscode.MarkdownString { + if (!roDoc.documentContainer.userSymbols.has(lowerKey)) { + return null; + } + + const map = SymbolManager.getSymbolMap(roDoc); + const pointers = map.collectAllSymbols().get(lowerKey); + const defs = pointers.filter(x => x.isDefinition); + if (defs.length === 0) { + return null; + } + + if (defs.length === 1) { + return this.getUserResourceMarkdown(defs[0], roDoc.documentContainer.flatten(), roDoc); + } + + // fallback, provide last defined; this assumes it will override prior definitions + return this.getUserResourceMarkdown(defs[defs.length - 1], roDoc.documentContainer.flatten(), roDoc); + }, + + + tryGlobalUserResources(lowerKey: string, skipSource: ReadonlyDocument): vscode.MarkdownString { + const possible = DocumentServices.findAllDocumentsWithCustomSymbolKey(lowerKey); + for (let i = 0; i < possible.length; i++) { + const doc = possible[i]; + if (doc === skipSource) { + continue; + } + + const result = this.findGlobalUserResource(lowerKey, doc); + if (result) { + // If there are 5 documents and 2, 4 & 5 all have @Global labels, then only 2 will be returned + // In most languages this wouldn't make sense, but lisp cannot have overloads and we have no + // way of knowing which of the 3 will be loaded at the time. + return result; + } + } + return null; + }, + + + findGlobalUserResource(lowerKey: string, roDoc: ReadonlyDocument): vscode.MarkdownString { + const map = SymbolManager.getSymbolMap(roDoc); + const pointers = map.collectAllSymbols().get(lowerKey); + const flatView = roDoc.documentContainer.flatten(); + const defs = pointers.filter(x => x.isDefinition && flatView[x.flatIndex].hasGlobalFlag); + if (defs.length === 0) { + return null; + } + + if (defs.length === 1) { + return this.getUserResourceMarkdown(defs[0], flatView, roDoc); + } + + const errorResult = new vscode.MarkdownString(`${AnnoIcon.ERROR} ${ambiguityError}`); + errorResult.supportThemeIcons = true; + return errorResult; + }, + + + breakables: ['nil', 't', '/', ')'], + getUserResourceMarkdown(source: ISymbolReference, flatView: LispAtom[], roDoc: ReadonlyDocument): vscode.MarkdownString { + const atom = flatView[source.flatIndex]; + const userData = atom.commentLinks ? parseDocumentation(flatView[atom.commentLinks[atom.commentLinks.length - 1]]) : null; + const args: Array = []; + for (let i = source.flatIndex + 1; i < flatView.length; i++) { + const current = flatView[i]; + if (this.breakables.includes(current.symbol.toLowerCase())) { + break; + } else if (current.symbol === '(') { + continue; + } + + args.push(current); + } + return Annotation.asMarkdown(atom, null, args, userData, roDoc.fileName); + } } diff --git a/extension/src/providers/providerShared.ts b/extension/src/providers/providerShared.ts index 371e9bbb..c03ada81 100644 --- a/extension/src/providers/providerShared.ts +++ b/extension/src/providers/providerShared.ts @@ -1,23 +1,22 @@ import { ReadonlyDocument } from '../project/readOnlyDocument'; -import * as vscode from 'vscode'; +import * as vscode from 'vscode'; import { ILispFragment } from '../astObjects/ILispFragment'; -export namespace SearchPatterns { - export const LOCALIZES = /^DEFUN$|^DEFUN-Q$|^LAMBDA$/i; - export const ITERATES = /^FOREACH$|^VLAX-FOR$/i; - export const ASSIGNS = /^SETQ$/i; - export const DEFINES = /^DEFUN$|^DEFUN-Q$/i; - export const ALL = /^DEFUN$|^DEFUN-Q$|^LAMBDA$|^FOREACH$|^VLAX-FOR$|^SETQ$/i; +export const SearchPatterns = { + LOCALIZES: /^DEFUN$|^DEFUN-Q$|^LAMBDA$/i, + ITERATES: /^FOREACH$|^VLAX-FOR$/i, + ASSIGNS: /^SETQ$/i, + DEFINES: /^DEFUN$|^DEFUN-Q$/i, + ALL: /^DEFUN$|^DEFUN-Q$|^LAMBDA$|^FOREACH$|^VLAX-FOR$|^SETQ$/i, } -export namespace SharedAtomic { - export function getNonPrimitiveAtomFromPosition(roDoc: ReadonlyDocument, pos: vscode.Position): ILispFragment { +export const SharedAtomic = { + getNonPrimitiveAtomFromPosition(roDoc: ReadonlyDocument, pos: vscode.Position): ILispFragment { const atom = roDoc.documentContainer?.getAtomFromPos(pos); if (!atom || atom.isPrimitive()) { return null; } return atom; } - } \ No newline at end of file diff --git a/extension/src/providers/renameProvider.ts b/extension/src/providers/renameProvider.ts index db169678..5445323f 100644 --- a/extension/src/providers/renameProvider.ts +++ b/extension/src/providers/renameProvider.ts @@ -12,7 +12,7 @@ import { primitiveRegex } from '../astObjects/lispAtom'; export function AutoLispExtPrepareRename(document: vscode.TextDocument, position: vscode.Position): { range: vscode.Range; placeholder: string; } { const roDoc = AutoLispExt.Documents.getDocument(document); - let selectedAtom: ILispFragment = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); + const selectedAtom: ILispFragment = SharedAtomic.getNonPrimitiveAtomFromPosition(roDoc, position); if (!selectedAtom) { return null; } @@ -32,10 +32,15 @@ export function AutoLispExtProvideRenameEdits(document: vscode.TextDocument, pos return edits; } +export interface ISourceRange { + range: vscode.Range, + source: string, +} + -namespace RenameProviderSupport { +export const RenameProviderSupport = { - export function provideRenameEditsWorker(roDoc: ReadonlyDocument, selectedAtom: ILispFragment, newName: string): vscode.WorkspaceEdit | null { + provideRenameEditsWorker(roDoc: ReadonlyDocument, selectedAtom: ILispFragment, newName: string): vscode.WorkspaceEdit | null { const docSymbols = SymbolManager.getSymbolMap(roDoc); const selectedIndex = selectedAtom.flatIndex; const selectedKey = selectedAtom.symbol.toLowerCase(); @@ -46,45 +51,45 @@ namespace RenameProviderSupport { return editContext; } - const init = getTargetSymbolReference(docSymbols, selectedKey, selectedIndex); + const init = this.getTargetSymbolReference(docSymbols, selectedKey, selectedIndex); const parent = init?.findLocalizingParent(); const possible = DocumentServices.findAllDocumentsWithCustomSymbolKey(selectedKey); - if (!parent.equal(docSymbols) || !hasGlobalizer(possible, selectedKey)) { + if (!parent.equal(docSymbols) || !this.hasGlobalizer(possible, selectedKey)) { // has non-root localization and can ONLY effect the active document - populateEdits(editContext, newName, getRenameTargetsFromParentScope(roDoc, parent, selectedKey)); + this.populateEdits(editContext, newName, this.getRenameTargetsFromParentScope(roDoc, parent, selectedKey)); } else { // find each entry within possible that is not localized - populateEditsFromDocumentList(editContext, newName, selectedKey, possible); + this.populateEditsFromDocumentList(editContext, newName, selectedKey, possible); } return editContext; - } + }, - export function normalizeUserProvidedValue(newValue: string, oldValue: string): string | null { + normalizeUserProvidedValue(newValue: string, oldValue: string): string | null { newValue = newValue.trim(); - if (newValue.length === 0 || newValue === oldValue || !isValidInput(newValue)) { + if (newValue.length === 0 || newValue === oldValue || !this.isValidInput(newValue)) { return null; } return newValue; - } + }, - export function getTargetSymbolReference(symbolMap: IRootSymbolHost, key: string, index: number): ISymbolReference | null { + getTargetSymbolReference(symbolMap: IRootSymbolHost, key: string, index: number): ISymbolReference | null { const symbolArray = symbolMap.collectAllSymbols().get(key); if (!symbolArray && !Array.isArray(symbolArray)) { return null; } const init = symbolArray.find(p => p.asReference?.flatIndex === index); return init; - } + }, - export function populateEditsFromDocumentList(editContext: vscode.WorkspaceEdit, newValue: string, key: string, docs: Array): void { + populateEditsFromDocumentList(editContext: vscode.WorkspaceEdit, newValue: string, key: string, docs: Array): void { docs.forEach(extDoc => { const externalSymbols = SymbolManager.getSymbolMap(extDoc); - const externalItems = getRenameTargetsFromParentScope(extDoc, externalSymbols, key); - populateEdits(editContext, newValue, externalItems); + const externalItems = this.getRenameTargetsFromParentScope(extDoc, externalSymbols, key); + this.populateEdits(editContext, newValue, externalItems); }); - } + }, - export function hasGlobalizer(docs: Array, key: string): boolean { + hasGlobalizer(docs: Array, key: string): boolean { for (let i = 0; i < docs.length; i++) { const roDoc = docs[i]; if (DocumentServices.hasGlobalizedTargetKey(roDoc, key)) { @@ -92,14 +97,9 @@ namespace RenameProviderSupport { } } return false; - } - - interface ISourceRange { - range: vscode.Range; - source: string; - } + }, - export function getRenameTargetsFromParentScope(roDoc: ReadonlyDocument, targetScope: ISymbolHost, lowerKey: string): Array { + getRenameTargetsFromParentScope(roDoc: ReadonlyDocument, targetScope: ISymbolHost, lowerKey: string): Array { const flatView = roDoc.documentContainer?.flatten(); // This handles renaming @Param declarations of Defun documentation @@ -120,16 +120,16 @@ namespace RenameProviderSupport { return { range: item.range, source: item.filePath }; }) ?? []; return standardTargets.concat(commentTargets); - } + }, - export function isValidInput(userValue: string): boolean { + isValidInput(userValue: string): boolean { const val = userValue.trim(); return !primitiveRegex.test(val) && !val.includes(' '); - } + }, - export function populateEdits(editContext: vscode.WorkspaceEdit, newValue: string, items: Array): void { + populateEdits(editContext: vscode.WorkspaceEdit, newValue: string, items: Array): void { items.forEach(item => { editContext.replace(vscode.Uri.file(item.source), item.range, newValue); }); diff --git a/extension/src/resources.ts b/extension/src/resources.ts index fcc27355..7195d428 100644 --- a/extension/src/resources.ts +++ b/extension/src/resources.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; export let internalLispFuncs: Array = []; export let internalDclKeys: Array = []; export let winOnlyListFuncPrefix: Array = []; -export let allCmdsAndSysvars: Array = []; +export const allCmdsAndSysvars: Array = []; export let isLoaded = false; export function loadAllResources(){ @@ -17,7 +17,7 @@ export function loadAllResources(){ readDataFileByLine("../extension/data/alldclkeys.txt", (items) => { internalDclKeys = items; }); readDataFileByLine("../extension/data/winonlylispkeys_prefix.txt", (items) => { winOnlyListFuncPrefix = items; }); readDataFileByDelimiter("../extension/data/cmdAndVarsList.txt", ",", (item) => { - let isLispCmds = item.startsWith("C:") || item.startsWith("c:"); + const isLispCmds = item.startsWith("C:") || item.startsWith("c:"); if (!isLispCmds && allCmdsAndSysvars.indexOf(item) < 0){ allCmdsAndSysvars.push(item); } @@ -33,7 +33,7 @@ export interface IJsonLoadable { function readJsonDataFile(datafile: string, intoObject: IJsonLoadable): void { - var dataPath = path.resolve(__dirname, datafile); + const dataPath = path.resolve(__dirname, datafile); fs.readFile(dataPath, "utf8", function(err: Error, data: string) { if (err === null && intoObject["loadFromJsonObject"]) { intoObject.loadFromJsonObject(JSON.parse(data)); @@ -43,9 +43,9 @@ function readJsonDataFile(datafile: string, intoObject: IJsonLoadable): void { function readDataFileByLine(datafile: string,action: (items: string[]) => void) { - var dataPath = path.resolve(__dirname, datafile); + const dataPath = path.resolve(__dirname, datafile); try { - var data = fs.readFileSync(dataPath,{encoding:'utf8', flag:'r'}); + const data = fs.readFileSync(dataPath,{encoding:'utf8', flag:'r'}); if (data.includes("\r\n")) { action(data.split("\r\n")); } @@ -59,10 +59,10 @@ function readDataFileByLine(datafile: string,action: (items: string[]) => void) function readDataFileByDelimiter(datafile: string, delimiter: string, action: (item: string) => void) { - var dataPath = path.resolve(__dirname, datafile); + const dataPath = path.resolve(__dirname, datafile); try { - var data = fs.readFileSync(dataPath,{encoding:'utf8', flag:'r'}); - var lineList: Array; + const data = fs.readFileSync(dataPath,{encoding:'utf8', flag:'r'}); + let lineList: Array; if (data.includes("\r\n")) { lineList = data.split("\r\n"); } @@ -71,8 +71,8 @@ function readDataFileByDelimiter(datafile: string, delimiter: string, action: (i } lineList.forEach(line => { - var items = line.split(delimiter); - var item = items[0]; + const items = line.split(delimiter); + let item = items[0]; item = item.trim(); if (item.length > 0){ action(item); @@ -86,12 +86,12 @@ function readDataFileByDelimiter(datafile: string, delimiter: string, action: (i export function getExtensionSettingString(settingName: string): string { - let settingGroup = vscode.workspace.getConfiguration('autolispext'); + const settingGroup = vscode.workspace.getConfiguration('autolispext'); if (!settingGroup) { return null; } - let setting = settingGroup.get(settingName); + const setting = settingGroup.get(settingName); if (!setting) { return null; } @@ -101,12 +101,12 @@ export function getExtensionSettingString(settingName: string): string { export function getExtensionSettingBoolean(settingName: string): boolean { - let settingGroup = vscode.workspace.getConfiguration('autolispext'); + const settingGroup = vscode.workspace.getConfiguration('autolispext'); if (!settingGroup) { return null; } - let setting = settingGroup.get(settingName); + const setting = settingGroup.get(settingName); if (!setting) { return null; } diff --git a/extension/src/services/documentServices.ts b/extension/src/services/documentServices.ts index f282d955..fb2481a5 100644 --- a/extension/src/services/documentServices.ts +++ b/extension/src/services/documentServices.ts @@ -3,118 +3,114 @@ import { ReadonlyDocument } from '../project/readOnlyDocument'; import { SymbolManager } from '../symbols'; import { ILispFragment } from '../astObjects/ILispFragment'; +export enum Selectors { + LSP = "autolisp", + DCL = "autolispdcl", + PRJ = "autolispprj" +} -export namespace DocumentServices { - export enum Selectors { - LSP = "autolisp", - DCL = "autolispdcl", - PRJ = "autolispprj" - } - - export function getSelectorType(fspath: string): string { - if (fspath) { - const ext: string = fspath.toUpperCase().slice(-4); - switch (ext) { - case ".LSP": return Selectors.LSP; - case ".MNL": return Selectors.LSP; - case ".PRJ": return Selectors.PRJ; - case ".DCL": return Selectors.DCL; - default: return ""; - } - } else { - return ""; +export function getSelectorType(fspath: string): string { + if (fspath) { + const ext: string = fspath.toUpperCase().slice(-4); + switch (ext) { + case ".LSP": return Selectors.LSP; + case ".MNL": return Selectors.LSP; + case ".PRJ": return Selectors.PRJ; + case ".DCL": return Selectors.DCL; + default: return ""; } + } else { + return ""; } +} - export function normalizeFilePath(path: string): string { - return path.replace(/\\/g, '/'); - } - - - - - export function findAllDocumentsWithCustomSymbolKey(lowerKey: string): Array { - // this array is used to track what has already qualified for the result. This duplication - // can happen because a document could contextually be "open", in a "PRJ" and in the "workspace" - const collected = []; - // this should be very fast since LispContainer constructors now aggrigates foreign symbols - const docs = AutoLispExt.Documents; - return docs.OpenedDocuments.filter(roDoc => { - return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); - }).concat(AutoLispExt.Documents.ProjectDocuments.filter(roDoc => { - return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); - })).concat(AutoLispExt.Documents.WorkspaceDocuments.filter(roDoc => { - return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); - })); - } - - function testDocumentKeysAndCollectIfUnused(roDoc: ReadonlyDocument, lowerKey: string, collected: Array): boolean { - if (roDoc.documentContainer?.body?.userSymbols?.has(lowerKey)) { - const docKey = normalizeFilePath(roDoc.fileName); - if (!collected.includes(docKey)) { - collected.push(docKey); - return true; - } - } - return false; - } - +export function normalizeFilePath(path: string): string { + return path.replace(/\\/g, '/'); +} - +export function findAllDocumentsWithCustomSymbolKey(lowerKey: string): Array { + // this array is used to track what has already qualified for the result. This duplication + // can happen because a document could contextually be "open", in a "PRJ" and in the "workspace" + const collected = []; + // this should be very fast since LispContainer constructors now aggrigates foreign symbols + const docs = AutoLispExt.Documents; + return docs.OpenedDocuments.filter(roDoc => { + return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); + }).concat(AutoLispExt.Documents.ProjectDocuments.filter(roDoc => { + return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); + })).concat(AutoLispExt.Documents.WorkspaceDocuments.filter(roDoc => { + return testDocumentKeysAndCollectIfUnused(roDoc, lowerKey, collected); + })); +} - export function hasUnverifiedGlobalizers(roDoc: ReadonlyDocument, flatView?: Array): boolean { - if (!roDoc.isLSP) { - return false; +function testDocumentKeysAndCollectIfUnused(roDoc: ReadonlyDocument, lowerKey: string, collected: Array): boolean { + if (roDoc.documentContainer?.body?.userSymbols?.has(lowerKey)) { + const docKey = normalizeFilePath(roDoc.fileName); + if (!collected.includes(docKey)) { + collected.push(docKey); + return true; } - flatView = flatView ?? roDoc.documentContainer.flatten(); - const basicSymbolMap = roDoc.documentContainer.userSymbols; - return hasUnverifiedGlobalizersWorker(flatView, basicSymbolMap); } + return false; +} - function hasUnverifiedGlobalizersWorker(flatView: Array, basicMap: Map>): boolean { - const keys = [...basicMap.keys()]; - for (let i = 0; i < keys.length; i++) { - const indices = basicMap.get(keys[i]); - for (let j = 0; j < indices.length; j++) { - const atom = flatView[indices[j]]; - if (atom.hasGlobalFlag) { - return true; - } - } - } +export function hasUnverifiedGlobalizers(roDoc: ReadonlyDocument, flatView?: Array): boolean { + if (!roDoc.isLSP) { return false; } + flatView = flatView ?? roDoc.documentContainer.flatten(); + const basicSymbolMap = roDoc.documentContainer.userSymbols; + return hasUnverifiedGlobalizersWorker(flatView, basicSymbolMap); +} - - - - export function hasGlobalizedTargetKey(roDoc: ReadonlyDocument, lowerKey: string, flatView?: Array): boolean { - const flagged = getUnverifiedGlobalizerList(roDoc, lowerKey, flatView); - if (!flagged || flagged.length === 0) { - // fails fast because at this point nothing overly expensive has happened - return false; - } - // building a SymbolMap is an expensive operation - const symbolMap = SymbolManager.getSymbolMap(roDoc, true); - const aggregate = symbolMap.collectAllSymbols(); - for (let i = 0; i < flagged.length; i++) { - const iRef = aggregate.get(lowerKey).find(p => p.flatIndex === flagged[i].flatIndex); - if (iRef?.findLocalizingParent().equal(symbolMap)) { +function hasUnverifiedGlobalizersWorker(flatView: Array, basicMap: Map>): boolean { + const keys = [...basicMap.keys()]; + for (let i = 0; i < keys.length; i++) { + const indices = basicMap.get(keys[i]); + for (let j = 0; j < indices.length; j++) { + const atom = flatView[indices[j]]; + if (atom.hasGlobalFlag) { return true; } } - return false; } + return false; +} - export function getUnverifiedGlobalizerList(roDoc: ReadonlyDocument, lowerKey: string, flatView?: Array): Array { - if (!flatView) { - flatView = roDoc.documentContainer?.flatten(); +export function hasGlobalizedTargetKey(roDoc: ReadonlyDocument, lowerKey: string, flatView?: Array): boolean { + const flagged = getUnverifiedGlobalizerList(roDoc, lowerKey, flatView); + if (!flagged || flagged.length === 0) { + // fails fast because at this point nothing overly expensive has happened + return false; + } + // building a SymbolMap is an expensive operation + const symbolMap = SymbolManager.getSymbolMap(roDoc, true); + const aggregate = symbolMap.collectAllSymbols(); + for (let i = 0; i < flagged.length; i++) { + const iRef = aggregate.get(lowerKey).find(p => p.flatIndex === flagged[i].flatIndex); + if (iRef?.findLocalizingParent().equal(symbolMap)) { + return true; } - const rawSymbolMap = roDoc.documentContainer.userSymbols?.get(lowerKey); - return rawSymbolMap?.filter(p => flatView[p].hasGlobalFlag)?.map(i => flatView[i]); } + return false; +} - +export function getUnverifiedGlobalizerList(roDoc: ReadonlyDocument, lowerKey: string, flatView?: Array): Array { + if (!flatView) { + flatView = roDoc.documentContainer?.flatten(); + } + const rawSymbolMap = roDoc.documentContainer.userSymbols?.get(lowerKey); + return rawSymbolMap?.filter(p => flatView[p].hasGlobalFlag)?.map(i => flatView[i]); } +export const DocumentServices = { + getSelectorType, + normalizeFilePath, + findAllDocumentsWithCustomSymbolKey, + testDocumentKeysAndCollectIfUnused, + hasUnverifiedGlobalizers, + hasUnverifiedGlobalizersWorker, + hasGlobalizedTargetKey, + getUnverifiedGlobalizerList +} \ No newline at end of file diff --git a/extension/src/services/flatContainerServices.ts b/extension/src/services/flatContainerServices.ts index af671cb9..edc46c0e 100644 --- a/extension/src/services/flatContainerServices.ts +++ b/extension/src/services/flatContainerServices.ts @@ -2,201 +2,203 @@ import { StringEqualsIgnoreCase } from '../utils'; import { ILispFragment } from '../astObjects/ILispFragment'; import { LispAtom } from '../astObjects/lispAtom'; +export function isPossibleFunctionReference(atoms: Array, from: ILispFragment): boolean { + const previous = lookBehindForPreviousNonCommentAtom(atoms, from); + if (!previous || from.isPrimitive()) { + return false; + } + if (previous.symbol === '(') { + // this final test avoid the dynamic list constructor false positive + return atoms[from.flatIndex - 1]?.symbol !== '\''; + } + return /^('|DEFUN|DEFUN-Q)$/i.test(previous.symbol); +} +export function getParentAtomIfValidSetq(atoms: Array, from: ILispFragment | number): ILispFragment { + const index = typeof from === 'number' ? from : from.flatIndex; + const parentAtom = getParentRootAtomIfOfType(atoms, index, 'setq'); + if (!parentAtom || !isValidSetqContext(atoms, index)) { + return null; + } + return parentAtom; +} -export namespace FlatContainerServices { +export function verifyAtomIsSetqAndGlobalized(atoms: Array, from: ILispFragment | number): boolean { + const [index, atom] = typeof from === 'number' ? [from, atoms[from]] : [from.flatIndex, from]; + const parentAtom = getParentAtomIfValidSetq(atoms, index); + return !parentAtom ? false : hasGlobalizationContext(atom, parentAtom, atoms); +} - export function isPossibleFunctionReference(atoms: Array, from: ILispFragment): boolean { - const previous = lookBehindForPreviousNonCommentAtom(atoms, from); - if (!previous || from.isPrimitive()) { - return false; - } - if (previous.symbol === '(') { - // this final test avoid the dynamic list constructor false positive - return atoms[from.flatIndex - 1]?.symbol !== '\''; - } - return /^(\'|DEFUN|DEFUN-Q)$/i.test(previous.symbol); +export function getParentAtomIfDefun(atoms: Array, from: ILispFragment | number): ILispFragment { + const index = typeof from === 'number' ? from : from.flatIndex; + const parentAtom = getParentRootAtomIfOfType(atoms, index, 'defun', 'defun-q'); + if (!parentAtom) { + return null; } + return parentAtom; +} - export function getParentAtomIfValidSetq(atoms: Array, from: ILispFragment|number): ILispFragment { - const index = typeof from === 'number' ? from : from.flatIndex; - const parentAtom = getParentRootAtomIfOfType(atoms, index, 'setq'); - if (!parentAtom || !isValidSetqContext(atoms, index)) { - return null; - } - return parentAtom; +export function verifyAtomIsDefunAndGlobalized(atoms: Array, from: ILispFragment): boolean { + const parentAtom = getParentAtomIfDefun(atoms, from); + if (!parentAtom) { + return false; } - export function verifyAtomIsSetqAndGlobalized(atoms: Array, from: ILispFragment|number): boolean { - const [index, atom] = typeof from === 'number' ? [from, atoms[from]] : [from.flatIndex, from]; - const parentAtom = getParentAtomIfValidSetq(atoms, index); - return !parentAtom ? false : hasGlobalizationContext(atom, parentAtom, atoms); + // This check was added because non-localized variables within defuns used as the + // return value was getting artificially flagged by the defun comments as @Global + const next = lookAheadForNextNonCommentAtom(atoms, parentAtom.flatIndex); + if (next.flatIndex !== from.flatIndex) { + return false; } - export function getParentAtomIfDefun(atoms: Array, from: ILispFragment|number): ILispFragment { - const index = typeof from === 'number' ? from : from.flatIndex; - const parentAtom = getParentRootAtomIfOfType(atoms, index, 'defun', 'defun-q'); - if (!parentAtom) { - return null; - } + return hasGlobalizationContext(from, parentAtom, atoms); +} + +function getParentRootAtomIfOfType(atoms: Array, fromIndex: number, ...rootTypes: Array): ILispFragment | null { + const parentAtom = lookBehindForParentRootAtom(atoms, fromIndex); + const name = parentAtom?.symbol ?? ''; + if (rootTypes.some(p => StringEqualsIgnoreCase(name, p))) { return parentAtom; } + return null; +} - export function verifyAtomIsDefunAndGlobalized(atoms: Array, from: ILispFragment): boolean { - const parentAtom = getParentAtomIfDefun(atoms, from); - if (!parentAtom) { - return false; - } - - // This check was added because non-localized variables within defuns used as the - // return value was getting artificially flagged by the defun comments as @Global - const next = lookAheadForNextNonCommentAtom(atoms, parentAtom.flatIndex); - if (next.flatIndex !== from.flatIndex) { - return false; - } - - return hasGlobalizationContext(from, parentAtom, atoms); +function lookBehindForParentRootAtom(atoms: Array, fromIndex: number): ILispFragment | null { + const initAtom = atoms[fromIndex]; + const parentParenAtom = lookBehindForParentParenthesisAtom(atoms, initAtom.flatIndex); + if (parentParenAtom === null) { + return null; } + return lookAheadForNextNonCommentAtom(atoms, parentParenAtom.flatIndex); +} - - - - function getParentRootAtomIfOfType(atoms: Array, fromIndex: number, ...rootTypes: Array): ILispFragment|null { - const parentAtom = lookBehindForParentRootAtom(atoms, fromIndex); - const name = parentAtom?.symbol ?? ''; - if (rootTypes.some(p => StringEqualsIgnoreCase(name, p))) { - return parentAtom; +function lookAheadForNextNonCommentAtom(atoms: Array, fromIndex: number): ILispFragment { + for (let i = fromIndex + 1; i < atoms.length; i++) { + const atom = atoms[i]; + if (!atom.isComment()) { + return atom; } - return null; } + return null; +} - - function lookBehindForParentRootAtom(atoms: Array, fromIndex: number): ILispFragment|null { - const initAtom = atoms[fromIndex]; - const parentParenAtom = lookBehindForParentParenthesisAtom(atoms, initAtom.flatIndex); - if (parentParenAtom === null) { - return null; +function lookBehindForPreviousNonCommentAtom(atoms: Array, from: ILispFragment): ILispFragment { + for (let i = from.flatIndex - 1; i >= 0; i--) { + const atom = atoms[i]; + if (!atom.isComment()) { + return atom; } - return lookAheadForNextNonCommentAtom(atoms, parentParenAtom.flatIndex); } + return null; +} +/* + Logic Pattern: + every variable declaration must have a setq preceding it + OR + the previous atom should be an assignment ending with some kind of primitive value type + Note: (, ), strings, numbers, nil and t are all primitives + + Technical Debt: + The only known situation where this could fail is setting a variable using only another variable + Which is considered to be a bad practice for use with an explicitly exported @Global system +*/ +function isValidSetqContext(atoms: Array, from: ILispFragment | number): boolean { + const previous = atoms[(typeof from === 'number' ? from : from.flatIndex) - 1]; + return previous instanceof LispAtom + && previous.symbol !== '\'' + && (previous.isPrimitive() || StringEqualsIgnoreCase(previous.symbol, 'setq')); +} - function lookAheadForNextNonCommentAtom(atoms: Array, fromIndex: number): ILispFragment { - for (let i = fromIndex + 1; i < atoms.length; i++) { - const atom = atoms[i]; - if (!atom.isComment()) { - return atom; - } - } - return null; +const GlobalFlag = '@GLOBAL'; +function hasGlobalizationContext(source: ILispFragment, parent: ILispFragment, atoms: Array): boolean { + const aheadComment = lookAheadForInlineComment(atoms, source.flatIndex); + const blockComment = lookBehindForBlockComment(atoms, parent.flatIndex); + if (aheadComment || blockComment) { + // saves pointers to the located comments for later use with AutoCompletion & @Param Renaming + source.commentLinks = aheadComment && blockComment + ? [aheadComment.flatIndex, blockComment.flatIndex] + : aheadComment + ? [aheadComment.flatIndex] + : [blockComment.flatIndex]; } + // requires explicit conversion because it could be comparing one or more booleans or nulls + return Boolean(aheadComment?.symbol.toUpperCase().includes(GlobalFlag) + || blockComment?.symbol.toUpperCase().includes(GlobalFlag)); +} - function lookBehindForPreviousNonCommentAtom(atoms: Array, from: ILispFragment): ILispFragment { - for (let i = from.flatIndex - 1; i >= 0; i--) { - const atom = atoms[i]; - if (!atom.isComment()) { - return atom; - } - } +/* This is no longer used, but could be useful in the future + export function hasEmbededGlobalComment(atoms: Array, source: ILispFragment): boolean { + let result = false; + source.commentLinks?.forEach(index => { + const atom = atoms[index]; + if (atom.symbol.toUpperCase().includes(GlobalFlag)) { + result = true; + } + }); + return result; + } +*/ + +function lookBehindForBlockComment(atoms: Array, fromIndex: number): ILispFragment | null { + const initAtom = atoms[fromIndex]; + const parentParenAtom = lookBehindForParentParenthesisAtom(atoms, initAtom.flatIndex); + if (parentParenAtom === null || parentParenAtom.flatIndex === 0) { return null; } + const previousAtom = atoms[parentParenAtom.flatIndex - 1]; - - // Logic Pattern: - // every variable declaration must have a setq preceding it - // OR - // the previous atom should be an assignment ending with some kind of primitive value type - // Note: (, ), strings, numbers, nil and t are all primitives - // - // Technical Debt: - // The only known situation where this could fail is setting a variable using only another variable - // Which is considered to be a bad practice for use with an explicitly exported @Global system - function isValidSetqContext(atoms: Array, from: ILispFragment|number): boolean { - const previous = atoms[(typeof from === 'number' ? from : from.flatIndex) - 1]; - return previous instanceof LispAtom - && previous.symbol !== '\'' - && (previous.isPrimitive() || StringEqualsIgnoreCase(previous.symbol, 'setq')); - } - + // Note: The split() operation on 'potential' comments passively adds a +1 that we need + // to equal the subsequent line# and does handle both single and multi-line comments + const normalizedLineCount = previousAtom.symbol.split('\n').length + previousAtom.line; + return previousAtom.isComment() && normalizedLineCount === parentParenAtom.line ? previousAtom : null; +} - const GlobalFlag = '@GLOBAL'; - function hasGlobalizationContext(source: ILispFragment, parent: ILispFragment, atoms: Array): boolean { - const aheadComment = lookAheadForInlineComment(atoms, source.flatIndex); - const blockComment = lookBehindForBlockComment(atoms, parent.flatIndex); - if (aheadComment || blockComment) { - // saves pointers to the located comments for later use with AutoCompletion & @Param Renaming - source.commentLinks = aheadComment && blockComment - ? [aheadComment.flatIndex, blockComment.flatIndex] - : aheadComment - ? [aheadComment.flatIndex] - : [blockComment.flatIndex]; +function lookBehindForParentParenthesisAtom(atoms: Array, fromIndex: number): ILispFragment | null { + let parenScope = 1; + for (let i = fromIndex - 1; i >= 0; i--) { + const value = atoms[i].symbol; + if (value === ')') { + parenScope++; + } else if (value === '(') { + parenScope--; } - // requires explicit conversion because it could be comparing one or more booleans or nulls - return Boolean(aheadComment?.symbol.toUpperCase().includes(GlobalFlag) - || blockComment?.symbol.toUpperCase().includes(GlobalFlag)); - } - // This is no longer used, but could be useful in the future - // export function hasEmbededGlobalComment(atoms: Array, source: ILispFragment): boolean { - // let result = false; - // source.commentLinks?.forEach(index => { - // const atom = atoms[index]; - // if (atom.symbol.toUpperCase().includes(GlobalFlag)) { - // result = true; - // } - // }); - // return result; - // } - - function lookBehindForBlockComment(atoms: Array, fromIndex: number): ILispFragment|null { - const initAtom = atoms[fromIndex]; - const parentParenAtom = lookBehindForParentParenthesisAtom(atoms, initAtom.flatIndex); - if (parentParenAtom === null || parentParenAtom.flatIndex === 0) { - return null; + if (parenScope === 0) { + return atoms[i]; } - const previousAtom = atoms[parentParenAtom.flatIndex-1]; - - // Note: The split() operation on 'potential' comments passively adds a +1 that we need - // to equal the subsequent line# and does handle both single and multi-line comments - const normalizedLineCount = previousAtom.symbol.split('\n').length + previousAtom.line; - return previousAtom.isComment() && normalizedLineCount === parentParenAtom.line ? previousAtom : null; } + return null; +} - - function lookBehindForParentParenthesisAtom(atoms: Array, fromIndex: number): ILispFragment|null { - let parenScope = 1; - for (let i = fromIndex - 1; i >= 0; i--) { - const value = atoms[i].symbol; - if (value === ')') { - parenScope++; - } else if (value === '(') { - parenScope--; - } - - if (parenScope === 0) { - return atoms[i]; - } +const commentFlag = ';'; +function lookAheadForInlineComment(atoms: Array, fromIndex: number): ILispFragment | null { + const line = atoms[fromIndex].line; + for (let i = fromIndex + 1; i < atoms.length; i++) { + const next = atoms[i]; + if (line !== next?.line) { + return null; } - return null; - } - - - const commentFlag = ';'; - function lookAheadForInlineComment(atoms: Array, fromIndex: number): ILispFragment|null { - const line = atoms[fromIndex].line; - for (let i = fromIndex + 1; i < atoms.length; i++) { - const next = atoms[i]; - if (line !== next?.line) { - return null; - } - if (next.symbol[0] === commentFlag) { - return next; - } + if (next.symbol[0] === commentFlag) { + return next; } - return null; } - - + return null; } - +export const FlatContainerServices = { + lookAheadForInlineComment, + lookBehindForParentParenthesisAtom, + lookBehindForBlockComment, + hasGlobalizationContext, + isValidSetqContext, + lookBehindForPreviousNonCommentAtom, + lookAheadForNextNonCommentAtom, + lookBehindForParentRootAtom, + getParentRootAtomIfOfType, + verifyAtomIsDefunAndGlobalized, + getParentAtomIfDefun, + verifyAtomIsSetqAndGlobalized, + getParentAtomIfValidSetq, + isPossibleFunctionReference +}; \ No newline at end of file diff --git a/extension/src/services/lispContainerServices.ts b/extension/src/services/lispContainerServices.ts index 9ddfce2f..0a056f45 100644 --- a/extension/src/services/lispContainerServices.ts +++ b/extension/src/services/lispContainerServices.ts @@ -1,33 +1,34 @@ import { ILispFragment } from '../astObjects/ILispFragment'; -export namespace LispContainerServices { +export function getLispContainerTypeName(container: ILispFragment): string { + // initialized to 0 if it is a Document Container or 1 if it is a child LispContainer + // this is because sub-containers should have least 1 ignored starting character + for (let i = container.body?.userSymbols ? 0 : 1; i < container.body?.atoms.length ? -1 : 0; i++) { + const atom = container.body.atoms[i]; + if (atom.isComment() || atom.isLeftParen() || atom.symbol === '\'') { + continue; + } + return getAtomicTypeNameValue(atom); + } + return '*unknown*'; +} - export function getLispContainerTypeName(container: ILispFragment): string { - // initialized to 0 if it is a Document Container or 1 if it is a child LispContainer - // this is because sub-containers should have least 1 ignored starting character - for (let i = container.body?.userSymbols ? 0 : 1; i < container.body?.atoms.length ? -1 : 0; i++) { - const atom = container.body.atoms[i]; - if (atom.isComment() || atom.isLeftParen() || atom.symbol === '\'') { - continue; - } - return getAtomicTypeNameValue(atom); - } - return '*unknown*'; - } - - function getAtomicTypeNameValue(atom: ILispFragment): string { - // Note: there is no handling for leading single quotes because LispContainers - // are designed to individually atomize all single quote characters - if (atom.symbol.length === 0) { // Should cover rogue LispContainer inputs - return '*invalid*'; - } else if (atom.isPrimitive()) { - return '*primitive*'; - } else { - return atom.symbol.toLowerCase(); - } - } +function getAtomicTypeNameValue(atom: ILispFragment): string { + // Note: there is no handling for leading single quotes because LispContainers + // are designed to individually atomize all single quote characters + if (atom.symbol.length === 0) { // Should cover rogue LispContainer inputs + return '*invalid*'; + } else if (atom.isPrimitive()) { + return '*primitive*'; + } else { + return atom.symbol.toLowerCase(); + } +} +export const LispContainerServices = { + getLispContainerTypeName, + getAtomicTypeNameValue } \ No newline at end of file diff --git a/extension/src/services/symbolServices.ts b/extension/src/services/symbolServices.ts index fa096e62..99e44547 100644 --- a/extension/src/services/symbolServices.ts +++ b/extension/src/services/symbolServices.ts @@ -4,70 +4,70 @@ import { ISymbolBase } from '../symbols'; import { FlatContainerServices } from './flatContainerServices'; import { ILispFragment } from '../astObjects/ILispFragment'; +// These are some basic symbols that may or may not appear in our lookup sources +// However, their frequency alone makes this pre-check list a performance increase. +const _commonSymbols = ['+', '-', '/', '*', '<', '>', '<=', '>=', '/=']; -export namespace SymbolServices { - - // These are some basic symbols that may or may not appear in our lookup sources - // However, their frequency alone makes this pre-check list a performance increase. - const _commonSymbols = ['+', '-', '/', '*', '<', '>', '<=', '>=', '/=']; +// This list of native keys is used to detect symbols we would not want to track +const _nativeKeys: Array = []; +function generateNativeKeys(): void { + _nativeKeys.push(...new Set(Object.keys(AutoLispExt.WebHelpLibrary.functions) + .concat(Object.keys(AutoLispExt.WebHelpLibrary.ambiguousFunctions)) + .concat(Object.keys(AutoLispExt.WebHelpLibrary.enumerators)) + .concat(AutoLispExt.Resources.internalLispFuncs))); + _nativeKeys.sort(); +} - // This list of native keys is used to detect symbols we would not want to track - const _nativeKeys: Array = []; - function generateNativeKeys() : void { - _nativeKeys.push(...new Set(Object.keys(AutoLispExt.WebHelpLibrary.functions) - .concat(Object.keys(AutoLispExt.WebHelpLibrary.ambiguousFunctions)) - .concat(Object.keys(AutoLispExt.WebHelpLibrary.enumerators)) - .concat(AutoLispExt.Resources.internalLispFuncs))); - _nativeKeys.sort(); +// runs binary search on load-once & sorted constant +export function isNative(lowerKey: string): boolean { + if (_nativeKeys.length === 0) { + generateNativeKeys(); } - - // runs binary search on load-once & sorted constant - export function isNative(lowerKey: string): boolean { - if (_nativeKeys.length === 0) { - generateNativeKeys(); - } - if (_commonSymbols.includes(lowerKey)) { - return true; - } - let start = 0; - let end = _nativeKeys.length - 1; - let result = false; - while (start <= end) { - let middle = Math.floor((start + end) / 2); - if (_nativeKeys[middle] === lowerKey) { - result = true; - break; - } else if (_nativeKeys[middle] < lowerKey) { - start = middle + 1; - } else { - end = middle - 1; - } + if (_commonSymbols.includes(lowerKey)) { + return true; + } + let start = 0; + let end = _nativeKeys.length - 1; + let result = false; + while (start <= end) { + const middle = Math.floor((start + end) / 2); + if (_nativeKeys[middle] === lowerKey) { + result = true; + break; + } else if (_nativeKeys[middle] < lowerKey) { + start = middle + 1; + } else { + end = middle - 1; } - return result; } + return result; +} - - export function hasGlobalFlag(source: ReadonlyDocument|Array, symbolRef: ISymbolBase): boolean { - source = Array.isArray(source) ? source : source.documentContainer?.flatten(); - if (!source) { - return false; - } - const thisAtom = source[symbolRef?.asReference?.flatIndex ?? -1]; - if (!thisAtom - || symbolRef.asHost - || source[symbolRef.asReference.flatIndex-1]?.isLeftParen() !== false) { - return false; - } - if (symbolRef.asReference.isDefinition) { - return FlatContainerServices.verifyAtomIsDefunAndGlobalized(source, thisAtom); - } else { - return FlatContainerServices.verifyAtomIsSetqAndGlobalized(source, thisAtom); - } +export function hasGlobalFlag(source: ReadonlyDocument | Array, symbolRef: ISymbolBase): boolean { + source = Array.isArray(source) ? source : source.documentContainer?.flatten(); + if (!source) { + return false; + } + const thisAtom = source[symbolRef?.asReference?.flatIndex ?? -1]; + if (!thisAtom + || symbolRef.asHost + || source[symbolRef.asReference.flatIndex - 1]?.isLeftParen() !== false) { + return false; } - + if (symbolRef.asReference.isDefinition) { + return FlatContainerServices.verifyAtomIsDefunAndGlobalized(source, thisAtom); + } else { + return FlatContainerServices.verifyAtomIsSetqAndGlobalized(source, thisAtom); + } } - +export const SymbolServices = { + _commonSymbols, + _nativeKeys, + generateNativeKeys, + isNative, + hasGlobalFlag +} \ No newline at end of file diff --git a/extension/src/statusbar.ts b/extension/src/statusbar.ts index e208fba3..a030cd7d 100644 --- a/extension/src/statusbar.ts +++ b/extension/src/statusbar.ts @@ -5,15 +5,15 @@ import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); export function registerLoadLispButton(context: vscode.ExtensionContext) { - let lspLoadButton = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); - let title = localize("autolispext.loadlisp.title", "Load lisp"); + const lspLoadButton = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); + const title = localize("autolispext.loadlisp.title", "Load lisp"); lspLoadButton.text = "📄" + title; lspLoadButton.color = 'white'; lspLoadButton.tooltip = localize("autolispext.loadlisp.tooltip", "Load the Current File"); lspLoadButton.command = "autolisp.loadActiveFile"; lspLoadButton.show(); context.subscriptions.push(vscode.commands.registerCommand("autolisp.loadActiveFile", () => { - let currentLSPDoc = vscode.window.activeTextEditor.document.fileName; + const currentLSPDoc = vscode.window.activeTextEditor.document.fileName; if(isSupportedLispFile(currentLSPDoc)) { //execute load progress if (vscode.debug.activeDebugSession !== undefined) { @@ -23,7 +23,7 @@ export function registerLoadLispButton(context: vscode.ExtensionContext) { vscode.window.showErrorMessage(message); } } else { - let platform = os.type(); + const platform = os.type(); if(platform === 'Windows_NT'){ const message = localize("autolispext.loadlisp.fileformat.win", "This file format isn’t supported. Activate a window containing a DCL, LSP, or MNL file."); vscode.window.showErrorMessage(message); @@ -39,7 +39,7 @@ export function registerLoadLispButton(context: vscode.ExtensionContext) { // this test resolves a non-breaking error when manually running npm test scripts from command line return; } - let currentLSPDoc = vscode.window.activeTextEditor.document.fileName; + const currentLSPDoc = vscode.window.activeTextEditor.document.fileName; if(isSupportedLispFile(currentLSPDoc)) { lspLoadButton.show(); } else { diff --git a/extension/src/symbols.ts b/extension/src/symbols.ts index 04148c32..1d462cea 100644 --- a/extension/src/symbols.ts +++ b/extension/src/symbols.ts @@ -6,46 +6,48 @@ import { LispContainerServices } from './services/lispContainerServices'; import { ILispFragment } from './astObjects/ILispFragment'; import { LispContainer } from './astObjects/lispContainer'; - -export namespace SymbolManager { - - // central repo for all symbol caches, the document manager was tied into - // this data source, but is a separate data source we don't want to embed in - // the ReadOnlyDocument or the already heavily bloated document manager. - const _definedCache: Map = new Map(); - - export function updateOrCreateSymbolMap(doc: ReadonlyDocument, forceUpdate: boolean): string { - const key = DocumentServices.normalizeFilePath(doc.fileName); - const active = vscode.window.activeTextEditor?.document?.fileName ?? ''; - const doUpdate = forceUpdate - // If the requested symbol map does not exist, or does exists, but probably disposed - || !_definedCache.get(key)?.isValid - // If the requested symbol map represents the active document, then require accuracy - || (active && DocumentServices.normalizeFilePath(active) === key); - if (doUpdate) { - if (_definedCache.get(key)) { - _definedCache.get(key).dispose(); - } - _definedCache.set(key, new RootSymbolMapHost(key, doc.documentContainer)); +// central repo for all symbol caches, the document manager was tied into +// this data source, but is a separate data source we don't want to embed in +// the ReadOnlyDocument or the already heavily bloated document manager. +const _definedCache: Map = new Map() + +function updateOrCreateSymbolMap(doc: ReadonlyDocument, forceUpdate: boolean): string { + const key = DocumentServices.normalizeFilePath(doc.fileName); + const active = vscode.window.activeTextEditor?.document?.fileName ?? ''; + const doUpdate = forceUpdate + // If the requested symbol map does not exist, or does exists, but probably disposed + || !_definedCache.get(key)?.isValid + // If the requested symbol map represents the active document, then require accuracy + || (active && DocumentServices.normalizeFilePath(active) === key); + if (doUpdate) { + if (_definedCache.get(key)) { + _definedCache.get(key).dispose(); } - return key; + _definedCache.set(key, new RootSymbolMapHost(key, doc.documentContainer)); } + return key; +} - export function invalidateSymbolMapCache(): number { - try { - _definedCache.forEach(root => { - root.dispose(); - }); - return [..._definedCache.keys()].length; - } finally { - _definedCache.clear(); - } +function invalidateSymbolMapCache(): number { + try { + _definedCache.forEach(root => { + root.dispose(); + }); + return [..._definedCache.keys()].length; + } finally { + _definedCache.clear(); } +} - export function getSymbolMap(doc: ReadonlyDocument, forceUpdate: boolean = false): RootSymbolMapHost { - const key = updateOrCreateSymbolMap(doc, forceUpdate); - return _definedCache.get(key); - } +function getSymbolMap(doc: ReadonlyDocument, forceUpdate: boolean = false): RootSymbolMapHost { + const key = this.updateOrCreateSymbolMap(doc, forceUpdate); + return _definedCache.get(key); +} + +export const SymbolManager = { + updateOrCreateSymbolMap, + invalidateSymbolMapCache, + getSymbolMap } @@ -57,7 +59,7 @@ export namespace SymbolManager { export interface ISymbolBase extends vscode.Disposable { readonly filePath: string; readonly hasId: boolean; - readonly parent: ISymbolHost|null; + readonly parent: ISymbolHost | null; readonly range: vscode.Range; readonly id?: string; readonly asHost?: AnonymousSymbolHost; @@ -66,7 +68,7 @@ export interface ISymbolBase extends vscode.Disposable { } export interface ISymbolReference extends ISymbolBase { - readonly id: string; + readonly id: string; readonly flatIndex: number; readonly isLocalization: boolean; readonly isDefinition: boolean; @@ -75,7 +77,7 @@ export interface ISymbolReference extends ISymbolBase { export interface ISymbolHost extends ISymbolBase { readonly items: Array; - readonly named: ISymbolReference|null; + readonly named: ISymbolReference | null; readonly isValid: boolean; readonly isRoot: boolean; collectAllSymbols(allSymbols?: Map>): Map>; @@ -86,20 +88,12 @@ export interface ISymbolHost extends ISymbolBase { // doing this makes the Symbol Manager the only possible constructor outside of this document // this is a protective measure for the Parent/Child references that need to be cleaned up // While not entirely necessary, it does improve code readability -export interface IRootSymbolHost extends ISymbolHost {} - - - - - - - - +export type IRootSymbolHost = ISymbolHost class NamedSymbolReference implements ISymbolReference { id: string; - flatIndex: number; + flatIndex: number; filePath: string; parent: ISymbolHost; range: vscode.Range; @@ -124,7 +118,7 @@ class NamedSymbolReference implements ISymbolReference { this.isLocalization = true; return this; } - + withDefunFlag(): NamedSymbolReference { this.isDefinition = true; return this; @@ -143,25 +137,11 @@ class NamedSymbolReference implements ISymbolReference { } - findLocalizingParent(): ISymbolHost { + findLocalizingParent(): ISymbolHost { return this.parent.findLocalizingParent(this.id); } } - - - - - - - - - - - - - - const localizers = ['defun', 'defun-q', 'lambda', 'foreach', 'vlax-for']; class AnonymousSymbolHost implements ISymbolHost { filePath: string; @@ -175,15 +155,15 @@ class AnonymousSymbolHost implements ISymbolHost { get asReference() { return null; } get isValid() { return !this._disposed; } get isRoot() { return false; } - - + + constructor(owner: ISymbolHost, fsPath: string, source: LispContainer, isProcessedBySubClass = false) { this._disposed = false; this.items = []; this.parent = owner; this.filePath = fsPath; this.named = null; - this.range = source.getRange(); + this.range = source.getRange(); if (isProcessedBySubClass) { return; } @@ -201,12 +181,12 @@ class AnonymousSymbolHost implements ISymbolHost { this.items.forEach(item => { item.dispose(); - }); + }); this.items.length = 0; - + delete this.range; delete this.parent; - + this._disposed = true; } } @@ -233,14 +213,14 @@ class AnonymousSymbolHost implements ISymbolHost { // else somebody probably used 'nil' for the localization area and which is valid in some scenarios } - protected aggregateContainer(source: LispContainer, after?: ILispFragment) : void { + protected aggregateContainer(source: LispContainer, after?: ILispFragment): void { let doWork = after === undefined; source.atoms.forEach(item => { if (!doWork) { doWork = item.line === after.line && item.column === after.column; - } else if (item instanceof LispContainer) { + } else if (item instanceof LispContainer) { const name = LispContainerServices.getLispContainerTypeName(item); - if (name === localizers[0] || name === localizers[1]) { + if (name === localizers[0] || name === localizers[1]) { // Is defun or defun-q this.items.push(new NamedSymbolHost(this, this.filePath, item)); } else if (localizers.includes(name)) { @@ -299,10 +279,10 @@ class AnonymousSymbolHost implements ISymbolHost { } -class NamedSymbolHost extends AnonymousSymbolHost { +class NamedSymbolHost extends AnonymousSymbolHost { get hasId() { return true; } get id() { return this.named.id; } - + constructor(owner: ISymbolHost, fsPath: string, source: LispContainer) { super(owner, fsPath, source, true); this.named = new NamedSymbolReference(this, fsPath, source.getNthKeyAtom(1)).withDefunFlag(); @@ -319,7 +299,7 @@ class RootSymbolMapHost extends AnonymousSymbolHost implements IRootSymbolHost { this.aggregateContainer(source); } get isRoot() { return true; } - + //eslint-disable-next-line @typescript-eslint/no-unused-vars findLocalizingParent(key: string): ISymbolHost { return this; } diff --git a/extension/src/test/e2e/debugConfig.ts b/extension/src/test/e2e/debugConfig.ts index 3f7f89ac..7bc3e9b7 100644 --- a/extension/src/test/e2e/debugConfig.ts +++ b/extension/src/test/e2e/debugConfig.ts @@ -2,99 +2,104 @@ import { expect } from 'chai'; import { InputBox, Workbench } from 'vscode-extension-tester'; describe('Debug Configuration Test', () => { - let workbench: Workbench = null; - let activeInput: InputBox = null; - let debugStarted: boolean = false; + let workbench: Workbench = null; + let activeInput: InputBox = null; + let debugStarted: boolean = false; - const attachConfigText: string = 'AutoLISP Debug: Attach'; - const launchConfigText: string = 'AutoLISP Debug: Launch'; + const attachConfigText: string = 'AutoLISP Debug: Attach'; + const launchConfigText: string = 'AutoLISP Debug: Launch'; - const startDebugCmd: string = 'workbench.action.debug.start'; - const stopDebugCmd: string = 'workbench.action.debug.stop'; + const startDebugCmd: string = 'workbench.action.debug.start'; + const stopDebugCmd: string = 'workbench.action.debug.stop'; - const expectedAttachHint = 'Pick the process to attach.'; - const expectedLaunchHint = 'Specify the absolute path for the product.'; + const expectedAttachHint = 'Pick the process to attach.'; + const expectedLaunchHint = 'Specify the absolute path for the product.'; - beforeEach(async () => { - activeInput = null; - debugStarted = false; + beforeEach(async () => { + activeInput = null; + debugStarted = false; - workbench = new Workbench(); - await workbench.executeCommand(startDebugCmd); - }); + workbench = new Workbench(); + await workbench.executeCommand(startDebugCmd); + }); - afterEach(async () => { - if (activeInput) { - if (await activeInput.isDisplayed()) - await activeInput.cancel(); - } + afterEach(async () => { + if (activeInput) { + if (await activeInput.isDisplayed()) + await activeInput.cancel(); + } - if(debugStarted) { - await workbench.executeCommand(stopDebugCmd); - } - }); + if (debugStarted) { + await workbench.executeCommand(stopDebugCmd); + } + }); - // to verify that the config item named "Attach" is really for attach mode - it('should show debug config items on F5', async function () { - const cmdInput = await getActiveInputBox(); - expect(await cmdInput.isDisplayed()).is.true; + // to verify that the config item named "Attach" is really for attach mode + it('should show debug config items on F5', async function () { + const cmdInput = await getActiveInputBox(); + //eslint-disable-next-line + expect(await cmdInput.isDisplayed()).is.true; - const picks = await cmdInput.getQuickPicks(); + const picks = await cmdInput.getQuickPicks(); - const attachCfg: InputBox[] = await findAll(picks, async (x: InputBox) => { return attachConfigText === await x.getText(); }); - expect(attachCfg.length).equals(1); + const attachCfg: InputBox[] = await findAll(picks, async (x: InputBox) => { return attachConfigText === await x.getText(); }); + expect(attachCfg.length).equals(1); - const launchCfg: InputBox[] = await findAll(picks, async (x: InputBox) => { return launchConfigText === await x.getText(); }); - expect(launchCfg.length).equals(1); - }); + const launchCfg: InputBox[] = await findAll(picks, async (x: InputBox) => { return launchConfigText === await x.getText(); }); + expect(launchCfg.length).equals(1); + }); - // to verify that the "Attach" config item is bound to attach mode - it('should debug in attach mode after selecting Debug: Attach', async function () { - const cmdInput = await getActiveInputBox(); - expect(await cmdInput.isDisplayed()).is.true; + // to verify that the "Attach" config item is bound to attach mode + it('should debug in attach mode after selecting Debug: Attach', async function () { + const cmdInput = await getActiveInputBox(); + //eslint-disable-next-line + expect(await cmdInput.isDisplayed()).is.true; - await cmdInput.setText(attachConfigText); - await cmdInput.confirm(); + await cmdInput.setText(attachConfigText); + await cmdInput.confirm(); - debugStarted = true; + debugStarted = true; - const procInput = await getActiveInputBox(); - expect((await procInput.getPlaceHolder()).startsWith(expectedAttachHint)).true; - }); + const procInput = await getActiveInputBox(); + //eslint-disable-next-line + expect((await procInput.getPlaceHolder()).startsWith(expectedAttachHint)).true; + }); - // to verify that the config item named "Launch" is really for launch mode - it('should debug in launch mode after selecting Debug: Launch', async function () { - const cmdInput = await getActiveInputBox(); - expect(await cmdInput.isDisplayed()).is.true; + // to verify that the config item named "Launch" is really for launch mode + it('should debug in launch mode after selecting Debug: Launch', async function () { + const cmdInput = await getActiveInputBox(); + //eslint-disable-next-line + expect(await cmdInput.isDisplayed()).is.true; - await cmdInput.setText(launchConfigText); - await cmdInput.confirm(); + await cmdInput.setText(launchConfigText); + await cmdInput.confirm(); - debugStarted = true; + debugStarted = true; - const pathInput = await getActiveInputBox(); - expect((await pathInput.getPlaceHolder()).startsWith(expectedLaunchHint)).true; - }); + const pathInput = await getActiveInputBox(); + //eslint-disable-next-line + expect((await pathInput.getPlaceHolder()).startsWith(expectedLaunchHint)).true; + }); - async function findAll(array, callbackFind): Promise> { - let ret: Array = []; + async function findAll(array, callbackFind): Promise> { + const ret: Array = []; - for (const item of array) { - const matched: boolean = await callbackFind(item); - if (!matched) - continue; + for (const item of array) { + const matched: boolean = await callbackFind(item); + if (!matched) + continue; - ret.push(item); - } + ret.push(item); + } - return ret; - } + return ret; + } - async function getActiveInputBox(): Promise { - let input = await InputBox.create(); - activeInput = input; + async function getActiveInputBox(): Promise { + const input = await InputBox.create(); + activeInput = input; - return activeInput; - } + return activeInput; + } }); diff --git a/extension/src/test/runTest.ts b/extension/src/test/runTest.ts index 1f983930..91386e36 100644 --- a/extension/src/test/runTest.ts +++ b/extension/src/test/runTest.ts @@ -34,7 +34,7 @@ async function main() { launchArgs: [workSpace, '--disable-extensions'] }); } catch (err) { - console.error('Failed to run tests'); + console.error(`Failed to run tests\n${err}`); process.exit(1); } } diff --git a/extension/src/test/suite/1st.test.ts b/extension/src/test/suite/1st.test.ts index b65d110f..3b3d7eff 100644 --- a/extension/src/test/suite/1st.test.ts +++ b/extension/src/test/suite/1st.test.ts @@ -1,11 +1,10 @@ import * as chai from 'chai'; import * as vscode from 'vscode'; import * as path from 'path'; +import { assert } from 'chai' -var assert = require('chai').assert; - -suite("Global Setup", function () { - test("Artificial Invoke of AutoLispExt", async function () { +suite("Global Setup", function () { + test("Artificial Invoke of AutoLispExt", async function () { try { this.timeout(10000); // For some reason, activating our extension from within a test is "better" than @@ -15,21 +14,21 @@ suite("Global Setup", function () { chai.assert(true); } catch (err) { - assert.fail("Failed to activate extension"); + assert.fail(`Failed to activate extension\n${err}`); } }); - test("Initialize an Active Editor", async function () { + test("Initialize an Active Editor", async function () { try { // Added this immediate file open invoke to give certain tests designed to scan // all possible ReadOnlyDocument context types full code coverage. const filePath = path.resolve(__dirname, '../../../', './extension/src/test/SourceFile/test_case/comments.lsp'); const options = { 'preview': false, 'preserveFocus': true }; await vscode.commands.executeCommand('vscode.open', vscode.Uri.file(filePath), options); - chai.assert(true); + chai.assert(true); } catch (err) { - assert.fail("Failed to open an active document editor"); + assert.fail(`Failed to open an active document editor\n${err}`); } }); diff --git a/extension/src/test/suite/AutoCompletion.test.ts b/extension/src/test/suite/AutoCompletion.test.ts index 6c719869..a97195c4 100644 --- a/extension/src/test/suite/AutoCompletion.test.ts +++ b/extension/src/test/suite/AutoCompletion.test.ts @@ -3,306 +3,309 @@ import * as vscode from "vscode"; import * as fs from "fs"; import * as path from "path"; import * as os from 'os'; -import { getLispAndDclCompletions, - getCmdAndVarsCompletionCandidates, - getMatchingWord } from "../../completion/autocompletionProvider"; +import { + getLispAndDclCompletions, + getCmdAndVarsCompletionCandidates, + getMatchingWord +} from "../../completion/autocompletionProvider"; import { AutoLispExt } from "../../context"; import { readFile2TextDocument } from "./helper"; -let assert = chai.assert; -const testDir = path.join(__dirname + "/../../../extension/src/test"); -const outputDir = path.join(testDir + "/OutputFile"); -const sourceDir = path.join(testDir + "/SourceFile"); -let getWordmatchLispFile = path.join(sourceDir + "/getWordmatch.lsp"); -let LispFile = path.join(testDir + "/OutputFile/test.lsp"), - DclFile = path.join(testDir + "/OutputFile/test.dcl"), - lispdoc: vscode.TextDocument, - dcldoc: vscode.TextDocument, - wordmatchDoc: vscode.TextDocument; +const assert = chai.assert, + testDir = path.join(__dirname + "/../../../extension/src/test"), + outputDir = path.join(testDir + "/OutputFile"), + sourceDir = path.join(testDir + "/SourceFile"), + getWordmatchLispFile = path.join(sourceDir + "/getWordmatch.lsp"), + LispFile = path.join(testDir + "/OutputFile/test.lsp"), + DclFile = path.join(testDir + "/OutputFile/test.dcl"); + +let lispdoc: vscode.TextDocument, + dcldoc: vscode.TextDocument, + wordmatchDoc: vscode.TextDocument; fs.mkdir(outputDir, { recursive: true }, (err) => { - if (err) { - return console.error(err); - } + if (err) { + return console.error(err); + } }); async function createTextDcoument() { - try { - if (!fs.existsSync(LispFile)) { - fs.writeFileSync(LispFile, ""); - } - if (!fs.existsSync(DclFile)) { - fs.writeFileSync(DclFile, ""); - } - lispdoc = await readFile2TextDocument(LispFile); - dcldoc = await readFile2TextDocument(DclFile); - wordmatchDoc = await readFile2TextDocument(getWordmatchLispFile); - } catch (error) { - console.log(error); - } + try { + if (!fs.existsSync(LispFile)) { + fs.writeFileSync(LispFile, ""); + } + if (!fs.existsSync(DclFile)) { + fs.writeFileSync(DclFile, ""); + } + lispdoc = await readFile2TextDocument(LispFile); + dcldoc = await readFile2TextDocument(DclFile); + wordmatchDoc = await readFile2TextDocument(getWordmatchLispFile); + } catch (error) { + console.log(error); + } } -function getSuggestLabel(doc : vscode.TextDocument ,inputword : string,isupper :boolean){ - const suggestionList: Array = getLispAndDclCompletions( - doc, - inputword, - isupper - ); - let suggestLabel = []; - suggestionList.forEach((item) => { - suggestLabel.push(item.label); - }); - return suggestLabel; +function getSuggestLabel(doc: vscode.TextDocument, inputword: string, isupper: boolean) { + const suggestionList: Array = getLispAndDclCompletions( + doc, + inputword, + isupper + ); + const suggestLabel = []; + suggestionList.forEach((item) => { + suggestLabel.push(item.label); + }); + return suggestLabel; } -function getSuggestLabelCMD(cmd :string[] ,inputword : string,isupper :boolean){ - let suggestionList = getCmdAndVarsCompletionCandidates(cmd,inputword,isupper) - let suggestLabel = []; - suggestionList.forEach((item) => { - suggestLabel.push(item.label); - }); - return suggestLabel; +function getSuggestLabelCMD(cmd: string[], inputword: string, isupper: boolean) { + const suggestionList = getCmdAndVarsCompletionCandidates(cmd, inputword, isupper) + const suggestLabel = []; + suggestionList.forEach((item) => { + suggestLabel.push(item.label); + }); + return suggestLabel; } suite("AutoCompletion Tests", function () { - // Windows only functions (vla-,vlax-,vlr-,vl-load-com,vl-load-reactors,vlisp-) - suiteSetup(async () => { - await createTextDcoument(); - }); - test("AutoCompletion Test for de",async function () { - const inputword = "de"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = ['defun', 'defun-q']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + // Windows only functions (vla-,vlax-,vlr-,vl-load-com,vl-load-reactors,vlisp-) + suiteSetup(async () => { + await createTextDcoument(); + }); + test("AutoCompletion Test for de", async function () { + const inputword = "de"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = ['defun', 'defun-q']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); + + test("AutoCompletion Test for se", function () { + const inputword = "se"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = ['setq', 'set', 'setenv', 'setvar', 'set_tile', 'setcfg', 'setfunhelp', 'setview']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); + + test("AutoCompletion Test for str", function () { + const inputword = "str"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + + const expectedList = ['strcase', 'strcat', 'strlen']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for se", function () { - const inputword = "se"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = ['setq','set','setenv','setvar','set_tile','setcfg','setfunhelp','setview']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for ;", function () { + const inputword = ";"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = []; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for str", function () { - const inputword = "str"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - - let expectedList = ['strcase','strcat','strlen']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for (", function () { + const inputword = "("; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = []; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for ;", function () { - const inputword = ";"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = []; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for ca", function () { + const inputword = "ca"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = ['caaaar', 'caaadr', 'caadar', 'caaddr', 'cadaar', 'cadadr', 'caddar', + 'cadddr', 'caaar', 'caadr', 'cadar', 'caddr', 'caar', 'cadr', 'car']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for (", function () { - const inputword = "("; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = []; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for Se", function () { + //Mixed upper and lower case + const inputword = "Se"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = []; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for ca", function () { - const inputword = "ca"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = ['caaaar','caaadr','caadar','caaddr','cadaar','cadadr','caddar', - 'cadddr','caaar','caadr','cadar','caddr','caar','cadr','car']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for PRI", function () { + //Upcase test + const inputword = "PRI"; + try { + const isupper = true; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + const expectedList = ['PRIN1', 'PRINC', 'PRINT']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for Se", function () { - //Mixed upper and lower case - const inputword = "Se"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = []; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for vlax-get", function () { + const inputword = "vlax-get"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(lispdoc, inputword, isupper); + let expectedList = []; + if (os.platform() === "win32") { + expectedList = [ + "vlax-get", + "vlax-get-acad-object", + "vlax-get-object", + "vlax-get-or-create-object", + "vlax-get-property", + ]; + chai.expect(suggestLabel).to.eql(expectedList); + } else { + expectedList = []; + chai.expect(suggestLabel).to.eql(expectedList); + } + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for PRI", function () { - //Upcase test - const inputword = "PRI"; - try { - const isupper = true; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = ['PRIN1','PRINC','PRINT']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for column in DCL", function () { + //Mixed upper and lower case + const inputword = "col"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(dcldoc, inputword, isupper); + const expectedList = ['color', 'column']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test for vlax-get", function () { - const inputword = "vlax-get"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(lispdoc,inputword,isupper); - let expectedList = []; - if (os.platform() === "win32") { - expectedList = [ - "vlax-get", - "vlax-get-acad-object", - "vlax-get-object", - "vlax-get-or-create-object", - "vlax-get-property", - ]; - chai.expect(suggestLabel).to.eql(expectedList); - } else { - expectedList = []; - chai.expect(suggestLabel).to.eql(expectedList); - } - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); - - test("AutoCompletion Test for column in DCL", function () { - //Mixed upper and lower case - const inputword = "col"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(dcldoc,inputword,isupper); - let expectedList = ['color','column']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); - - test("AutoCompletion Test for rad in DCL", function () { - //Mixed upper and lower case - const inputword = "rad"; - try { - const isupper = false; - let suggestLabel = getSuggestLabel(dcldoc,inputword,isupper); - let expectedList = ['radio_button','radio_cluster','radio_column','radio_row']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test for rad in DCL", function () { + //Mixed upper and lower case + const inputword = "rad"; + try { + const isupper = false; + const suggestLabel = getSuggestLabel(dcldoc, inputword, isupper); + const expectedList = ['radio_button', 'radio_cluster', 'radio_column', 'radio_row']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test autocompletion Inside Double Quote for ci", function () { - //Test Cmd And Vars in Double Quote in lowercase - const inputword = "ci"; - try { - const isupper = false; - let suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars,inputword,isupper); - let expectedList = ['circle','circlerad']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test autocompletion Inside Double Quote for ci", function () { + //Test Cmd And Vars in Double Quote in lowercase + const inputword = "ci"; + try { + const isupper = false; + const suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars, inputword, isupper); + const expectedList = ['circle', 'circlerad']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test autocompletion Inside Double Quote for CI", function () { - //Test Cmd And Vars in Double Quote in uppercase - const inputword = "CI"; - try { - const isupper = true; - let suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars,inputword,isupper); - let expectedList = ['CIRCLE','CIRCLERAD']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test autocompletion Inside Double Quote for CI", function () { + //Test Cmd And Vars in Double Quote in uppercase + const inputword = "CI"; + try { + const isupper = true; + const suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars, inputword, isupper); + const expectedList = ['CIRCLE', 'CIRCLERAD']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - test("AutoCompletion Test autocompletion Inside Double Quote for _pli", function () { - //Test Cmd And Vars in Double Quote with underline _ - const inputword = "_pli"; - try { - const isupper = false; - let suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars,inputword,isupper); - let expectedList = ['_pline','_plineconvertmode','_plinegcenmax','_plinegen', - '_plinereversewidths','_plinetype','_plinewid']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); - test("AutoCompletion Test autocompletion Inside Double Quote for -plo", function () { - //Test Cmd And Vars in Double Quote with dash line - - const inputword = "-plo"; - try { - const isupper = false; - let suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars,inputword,isupper); - let expectedList = ['-plot','-plotstyle','-plotstamp']; - chai.expect(suggestLabel).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${inputword} failed`); - } - }); + test("AutoCompletion Test autocompletion Inside Double Quote for _pli", function () { + //Test Cmd And Vars in Double Quote with underline _ + const inputword = "_pli"; + try { + const isupper = false; + const suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars, inputword, isupper); + const expectedList = ['_pline', '_plineconvertmode', '_plinegcenmax', '_plinegen', + '_plinereversewidths', '_plinetype', '_plinewid']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); + test("AutoCompletion Test autocompletion Inside Double Quote for -plo", function () { + //Test Cmd And Vars in Double Quote with dash line - + const inputword = "-plo"; + try { + const isupper = false; + const suggestLabel = getSuggestLabelCMD(AutoLispExt.Resources.allCmdsAndSysvars, inputword, isupper); + const expectedList = ['-plot', '-plotstyle', '-plotstamp']; + chai.expect(suggestLabel).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${inputword} failed\n${err}`); + } + }); - //Test GetMatchingWord function - test("GetMatchingWord Test for [p,true]", async function () { - let fn = "GetMatchingWord Test for [p,true]"; - try { - let cursorPos = new vscode.Position(0, 0); - let expectedList = ["p", false]; - chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${fn} failed`); - } - }); + //Test GetMatchingWord function + test("GetMatchingWord Test for [p,true]", async function () { + const fn = "GetMatchingWord Test for [p,true]"; + try { + const cursorPos = new vscode.Position(0, 0); + const expectedList = ["p", false]; + chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${fn} failed\n${err}`); + } + }); - test("GetMatchingWord Test for [A,false]", async function () { - let fn = "GetMatchingWord Test for [A,false]"; - try { - let cursorPos = new vscode.Position(1, 0); - let expectedList = ["A", true]; - chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${fn} failed`); - } - }); + test("GetMatchingWord Test for [A,false]", async function () { + const fn = "GetMatchingWord Test for [A,false]"; + try { + const cursorPos = new vscode.Position(1, 0); + const expectedList = ["A", true]; + chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${fn} failed\n${err}`); + } + }); - test("GetMatchingWord Test for [(,false]", async function () { - //Test wordSep = " &#^()[]|;'\"."; - let fn = "GetMatchingWord Test for [(,false]"; - try { - let cursorPos = new vscode.Position(2, 3); - let expectedList = ["(", false]; - chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); - } catch (err) { - assert.fail(`AutoCompletion test for ${fn} failed`); - } - }); + test("GetMatchingWord Test for [(,false]", async function () { + //Test wordSep = " &#^()[]|;'\"."; + const fn = "GetMatchingWord Test for [(,false]"; + try { + const cursorPos = new vscode.Position(2, 3); + const expectedList = ["(", false]; + chai.expect(getMatchingWord(wordmatchDoc, cursorPos)).to.eql(expectedList); + } catch (err) { + assert.fail(`AutoCompletion test for ${fn} failed\n${err}`); + } + }); }); diff --git a/extension/src/test/suite/AutoIndent.test.ts b/extension/src/test/suite/AutoIndent.test.ts index 1ee77e64..0e98a6f0 100644 --- a/extension/src/test/suite/AutoIndent.test.ts +++ b/extension/src/test/suite/AutoIndent.test.ts @@ -4,333 +4,333 @@ import * as fs from "fs"; import * as path from "path"; import { findContainers, getIndentation, isCursorInDoubleQuoteExpr } from "../../format/autoIndent"; import { ReadonlyDocument } from "../../project/readOnlyDocument"; -let assert: Chai.Assert = chai.assert; +const assert: Chai.Assert = chai.assert; const testDir = path.join(__dirname + "/../../../extension/src/test"); const outputDir = path.join(testDir + "/OutputFile"); -let indentTestFile = path.join(testDir + "/SourceFile/autoIndentTestFile.lsp"); -let newIndentTestFile = path.join(outputDir + "/newAutoIndentTestFile.lsp"); +const indentTestFile = path.join(testDir + "/SourceFile/autoIndentTestFile.lsp"); +const newIndentTestFile = path.join(outputDir + "/newAutoIndentTestFile.lsp"); let indentTestDoc: vscode.TextDocument; fs.mkdir(outputDir, { recursive: true }, (err) => { - if (err) { - return console.error(err); - } + if (err) { + return console.error(err); + } }); suite("Autoindent Tests", function () { - // Autoindent is used for input in the vscode editor - // Doesn't include the case that press enter insider brackets since - // the limitation of the unit test - // In the client the OnTypeFormattingEdit is trigged after enter so the cursor position is from new line. - test("Autoindent for defun enter should have 2 indentation", function () { - let fn = "defun enter"; - try { - let cursorPos2d = new vscode.Position(0, 28); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 2); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + // Autoindent is used for input in the vscode editor + // Doesn't include the case that press enter insider brackets since + // the limitation of the unit test + // In the client the OnTypeFormattingEdit is trigged after enter so the cursor position is from new line. + test("Autoindent for defun enter should have 2 indentation", function () { + const fn = "defun enter"; + try { + const cursorPos2d = new vscode.Position(0, 28); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 2); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for setq enter should have 2 indentation", function () { - let fn = "setq enter"; - try { - let cursorPos2d = new vscode.Position(1, 13); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - // let containerParens: ElementRange = containerElement.containerParens[0]; - assert.isTrue(lineIndentSpace == 2); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for setq enter should have 2 indentation", function () { + const fn = "setq enter"; + try { + const cursorPos2d = new vscode.Position(1, 13); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + // let containerParens: ElementRange = containerElement.containerParens[0]; + assert.isTrue(lineIndentSpace == 2); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for cons enter should have 14 indentation", function () { - let fn = "cons enter"; - try { - let cursorPos2d = new vscode.Position(12, 36); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 14); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for cons enter should have 14 indentation", function () { + const fn = "cons enter"; + try { + const cursorPos2d = new vscode.Position(12, 36); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 14); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for mapcar enter should have 14 indentation", function () { - let fn = "mapcar enter"; - try { - let cursorPos2d = new vscode.Position(7, 20); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 14); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for mapcar enter should have 14 indentation", function () { + const fn = "mapcar enter"; + try { + const cursorPos2d = new vscode.Position(7, 20); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 14); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for reverse enter should have 18 indentation", function () { - let fn = "reverse enter"; - try { - let cursorPos2d = new vscode.Position(6, 25); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 18); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for reverse enter should have 18 indentation", function () { + const fn = "reverse enter"; + try { + const cursorPos2d = new vscode.Position(6, 25); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 18); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for lambda enter should have 17 indentation", function () { - let fn = "lambda enter"; - try { - let cursorPos2d = new vscode.Position(8, 30); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 17); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for lambda enter should have 17 indentation", function () { + const fn = "lambda enter"; + try { + const cursorPos2d = new vscode.Position(8, 30); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 17); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for while enter should have 2 indentation", function () { - let fn = "while enter"; - try { - let cursorPos2d = new vscode.Position(16, 25); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 2); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for while enter should have 2 indentation", function () { + const fn = "while enter"; + try { + const cursorPos2d = new vscode.Position(16, 25); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 2); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for repeat enter should have 6 indentation", function () { - let fn = "repeat enter"; - try { - let cursorPos2d = new vscode.Position(17, 14); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 6); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for repeat enter should have 6 indentation", function () { + const fn = "repeat enter"; + try { + const cursorPos2d = new vscode.Position(17, 14); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 6); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for foreach enter should have 6 indentation", function () { - let fn = "foreach enter"; - try { - let cursorPos2d = new vscode.Position(21, 19); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 6); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for foreach enter should have 6 indentation", function () { + const fn = "foreach enter"; + try { + const cursorPos2d = new vscode.Position(21, 19); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 6); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for if enter should have 6 indentation", function () { - let fn = "if enter"; - try { - let cursorPos2d = new vscode.Position(22, 18); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 6); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for if enter should have 6 indentation", function () { + const fn = "if enter"; + try { + const cursorPos2d = new vscode.Position(22, 18); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 6); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for progn enter should have 12 indentation", function () { - let fn = "progn enter"; - try { - let cursorPos2d = new vscode.Position(25, 17); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 12); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for progn enter should have 12 indentation", function () { + const fn = "progn enter"; + try { + const cursorPos2d = new vscode.Position(25, 17); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 12); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for cond enter should have 4 indentation", function () { - let fn = "cond enter"; - try { - let cursorPos2d = new vscode.Position(33, 8); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 4); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for cond enter should have 4 indentation", function () { + const fn = "cond enter"; + try { + const cursorPos2d = new vscode.Position(33, 8); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 4); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for cursor insider quotes enter return true", function () { - let fn = "cursor insider quotes"; - try { - let cursorPos2d = new vscode.Position(34, 50); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let isInDoubleQuote = isCursorInDoubleQuoteExpr(indentTestDoc, cursorPos2d); - assert.isTrue(isInDoubleQuote == true); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for cursor insider quotes enter return true", function () { + const fn = "cursor insider quotes"; + try { + const cursorPos2d = new vscode.Position(34, 50); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const isInDoubleQuote = isCursorInDoubleQuoteExpr(indentTestDoc, cursorPos2d); + assert.isTrue(isInDoubleQuote == true); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for block comment enter should have 5 indentation", function () { - let fn = "block comment enter"; - try { - let cursorPos2d = new vscode.Position(39, 35); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 5); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for block comment enter should have 5 indentation", function () { + const fn = "block comment enter"; + try { + const cursorPos2d = new vscode.Position(39, 35); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 5); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for emtpy line enter should have 2 indentation", function () { - let fn = "emtpy line enter"; - try { - let cursorPos2d = new vscode.Position(20, 2); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - console.log("lineIndentSpace: ", lineIndentSpace) - assert.isTrue(lineIndentSpace == 2); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for emtpy line enter should have 2 indentation", function () { + const fn = "emtpy line enter"; + try { + const cursorPos2d = new vscode.Position(20, 2); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + console.log("lineIndentSpace: ", lineIndentSpace) + assert.isTrue(lineIndentSpace == 2); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for NO operator enter should have 1 indentation", function () { - let fn = "NO operator enter"; - try { - let cursorPos2d = new vscode.Position(43, 1); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 1); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for NO operator enter should have 1 indentation", function () { + const fn = "NO operator enter"; + try { + const cursorPos2d = new vscode.Position(43, 1); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 1); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for list quote enter should have 10 indentation", function () { - let fn = "list quote enter"; - try { - let cursorPos2d = new vscode.Position(47, 11); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 10); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for list quote enter should have 10 indentation", function () { + const fn = "list quote enter"; + try { + const cursorPos2d = new vscode.Position(47, 11); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 10); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for multiple setq enter should have 6 indentation", function () { - let fn = "multiple setq enter"; - try { - let cursorPos2d = new vscode.Position(49, 9); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 6); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for multiple setq enter should have 6 indentation", function () { + const fn = "multiple setq enter"; + try { + const cursorPos2d = new vscode.Position(49, 9); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 6); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for text with tab enter should have 10 indentation", function () { - let fn = "text with tab enter"; - try { - let cursorPos2d = new vscode.Position(52, 34); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 10); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for text with tab enter should have 10 indentation", function () { + const fn = "text with tab enter"; + try { + const cursorPos2d = new vscode.Position(52, 34); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 10); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for after defun before fun name enter should have 7 indentation", function () { - let fn = "after defun before fun name enter"; - try { - let cursorPos2d = new vscode.Position(54, 7); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 7); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for after defun before fun name enter should have 7 indentation", function () { + const fn = "after defun before fun name enter"; + try { + const cursorPos2d = new vscode.Position(54, 7); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 7); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for after fun name before argment enter should have 7 indentation", function () { - let fn = "after fun name before argment enter"; - try { - let cursorPos2d = new vscode.Position(55, 11); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 7); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for after fun name before argment enter should have 7 indentation", function () { + const fn = "after fun name before argment enter"; + try { + const cursorPos2d = new vscode.Position(55, 11); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 7); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for after fun name missing argument enter should have 7 indentation", function () { - let fn = "after fun name missing argument enter"; - try { - let cursorPos2d = new vscode.Position(56, 11); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 7); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for after fun name missing argument enter should have 7 indentation", function () { + const fn = "after fun name missing argument enter"; + try { + const cursorPos2d = new vscode.Position(56, 11); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 7); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - test("Autoindent for inside cons enter should have 23 indentation", function () { - let fn = "inside cons enter"; - try { - let cursorPos2d = new vscode.Position(9, 31); - replaceDocWithEnter(indentTestFile, cursorPos2d); - let lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); - assert.isTrue(lineIndentSpace == 23); - } catch (err) { - assert.fail(`Autoindent test for ${fn} failed`); - } - }); + test("Autoindent for inside cons enter should have 23 indentation", function () { + const fn = "inside cons enter"; + try { + const cursorPos2d = new vscode.Position(9, 31); + replaceDocWithEnter(indentTestFile, cursorPos2d); + const lineIndentSpace = getIndent(indentTestDoc, cursorPos2d); + assert.isTrue(lineIndentSpace == 23); + } catch (err) { + assert.fail(`Autoindent test for ${fn} failed\n${err}`); + } + }); - function replaceDocWithEnter(filepath: string, cursorPos2d: vscode.Position) { - let doc = ReadonlyDocument.open(filepath); - let startPt = new vscode.Position(0, 0); - let selRange = new vscode.Selection(startPt, cursorPos2d); - //insert \n to cursor position - let newText = doc.getText().replace(doc.getText(selRange), doc.getText(selRange) + "\n"); - try { - fs.writeFileSync(newIndentTestFile, newText); - indentTestDoc = ReadonlyDocument.open(newIndentTestFile); - } catch (error) { - console.log(error); - } - } - function getIndent(doc: vscode.TextDocument, cursorPos2d: vscode.Position) { - try { - let containerElement = findContainers(doc, cursorPos2d); - let lineIndentSpace = getIndentation(doc, containerElement, cursorPos2d); - return lineIndentSpace.length; - } catch (error) { - console.log(error); - } - } + function replaceDocWithEnter(filepath: string, cursorPos2d: vscode.Position) { + const doc = ReadonlyDocument.open(filepath); + const startPt = new vscode.Position(0, 0); + const selRange = new vscode.Selection(startPt, cursorPos2d); + //insert \n to cursor position + const newText = doc.getText().replace(doc.getText(selRange), doc.getText(selRange) + "\n"); + try { + fs.writeFileSync(newIndentTestFile, newText); + indentTestDoc = ReadonlyDocument.open(newIndentTestFile); + } catch (error) { + console.log(error); + } + } + function getIndent(doc: vscode.TextDocument, cursorPos2d: vscode.Position) { + try { + const containerElement = findContainers(doc, cursorPos2d); + const lineIndentSpace = getIndentation(doc, containerElement, cursorPos2d); + return lineIndentSpace.length; + } catch (error) { + console.log(error); + } + } }); diff --git a/extension/src/test/suite/DocumentContainer.test.ts b/extension/src/test/suite/DocumentContainer.test.ts index 69c10eb9..8269d848 100644 --- a/extension/src/test/suite/DocumentContainer.test.ts +++ b/extension/src/test/suite/DocumentContainer.test.ts @@ -3,7 +3,7 @@ import { assert, expect } from 'chai'; import { LispParser } from '../../parsing/lispParser'; import { getDocumentContainer } from '../../parsing/containers'; -import { Sexpression} from '../../astObjects/sexpression'; +import { Sexpression } from '../../astObjects/sexpression'; import { ReadonlyDocument } from '../../project/readOnlyDocument'; import { SymbolServices } from '../../services/symbolServices'; import { LispContainer } from '../../astObjects/lispContainer'; @@ -16,16 +16,16 @@ const commentsFileTest = path.resolve(extRootPath, "./extension/src/test/SourceF const largeFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/unFormatted10.lsp"); -suite("Parsing: DocumentContainer Tests", function () { +suite("Parsing: DocumentContainer Tests", function () { suiteSetup(async () => { // this ensures that generating the ordered native key list isn't part of the performance tests SymbolServices.isNative('command'); }); - test("Original atomsForest vs DocumentContainer", function () { + test("Original atomsForest vs DocumentContainer", function () { try { - const doc = ReadonlyDocument.open(largeFileTest); + const doc = ReadonlyDocument.open(largeFileTest); const text = doc.fileContent; //debugger; @@ -40,11 +40,11 @@ suite("Parsing: DocumentContainer Tests", function () { const container = getDocumentContainer(text); const v2items = container.atoms.filter(x => x instanceof LispContainer); const v2Stop = Date.now(); - + //debugger; const v1Diff = v1Stop - v1Start; const v2Diff = v2Stop - v2Start; - + console.log(`\t\tOldParser Processing Time: ${v1Diff}ms`); console.log(`\t\tNewParser Processing Time: ${v2Diff}ms`); @@ -66,12 +66,12 @@ suite("Parsing: DocumentContainer Tests", function () { //expect(v2Diff).to.be.lessThan(v1Diff); } catch (err) { - assert.fail("Returned a different number of Expressions or the newer parser underperformed"); + assert.fail(`Returned a different number of Expressions or the newer parser underperformed\n${err}`); } }); - test("DocumentExpression equals asText() version", function () { + test("DocumentExpression equals asText() version", function () { try { const doc1 = ReadonlyDocument.open(symbolsFileTest); const doc2 = ReadonlyDocument.open(commentsFileTest); @@ -84,11 +84,11 @@ suite("Parsing: DocumentContainer Tests", function () { assert.equal(doc2.fileContent.trim(), sut.asText().trim()); } catch (err) { - assert.fail("Did not return the expected (mostly equal) text value when converted back"); + assert.fail(`Did not return the expected(mostly equal) text value when converted back\n${err}`); } }); - test("DocumentExpression SymbolMap Ids", function () { + test("DocumentExpression SymbolMap Ids", function () { try { const val = '(defun A (/ pt)\n\t(defun b (C) (+ C 1))\n\t(setq pt (getpoint))\n\t(command ".point" pt)\n\t)'; const sut = getDocumentContainer(val); @@ -96,13 +96,13 @@ suite("Parsing: DocumentContainer Tests", function () { assert.equal(sut.userSymbols.get('pt').length, 3); } catch (err) { - assert.fail("Did not contain the expected number of keys or indices"); + assert.fail(`Did not contain the expected number of keys or indices\n${err}`); } }); test("String Source: Test Unix EOLs", function () { - try { + try { const val = '(defun C:DoStuff (/ pt)\n\t(setq pt (getpoint))\n\t(command ".point" pt)\n\t)'; const sut = getDocumentContainer(val); assert.equal(sut.atoms.length, 1); @@ -110,12 +110,12 @@ suite("Parsing: DocumentContainer Tests", function () { assert.equal(sut.linefeed, '\n'); } catch (err) { - assert.fail("Incorrect parse quantity or EOL value"); + assert.fail(`Incorrect parse quantity or EOL value\n${err}`); } }); test("String Source: Test Windows EOLs", function () { - try { + try { const val = '(defun C:DoStuff (/ pt)\r\n\t(setq pt (getpoint))\r\n\t(command ".point" pt)\r\n\t)'; const sut = getDocumentContainer(val); assert.equal(sut.atoms.length, 1); @@ -123,10 +123,10 @@ suite("Parsing: DocumentContainer Tests", function () { assert.equal(sut.linefeed, '\r\n'); } catch (err) { - assert.fail("Incorrect parse quantity or EOL value"); + assert.fail(`Incorrect parse quantity or EOL value\n${err}`); } }); - + }); \ No newline at end of file diff --git a/extension/src/test/suite/Formatter.test.ts b/extension/src/test/suite/Formatter.test.ts index 1dd784fd..f0817e21 100644 --- a/extension/src/test/suite/Formatter.test.ts +++ b/extension/src/test/suite/Formatter.test.ts @@ -8,42 +8,42 @@ import { ImportMock } from "ts-mock-imports"; import { AutoLispExt } from "../../context"; import * as vscode from 'vscode'; -let assert: Chai.Assert = chai.assert; -let testDir = path.join(__dirname + "/../../../extension/src/test"); +const assert: Chai.Assert = chai.assert; +const testDir = path.join(__dirname + "/../../../extension/src/test"); const outputDir = path.join(testDir + "/OutputFile"); fs.mkdir(outputDir, { recursive: true }, (err) => { - if (err) { - return console.error(err); - } + if (err) { + return console.error(err); + } }); function getFileName(i: number) { - const source = path.join(testDir + "/SourceFile/unFormatted" + i + ".lsp"); - const output = path.join( - testDir + "/OutputFile/formatedOutputFile" + i + ".lsp" - ); - const baseline = path.join( - testDir + "/Baseline/formatedBasefile" + i + ".lsp" - ); - return [source, output, baseline]; + const source = path.join(testDir + "/SourceFile/unFormatted" + i + ".lsp"); + const output = path.join( + testDir + "/OutputFile/formatedOutputFile" + i + ".lsp" + ); + const baseline = path.join( + testDir + "/Baseline/formatedBasefile" + i + ".lsp" + ); + return [source, output, baseline]; } function comparefileSync( - i: number, - output: string, - fmt: string, - baseline: string + i: number, + output: string, + fmt: string, + baseline: string ) { - try { - fs.writeFileSync(output, fmt); - let baseString = fs.readFileSync(baseline, { encoding: "utf8", flag: "r" }); - //Trick to pass the test is to ignore the \r - fmt = fmt.replace(/(\r)/gm, ""); - baseString = baseString.replace(/(\r)/gm, ""); - assert.isTrue(fmt === baseString); - } catch (err) { - assert.fail(`Format Test Case ${i} failed!`); - } + try { + fs.writeFileSync(output, fmt); + let baseString = fs.readFileSync(baseline, { encoding: "utf8", flag: "r" }); + //Trick to pass the test is to ignore the \r + fmt = fmt.replace(/(\r)/gm, ""); + baseString = baseString.replace(/(\r)/gm, ""); + assert.isTrue(fmt === baseString); + } catch (err) { + assert.fail(`Format Test Case ${i} failed!\n${err}`); + } } // Notes: // Format test is a setting sensitive which depends on the format settings defined @@ -55,376 +55,376 @@ function comparefileSync( // LongListFormatStyle: 'Fill to margin' // Need to remove the \r to do the format output compare suite("Lisp Formatter mock Tests", function () { - let closeParenStyleStub; - let maximumLineCharsStub; - let longListFormatStyleStub; - let indentSpacesStub; - let internalLispFuncsStub; - let internalOperators; + let closeParenStyleStub; + let maximumLineCharsStub; + let longListFormatStyleStub; + let indentSpacesStub; + let internalLispFuncsStub; + let internalOperators; - suiteSetup(() => { - let keyFile = path.join( - __dirname + "/../../../extension/data/alllispkeys.txt" - ); - internalOperators = fs.readFileSync(keyFile).toString().split("\r\n"); - internalLispFuncsStub = ImportMock.mockOther( - AutoLispExt.Resources, - "internalLispFuncs", - internalOperators - ); - }); + suiteSetup(() => { + const keyFile = path.join( + __dirname + "/../../../extension/data/alllispkeys.txt" + ); + internalOperators = fs.readFileSync(keyFile).toString().split("\r\n"); + internalLispFuncsStub = ImportMock.mockOther( + AutoLispExt.Resources, + "internalLispFuncs", + internalOperators + ); + }); - setup(() => { - resetDefault(); - }); + setup(() => { + resetDefault(); + }); - suiteTeardown(() => { - internalLispFuncsStub.restore(); - closeParenStyleStub.restore(); - maximumLineCharsStub.restore(); - longListFormatStyleStub.restore(); - indentSpacesStub.restore(); - }); + suiteTeardown(() => { + internalLispFuncsStub.restore(); + closeParenStyleStub.restore(); + maximumLineCharsStub.restore(); + longListFormatStyleStub.restore(); + indentSpacesStub.restore(); + }); - test("Lisp Formatter Test case 1", function () { - //Basic test case - let i = 1; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 1", function () { + //Basic test case + const i = 1; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 2", function () { - // Test setq in new lines - let i = 2; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 2", function () { + // Test setq in new lines + const i = 2; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 3", function () { - // Test multiple functions format - let i = 3; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 3", function () { + // Test multiple functions format + const i = 3; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 4", function () { - // The empty line should not be removed after format - let i = 4; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 4", function () { + // The empty line should not be removed after format + const i = 4; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 5", async function () { - // Test the Max line chars setting - // Test the bug that it will be a space between the last two brackets ) ) - // MaxLineChars: 65 - let i = 5; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - setMaxLineChars(65); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 5", async function () { + // Test the Max line chars setting + // Test the bug that it will be a space between the last two brackets ) ) + // MaxLineChars: 65 + const i = 5; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setMaxLineChars(65); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 6", function () { - // Test the indent, the default indent should be 2 - let i = 6; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 6", function () { + // Test the indent, the default indent should be 2 + const i = 6; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 7", async function () { - // Test the single column setting - let i = 7; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - // set as wide single column format - setLongListFormat("Single Column"); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 7", async function () { + // Test the single column setting + const i = 7; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + // set as wide single column format + setLongListFormat("Single Column"); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 8", async function () { - // Test another single column setting - let i = 8; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - // set as wide single column format - setLongListFormat("Single Column"); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 8", async function () { + // Test another single column setting + const i = 8; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + // set as wide single column format + setLongListFormat("Single Column"); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 9", function () { - // Test list format which comes from an old bug - // This is a bug needs to be fixed in lisp extension - let i = 9; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 9", function () { + // Test list format which comes from an old bug + // This is a bug needs to be fixed in lisp extension + const i = 9; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 10", function () { - // Test long list and big file - chinaMap.lsp - // This test will take long time - let i = 10; - this.timeout(20000); - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 10", function () { + // Test long list and big file - chinaMap.lsp + // This test will take long time + const i = 10; + this.timeout(20000); + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 11", async function () { - // Test indent space setting - let i = 11; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setIndentSpaces(4); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 11", async function () { + // Test indent space setting + const i = 11; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setIndentSpaces(4); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 12", async function () { - // Test Closed Parenthesis In Same Line setting - let i = 12; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setClosedParenInSameLine("same line"); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 12", async function () { + // Test Closed Parenthesis In Same Line setting + const i = 12; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setClosedParenInSameLine("same line"); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 13", async function () { - // Test Mixed settings - // MaxLineChars: 65 - // NarrowStyleIndent: 4 - // CloseParenthesisStyle: 'Same line' - // LongListFormatStyle: 'Single line' - let i = 13; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setClosedParenInSameLine("same line"); - setIndentSpaces(4); - setMaxLineChars(65); - setLongListFormat("single column"); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 13", async function () { + // Test Mixed settings + // MaxLineChars: 65 + // NarrowStyleIndent: 4 + // CloseParenthesisStyle: 'Same line' + // LongListFormatStyle: 'Single line' + const i = 13; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setClosedParenInSameLine("same line"); + setIndentSpaces(4); + setMaxLineChars(65); + setLongListFormat("single column"); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 14", async function () { - // Test the comments after the brackets ") ;progn" - // MaxLineChars: 80 - // NarrowStyleIndent: 4 - let i = 14; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setIndentSpaces(4); - setMaxLineChars(80); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 14", async function () { + // Test the comments after the brackets ") ;progn" + // MaxLineChars: 80 + // NarrowStyleIndent: 4 + const i = 14; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setIndentSpaces(4); + setMaxLineChars(80); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 15", async function () { - // Test unicode - // MaxLineChars: 60 - // NarrowStyleIndent: 2 - let i = 15; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setIndentSpaces(2); - setMaxLineChars(60); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 15", async function () { + // Test unicode + // MaxLineChars: 60 + // NarrowStyleIndent: 2 + const i = 15; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setIndentSpaces(2); + setMaxLineChars(60); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 16", async function () { - // Test invalid setting - // MaxLineChars: 30 - // NarrowStyleIndent: 8 - let i = 16; - try { - const [source, output, baseline] = getFileName(i); - let doc = ReadonlyDocument.open(source); - setIndentSpaces(8); - setMaxLineChars(30); - let fmt = LispFormatter.format(doc, null); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 16", async function () { + // Test invalid setting + // MaxLineChars: 30 + // NarrowStyleIndent: 8 + const i = 16; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + setIndentSpaces(8); + setMaxLineChars(30); + const fmt = LispFormatter.format(doc, null); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 17", function () { - //Test format selection - let i = 17; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(4, 2); - let active = new vscode.Position(20, 4); - let selectedRange = new vscode.Selection(anchor, active); - let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange), fmt); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 17", function () { + //Test format selection + const i = 17; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const anchor = new vscode.Position(4, 2); + const active = new vscode.Position(20, 4); + const selectedRange = new vscode.Selection(anchor, active); + let fmt = LispFormatter.format(doc, selectedRange); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 18", function () { - //Test format selection - inverse selection - let i = 18; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(11, 12); - let active = new vscode.Position(4, 4); - let selectedRange = new vscode.Selection(anchor, active); - let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange), fmt); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 18", function () { + //Test format selection - inverse selection + const i = 18; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const anchor = new vscode.Position(11, 12); + const active = new vscode.Position(4, 4); + const selectedRange = new vscode.Selection(anchor, active); + let fmt = LispFormatter.format(doc, selectedRange); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - test("Lisp Formatter Test case 19", function () { - //Test format selection - plus some format setting - let i = 19; - try { - const [source, output, baseline] = getFileName(i); - const doc = ReadonlyDocument.open(source); - let anchor = new vscode.Position(7, 6); - let active = new vscode.Position(16, 2); - let selectedRange = new vscode.Selection(anchor, active); - setClosedParenInSameLine("same line"); - setIndentSpaces(4); - setMaxLineChars(65); - setLongListFormat("single column"); - let fmt = LispFormatter.format(doc, selectedRange); - fmt = doc.getText().replace(doc.getText(selectedRange), fmt); - comparefileSync(i, output, fmt, baseline); - } catch (err) { - assert.fail(`The lisp format test case ${i} failed`); - } - }); + test("Lisp Formatter Test case 19", function () { + //Test format selection - plus some format setting + const i = 19; + try { + const [source, output, baseline] = getFileName(i); + const doc = ReadonlyDocument.open(source); + const anchor = new vscode.Position(7, 6); + const active = new vscode.Position(16, 2); + const selectedRange = new vscode.Selection(anchor, active); + setClosedParenInSameLine("same line"); + setIndentSpaces(4); + setMaxLineChars(65); + setLongListFormat("single column"); + let fmt = LispFormatter.format(doc, selectedRange); + fmt = doc.getText().replace(doc.getText(selectedRange), fmt); + comparefileSync(i, output, fmt, baseline); + } catch (err) { + assert.fail(`The lisp format test case ${i} failed\n${err}`); + } + }); - function setIndentSpaces(indent: number) { - if (indentSpacesStub) { - indentSpacesStub.restore(); - } - indentSpacesStub = ImportMock.mockFunction( - fmtConfig, - "indentSpaces", - indent - ); - } - function setClosedParenInSameLine(closeParenStyle: string) { - if (closeParenStyleStub) { - closeParenStyleStub.restore(); - } - closeParenStyleStub = ImportMock.mockFunction( - fmtConfig, - "closeParenStyle", - closeParenStyle - ); - } - function setMaxLineChars(maxchar: number) { - if (maximumLineCharsStub) { - maximumLineCharsStub.restore(); - } - maximumLineCharsStub = ImportMock.mockFunction( - fmtConfig, - "maximumLineChars", - maxchar - ); - } - function setLongListFormat(LongListFormat: string) { - if (longListFormatStyleStub) { - longListFormatStyleStub.restore(); - } - longListFormatStyleStub = ImportMock.mockFunction( - fmtConfig, - "longListFormatStyle", - LongListFormat - ); - } - function resetDefault() { - setClosedParenInSameLine('New line with outer indentation'); - setMaxLineChars(85); - setLongListFormat('Fill to margin'); - setIndentSpaces(2); - } + function setIndentSpaces(indent: number) { + if (indentSpacesStub) { + indentSpacesStub.restore(); + } + indentSpacesStub = ImportMock.mockFunction( + fmtConfig, + "indentSpaces", + indent + ); + } + function setClosedParenInSameLine(closeParenStyle: string) { + if (closeParenStyleStub) { + closeParenStyleStub.restore(); + } + closeParenStyleStub = ImportMock.mockFunction( + fmtConfig, + "closeParenStyle", + closeParenStyle + ); + } + function setMaxLineChars(maxchar: number) { + if (maximumLineCharsStub) { + maximumLineCharsStub.restore(); + } + maximumLineCharsStub = ImportMock.mockFunction( + fmtConfig, + "maximumLineChars", + maxchar + ); + } + function setLongListFormat(LongListFormat: string) { + if (longListFormatStyleStub) { + longListFormatStyleStub.restore(); + } + longListFormatStyleStub = ImportMock.mockFunction( + fmtConfig, + "longListFormatStyle", + LongListFormat + ); + } + function resetDefault() { + setClosedParenInSameLine('New line with outer indentation'); + setMaxLineChars(85); + setLongListFormat('Fill to margin'); + setIndentSpaces(2); + } }); diff --git a/extension/src/test/suite/LispAtom.test.ts b/extension/src/test/suite/LispAtom.test.ts index 7d1448e4..62575a91 100644 --- a/extension/src/test/suite/LispAtom.test.ts +++ b/extension/src/test/suite/LispAtom.test.ts @@ -8,13 +8,13 @@ const matom = new LispAtom(83, 8, ';|this is a\r\n |multiline test\r\n const lparen = new LispAtom(4, 6, '('); const rparen = new LispAtom(4, 6, ')'); -suite("LispAtom Tests", function () { +suite("LispAtom Tests", function () { test("LispAtom.isLispFragment() Test", function () { try { chai.assert.isTrue(satom.isLispFragment()); } catch (err) { - chai.assert.fail("This was not recocognized as a valid ILispFragment"); + chai.assert.fail(`This was not recocognized as a valid ILispFragment ${err}`); } }); @@ -24,7 +24,7 @@ suite("LispAtom Tests", function () { chai.assert.isTrue(satom.equal(satom)); } catch (err) { - chai.assert.fail("The same atom was used for both references, this should be true"); + chai.assert.fail(`The same atom was used for both references, this should be true ${err}`); } }); test("NOT LispAtom.equal() Test", function () { @@ -32,62 +32,62 @@ suite("LispAtom Tests", function () { chai.assert.isNotTrue(lparen.equal(rparen)); } catch (err) { - chai.assert.fail("These 2 atoms were nearly identical, but were different characters"); + chai.assert.fail(`These 2 atoms were nearly identical, but were different characters ${err}`); } }); test("LispAtom.getRange() Single-Line Test", function () { const r = satom.getRange(); - let start, end; + let start, end; try { start = r.start.line === 32 && r.start.character === 5; end = r.end.line === 32 && r.end.character === 23; chai.assert.isTrue(start && end); } catch (err) { - chai.assert.fail(`The start test was ${start} and the end test was ${end}`); + chai.assert.fail(`The start test was ${start} and the end test was ${end}\n${err}`); } }); test("LispAtom.getRange() Multi-Line Test", function () { const r = matom.getRange(); - let start, end; + let start, end; try { start = r.start.line === 83 && r.start.character === 8; end = r.end.line === 85 && r.end.character === 11; chai.assert.isTrue(start && end); } catch (err) { - chai.assert.fail(`The start test was ${start} and the end test was ${end}`); + chai.assert.fail(`The start test was ${start} and the end test was ${end}\n${err}`); } }); - test("LispAtom.contains() Test", function () { + test("LispAtom.contains() Test", function () { const fail = new Position(83, 4); const start = new Position(83, 8); const middle = new Position(84, 3); const end = new Position(85, 11); - try { + try { chai.assert.isTrue(matom.contains(start)); chai.assert.isTrue(matom.contains(middle)); chai.assert.isTrue(matom.contains(end)); chai.assert.isNotTrue(matom.contains(fail)); } catch (err) { - chai.assert.fail('At least 1 of 4 Positional tests failed the contains test'); + chai.assert.fail(`At least 1 of 4 Positional tests failed the contains test ${err}`); } }); test("LispAtom.isComment() Test", function () { try { - chai.assert.isTrue(catom.isComment()); - chai.assert.isTrue(matom.isComment()); + chai.assert.isTrue(catom.isComment()); + chai.assert.isTrue(matom.isComment()); chai.assert.isNotTrue(satom.isComment()); } catch (err) { - chai.assert.fail('The test for IsComment() was checked both directions and one failed'); + chai.assert.fail(`The test for IsComment() was checked both directions and one failed ${err}`); } }); test("LispAtom.isComment() & isLineComment() Test", function () { @@ -97,7 +97,7 @@ suite("LispAtom Tests", function () { chai.assert.isNotTrue(satom.isLineComment()); } catch (err) { - chai.assert.fail('The test for isLineComment() was checked both directions and one failed'); + chai.assert.fail(`The test for isLineComment() was checked both directions and one failed ${err}`); } }); @@ -108,7 +108,7 @@ suite("LispAtom Tests", function () { chai.assert.isNotTrue(rparen.isLeftParen()); } catch (err) { - chai.assert.fail('The test for isLeftParen() was checked both directions and one failed'); + chai.assert.fail(`The test for isLeftParen() was checked both directions and one failed ${err}`); } }); test("LispAtom.IsRightParen() Test", function () { @@ -117,7 +117,7 @@ suite("LispAtom Tests", function () { chai.assert.isNotTrue(lparen.isRightParen()); } catch (err) { - chai.assert.fail('The test for isRightParen() was checked both directions and one failed'); + chai.assert.fail(`The test for isRightParen() was checked both directions and one failed ${err}`); } }); @@ -128,10 +128,10 @@ suite("LispAtom Tests", function () { chai.assert.equal(lparen.length(), 1); } catch (err) { - chai.assert.fail('The test for length() did not return the expected symbol string length'); + chai.assert.fail(`The test for length() did not return the expected symbol string length ${err}`); } }); - + test("LispAtom.symbLine() Test", function () { try { @@ -140,9 +140,9 @@ suite("LispAtom Tests", function () { chai.assert.equal(matom.symbLine(false), 83); } catch (err) { - chai.assert.fail('The test for symbLine() did not return the expected line numbers'); + chai.assert.fail(`The test for symbLine() did not return the expected line numbers ${err}`); } }); - + }); diff --git a/extension/src/test/suite/LispContainer.test.ts b/extension/src/test/suite/LispContainer.test.ts index ff648ec8..ccaea769 100644 --- a/extension/src/test/suite/LispContainer.test.ts +++ b/extension/src/test/suite/LispContainer.test.ts @@ -11,10 +11,10 @@ suite("LispContainer Tests", function () { let roDoc: ReadonlyDocument; let frags: Array; - - let pos1: Position = new Position(98, 100); // based on line: " downloadPdfs (cadr (NS:ACAD:ListBox "Select PDFs to Download" "Download Drawings" (acad_strlsort (mapcar 'car contractDrawings)) t)))" - let pos2: Position = new Position(100, 100); // based on line: " (setq downloadPath (caadr (NS:ACAD:DirPicker "Select Download Path" "Download files" GV:ProjPath)))"" - + + const pos1: Position = new Position(98, 100); // based on line: " downloadPdfs (cadr (NS:ACAD:ListBox "Select PDFs to Download" "Download Drawings" (acad_strlsort (mapcar 'car contractDrawings)) t)))" + const pos2: Position = new Position(100, 100); // based on line: " (setq downloadPath (caadr (NS:ACAD:DirPicker "Select Download Path" "Download files" GV:ProjPath)))"" + let container: LispContainer; let defunRef: LispContainer; let defunAlt: LispContainer; @@ -37,12 +37,12 @@ suite("LispContainer Tests", function () { parent1 = container.getParentOfExpression(exp1); parent2 = container.getParentOfExpression(exp2); setq1 = container.atoms[2].body; - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources ${err}`); } }); - + test("LispContainer.findChildren(Defun & Foreach) on whole document", function () { @@ -52,7 +52,7 @@ suite("LispContainer Tests", function () { assert.equal(items.length, 13); } catch (err) { - assert.fail("Invalid quantity, has the LSP changed?"); + assert.fail(`Invalid quantity, has the LSP changed ? ${err}`); } }); @@ -64,7 +64,7 @@ suite("LispContainer Tests", function () { assert.isTrue(defunAlt.equal(defunRef)); } catch (err) { - assert.fail("The Container extracted using findChildren() did not match the expected inline Container"); + assert.fail(`The Container extracted using findChildren() did not match the expected inline Container ${err}`); } }); @@ -76,7 +76,7 @@ suite("LispContainer Tests", function () { assert.equal(defunRef.size(), 22); } catch (err) { - assert.fail('The test for size() did not return the expected number of ILispFragments'); + assert.fail(`The test for size() did not return the expected number of ILispFragments ${err}`); } }); @@ -90,7 +90,7 @@ suite("LispContainer Tests", function () { assert.equal(defunLast.length(), 392); } catch (err) { - assert.fail('The test for length() did not return the expected number of internal ILispFragments'); + assert.fail(`The test for length() did not return the expected number of internal ILispFragments ${err}`); } }); @@ -103,7 +103,7 @@ suite("LispContainer Tests", function () { assert.equal(defunRef.symbLine(false), 35); } catch (err) { - assert.fail('The test for symbLine() did not return the expected line numbers'); + assert.fail(`The test for symbLine() did not return the expected line numbers ${err}`); } }); @@ -112,13 +112,13 @@ suite("LispContainer Tests", function () { test("LispContainer.getRange()", function () { try { - let txt = roDoc.getText(defunRef.getRange()); + let txt = roDoc.getText(defunRef.getRange()); assert.equal(txt.length, 6033); txt = roDoc.getText(defunRef.atoms[3].getRange()); assert.equal(txt.length, 139); } catch (err) { - assert.fail("The text returned using the getRange() did not match the expected length"); + assert.fail(`The text returned using the getRange() did not match the expected length ${err}`); } }); @@ -131,7 +131,7 @@ suite("LispContainer Tests", function () { assert.isTrue(defunRef.contains(pos1)); } catch (err) { - assert.fail("A Position known to exist within the desired Defun LispContainer failed containment check"); + assert.fail(`A Position known to exist within the desired Defun LispContainer failed containment check ${err}`); } }); @@ -142,12 +142,12 @@ suite("LispContainer Tests", function () { try { assert.equal(defunRef.getAtomFromPos(pos2).symbol, 'GV:ProjPath'); assert.equal(defunRef.getAtomFromPos(pos1).symbol, 'acad_strlsort'); - assert.equal(container.getAtomFromPos(new Position(0,0)).symbol, '; random sample file'); - assert.equal(container.getAtomFromPos(new Position(146,5)), null); - assert.equal(container.getAtomFromPos(new Position(999,5)), null); + assert.equal(container.getAtomFromPos(new Position(0, 0)).symbol, '; random sample file'); + assert.equal(container.getAtomFromPos(new Position(146, 5)), null); + assert.equal(container.getAtomFromPos(new Position(999, 5)), null); } catch (err) { - assert.fail("A known LispAtom value failed to be reported from a known Position"); + assert.fail(`A known LispAtom value failed to be reported from a known Position ${err}`); } }); @@ -156,14 +156,14 @@ suite("LispContainer Tests", function () { test("LispContainer.getExpressionFromPos()", function () { try { - + assert.equal(exp1.length(), 43); assert.equal(exp1.atoms[1].symbol, 'acad_strlsort'); assert.equal(exp2.length(), 68); assert.equal(exp2.atoms[1].symbol, 'NS:ACAD:DirPicker'); } catch (err) { - assert.fail("At least one known LispFragment failed to be located at a known Position"); + assert.fail(`At least one known LispFragment failed to be located at a known Position ${err}`); } }); @@ -178,7 +178,7 @@ suite("LispContainer Tests", function () { assert.equal(parent2.atoms[1].symbol, 'caadr'); } catch (err) { - assert.fail("At least one known LispContainer failed to be located at a known Position"); + assert.fail(`At least one known LispContainer failed to be located at a known Position ${err}`); } }); @@ -190,7 +190,7 @@ suite("LispContainer Tests", function () { let itemNext = setq1.nextKeyIndex(0, false); assert.equal(itemNext, 1); itemNext = setq1.nextKeyIndex(itemNext, false); - assert.equal(itemNext, 2); + assert.equal(itemNext, 2); itemNext = setq1.nextKeyIndex(itemNext, false); assert.equal(itemNext, 5); itemNext = setq1.nextKeyIndex(itemNext, false); @@ -203,7 +203,7 @@ suite("LispContainer Tests", function () { assert.equal(itemNext, -1); } catch (err) { - assert.fail("Walking the first global SETQ did not produces the expected indices"); + assert.fail(`Walking the first global SETQ did not produces the expected indices ${err}`); } }); @@ -227,7 +227,7 @@ suite("LispContainer Tests", function () { assert.equal(itemNext, -1); } catch (err) { - assert.fail("Walking the first global SETQ did not produces the expected indices"); + assert.fail(`Walking the first global SETQ did not produces the expected indices ${err}`); } }); @@ -253,7 +253,7 @@ suite("LispContainer Tests", function () { assert.isNull(setq1.getNthKeyAtom(7)); } catch (err) { - assert.fail("Walking the first global SETQ did not produces the expected values"); + assert.fail(`Walking the first global SETQ did not produces the expected values ${err}`); } }); @@ -266,7 +266,7 @@ suite("LispContainer Tests", function () { assert.equal(frags.length, 8); } catch (err) { - assert.fail("The fragment quantity from the LispContainer were not as expected"); + assert.fail(`The fragment quantity from the LispContainer were not as expected ${err}`); } }); @@ -280,7 +280,7 @@ suite("LispContainer Tests", function () { expect(sut.length).to.equal(data.flatIndex + 1); } catch (err) { - assert.fail("The flatten function did not produce the expected quantity of LispAtoms"); + assert.fail(`The flatten function did not produce the expected quantity of LispAtoms ${err}`); } }); @@ -294,7 +294,7 @@ suite("LispContainer Tests", function () { expect(sut.hasGlobalFlag).to.equal(true); } catch (err) { - assert.fail("the 'userSymbols' collection was missing a known global flag annotation"); + assert.fail(`the 'userSymbols' collection was missing a known global flag annotation ${err}`); } }); @@ -312,7 +312,7 @@ suite("LispContainer Tests", function () { expect(container.atoms[1].isLispFragment()).to.equal(true); } catch (err) { - assert.fail("One of the common atom symbol value tests failed to recognize a scenario"); + assert.fail(`One of the common atom symbol value tests failed to recognize a scenario ${err}`); } }); @@ -322,16 +322,16 @@ suite("LispContainer Tests", function () { test("LispContainer.isPrimitive()", function () { try { // sut is used against regex instead of function, but accomplishes the same level of possible - const sut = ['\'', '.', '(', ')', - '"Single Line"', '"Multi\r\nLine"', - '; line comment', ';| multi-line\r\ncomment |;', - 'T', 't', 'nil', 'NiL', 'NIL', - '123', '-123', '0.23', '-0.23', '3e-10', '-3e+10' - ]; + const sut = ['\'', '.', '(', ')', + '"Single Line"', '"Multi\r\nLine"', + '; line comment', ';| multi-line\r\ncomment |;', + 'T', 't', 'nil', 'NiL', 'NIL', + '123', '-123', '0.23', '-0.23', '3e-10', '-3e+10' + ]; sut.forEach(value => { expect(primitiveRegex.test(value)).to.equal(true); }); - + // continue test with some known atoms const data = container.flatten(); expect(data[0].isPrimitive()).to.equal(true); @@ -343,7 +343,7 @@ suite("LispContainer Tests", function () { expect(container.atoms[1].isPrimitive()).to.equal(false); } catch (err) { - assert.fail("One of the primitive symbol value tests failed to recognize a known scenario"); + assert.fail(`One of the primitive symbol value tests failed to recognize a known scenario ${err}`); } }); @@ -360,7 +360,7 @@ suite("LispContainer Tests", function () { assert.equal(defunRef.atoms.length, count + frags.length); } catch (err) { - assert.fail("The count of ILispFragments did not match the expected quantity"); + assert.fail(`The count of ILispFragments did not match the expected quantity ${err}`); } }); diff --git a/extension/src/test/suite/ReadonlyDocument.test.ts b/extension/src/test/suite/ReadonlyDocument.test.ts index 62bf9964..88032157 100644 --- a/extension/src/test/suite/ReadonlyDocument.test.ts +++ b/extension/src/test/suite/ReadonlyDocument.test.ts @@ -1,44 +1,43 @@ import * as path from 'path'; import { TextDocument } from 'vscode'; import { ReadonlyDocument } from '../../project/readOnlyDocument'; - -var assert = require('chai').assert; -let prefixpath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; -let lispFileTest = path.join(prefixpath + "pdfMarkups.lsp"); +import { assert } from 'chai'; +const prefixpath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; +const lispFileTest = path.join(prefixpath + "pdfMarkups.lsp"); suite("ReadonlyDocument Tests", function () { let doc: ReadonlyDocument; - test("Creating with: open()", function () { + test("Creating with: open()", function () { try { - doc = ReadonlyDocument.open(lispFileTest); + doc = ReadonlyDocument.open(lispFileTest); assert.equal(doc.languageId, 'autolisp'); } catch (err) { - assert.fail("Could not create document"); + assert.fail(`Could not create document ${err}`); } }); test("Creating with: getMemoryDocument()", function () { - try { - doc = ReadonlyDocument.getMemoryDocument(doc as TextDocument); + try { + doc = ReadonlyDocument.getMemoryDocument(doc as TextDocument); assert.equal(doc.languageId, 'autolisp'); } catch (err) { - assert.fail("Could not create document"); + assert.fail(`Could not create document ${err}`); } }); test("Creating with: createMemoryDocument()", function () { - try { - doc = ReadonlyDocument.createMemoryDocument(doc.getText(), 'autolisp'); - assert.notEqual(doc.lines, 0); + try { + doc = ReadonlyDocument.createMemoryDocument(doc.getText(), 'autolisp'); + assert.notEqual(doc.lines.length, 0); doc.fileName = lispFileTest; } catch (err) { - assert.fail("Could not create document"); + assert.fail(`Could not create document ${err}`); } }); @@ -48,7 +47,7 @@ suite("ReadonlyDocument Tests", function () { assert.notEqual(doc.documentContainer.atoms.length, 0); } catch (err) { - assert.fail("Could not get atomsForest value"); + assert.fail(`Could not get atomsForest value ${err}`); } }); }); diff --git a/extension/src/test/suite/astObjects.DclAtom.test.ts b/extension/src/test/suite/astObjects.DclAtom.test.ts index 07b7d1be..b20bc149 100644 --- a/extension/src/test/suite/astObjects.DclAtom.test.ts +++ b/extension/src/test/suite/astObjects.DclAtom.test.ts @@ -1,7 +1,7 @@ import { assert, expect } from 'chai'; import { DclAtom } from '../../astObjects/dclAtom'; -suite("AST Objects: DCL Atom", function () { +suite("AST Objects: DCL Atom", function () { const mock0 = new DclAtom(19, 0, '/*\r\nHappy\r\n*/', 0); const mock1 = new DclAtom(20, 21, 'new', 2022); @@ -13,7 +13,7 @@ suite("AST Objects: DCL Atom", function () { // Note: DclTile tests indirectly, but properly cover range, contains & getAtomFromPosition testing - test("DclAtom.isComment Property", function () { + test("DclAtom.isComment Property", function () { try { expect(mock0.isComment).to.equal(true); expect(mock1.isComment).to.equal(false); @@ -22,11 +22,11 @@ suite("AST Objects: DCL Atom", function () { expect(mock4.isComment).to.equal(true); } catch (err) { - assert.fail("Mocks configured to be true or false returned opposite value"); + assert.fail(`Mocks configured to be true or false returned opposite value ${err}`); } }); - test("DclAtom.isBlockComment Property", function () { + test("DclAtom.isBlockComment Property", function () { try { expect(mock0.isBlockComment).to.equal(true); expect(mock1.isBlockComment).to.equal(false); @@ -35,11 +35,11 @@ suite("AST Objects: DCL Atom", function () { expect(mock4.isBlockComment).to.equal(false); } catch (err) { - assert.fail("Mocks configured to be true or false returned opposite value"); + assert.fail(`Mocks configured to be true or false returned opposite value ${err}`); } }); - test("DclAtom.isString Property", function () { + test("DclAtom.isString Property", function () { try { expect(mock0.isString).to.equal(false); expect(mock1.isString).to.equal(false); @@ -48,11 +48,11 @@ suite("AST Objects: DCL Atom", function () { expect(mock4.isString).to.equal(false); } catch (err) { - assert.fail("Mocks configured to be true or false returned opposite value"); + assert.fail(`Mocks configured to be true or false returned opposite value ${err}`); } }); - test("DclAtom.equal()", function () { + test("DclAtom.equal()", function () { try { expect(mock0.equal(mock1)).to.equal(false); expect(mock1.equal(mock2)).to.equal(false); @@ -60,7 +60,7 @@ suite("AST Objects: DCL Atom", function () { expect(mock3.equal(mock4)).to.equal(true); } catch (err) { - assert.fail("Mocks configured to be true or false returned opposite value"); + assert.fail(`Mocks configured to be true or false returned opposite value ${err}`); } }); diff --git a/extension/src/test/suite/astObjects.DclAttribute.test.ts b/extension/src/test/suite/astObjects.DclAttribute.test.ts index 11262f25..61e7422b 100644 --- a/extension/src/test/suite/astObjects.DclAttribute.test.ts +++ b/extension/src/test/suite/astObjects.DclAttribute.test.ts @@ -6,13 +6,13 @@ import { Position } from 'vscode'; import { DclAttribute } from '../../astObjects/dclAttribute'; import { DclAtom } from '../../astObjects/dclAtom'; -suite("AST Objects: DCL Attribute", function () { +suite("AST Objects: DCL Attribute", function () { - let doc: ReadonlyDocument; + let doc: ReadonlyDocument; suiteSetup(async () => { const extRootPath = path.resolve(__dirname, '../../../'); const dclPath = path.resolve(extRootPath, "./extension/src/test/SourceFile/renaming/dialog.dcl"); - doc = ReadonlyDocument.open(dclPath); + doc = ReadonlyDocument.open(dclPath); }); @@ -24,7 +24,7 @@ suite("AST Objects: DCL Attribute", function () { try { const sut = (getLine: number, getColumn: number): IDclContainer => { return doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), false); - }; + }; const att1 = sut(7, 7); const att2 = sut(21, 21); const att3 = new DclAttribute([]); @@ -38,16 +38,16 @@ suite("AST Objects: DCL Attribute", function () { expect(att3.column).to.equal(-1); } catch (err) { - assert.fail("The expected container and/or value was not return by the test method"); + assert.fail(`The expected container and/or value was not return by the test method ${err}`); } }); - test("DclAttribute.flatten() Quantities", function () { + test("DclAttribute.flatten() Quantities", function () { try { const getAttFromPos = (getLine: number, getColumn: number): IDclContainer => { return doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), false); - }; - + }; + const sut1 = getAttFromPos(44, 30).flatten(); expect(sut1.length).to.equal(4); expect(getAttFromPos(44, 56).flatten(sut1).length).to.equal(8); @@ -57,7 +57,7 @@ suite("AST Objects: DCL Attribute", function () { expect(getAttFromPos(47, 8).flatten(sut2).length).to.equal(4); } catch (err) { - assert.fail("The known attribute returned the wrong quantity of atoms"); + assert.fail(`The known attribute returned the wrong quantity of atoms ${err}`); } }); @@ -66,7 +66,7 @@ suite("AST Objects: DCL Attribute", function () { try { const sut = (getLine: number, getColumn: number): IDclContainer => { return doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), false); - }; + }; const realAtt = sut(18, 30); let realIndex = realAtt.firstAtom.flatIndex; const mockAtt = new DclAttribute([ @@ -77,11 +77,12 @@ suite("AST Objects: DCL Attribute", function () { ]); expect(realAtt.equal(mockAtt)).to.equal(true); + /*Any type is required for test to function*/ //eslint-disable-next-line (mockAtt.atoms[0] as any)['symbol'] = 'Width'; expect(realAtt.equal(mockAtt)).to.equal(false); } catch (err) { - assert.fail("The mock failed to equal or continued to equal the known attribute before or after alterations"); + assert.fail(`The mock failed to equal or continued to equal the known attribute before or after alterations ${err}`); } }); @@ -96,7 +97,7 @@ suite("AST Objects: DCL Attribute", function () { } att = att.asAttribute.getParentFrom(pos); return att === null ? false : att.line === expectLine && att.column === expectColumn; - }; + }; expect(sut(4, 0, 0, 0)).to.equal(false); // reject root block comment expect(sut(3, 22, 0, 0)).to.equal(false); // reject root comment expect(sut(31, 16, 5, 0)).to.equal(false); // reject tile atom @@ -107,7 +108,7 @@ suite("AST Objects: DCL Attribute", function () { expect(sut(38, 30, 38, 8)).to.equal(true); // accept attribute atom } catch (err) { - assert.fail("A known atom position did not return the expected parent position"); + assert.fail(`A known atom position did not return the expected parent position ${err}`); } }); @@ -121,11 +122,11 @@ suite("AST Objects: DCL Attribute", function () { expect(new DclAttribute([]).firstNonComment).to.equal(null); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); - + test("DclAttribute Positional Properties", function () { try { const sut1 = doc.documentDclContainer.getParentFrom(new Position(44, 30), false).asAttribute; @@ -140,7 +141,7 @@ suite("AST Objects: DCL Attribute", function () { expect(sut2.lastAtom.symbol).to.equal(';'); } catch (err) { - assert.fail("The expected container and/or value was not returned"); + assert.fail(`The expected container and/or value was not returned ${err}`); } }); @@ -148,8 +149,9 @@ suite("AST Objects: DCL Attribute", function () { test("DclAttribute.isWellFormed Property", function () { try { const mod = (item: IDclContainer, idx: number, value: string): void => { + /*Any type is required for test to function*/ //eslint-disable-next-line (item.atoms[idx] as any).symbol = value; - }; + }; const mock = new DclAttribute([ new DclAtom(18, 27, 'width', 21), new DclAtom(18, 33, '=', 22), @@ -171,15 +173,15 @@ suite("AST Objects: DCL Attribute", function () { expect(mock.isWellFormed).to.equal(false); // width ; mock.atoms.pop(); expect(mock.isWellFormed).to.equal(false); // width - + } catch (err) { - assert.fail("At least one of the tests certifying the Attribute did not perform as expected"); + assert.fail(`At least one of the tests certifying the Attribute did not perform as expected ${err}`); } }); - - + + }); diff --git a/extension/src/test/suite/astObjects.DclTile.test.ts b/extension/src/test/suite/astObjects.DclTile.test.ts index 42b24b1c..cbda0d95 100644 --- a/extension/src/test/suite/astObjects.DclTile.test.ts +++ b/extension/src/test/suite/astObjects.DclTile.test.ts @@ -7,20 +7,20 @@ import { Position } from 'vscode'; import { DclAttribute } from '../../astObjects/dclAttribute'; import { DclAtom } from '../../astObjects/dclAtom'; -suite("AST Objects: DCL Tile", function () { +suite("AST Objects: DCL Tile", function () { - let doc: ReadonlyDocument; + let doc: ReadonlyDocument; suiteSetup(async () => { const extRootPath = path.resolve(__dirname, '../../../'); const dclPath = path.resolve(extRootPath, "./extension/src/test/SourceFile/renaming/dialog.dcl"); - doc = ReadonlyDocument.open(dclPath); + doc = ReadonlyDocument.open(dclPath); }); // Note: these tests indirectly, but also properly cover range, contains, length, firstAtom & lastAtom - test("DclTile.flatten() Quantities", function () { + test("DclTile.flatten() Quantities", function () { try { const sut = doc.documentDclContainer; expect(sut.atoms[2].asTile.flatten().length).to.equal(237); @@ -28,7 +28,7 @@ suite("AST Objects: DCL Tile", function () { expect(sut.flatten().length).to.equal(316); } catch (err) { - assert.fail("The root or an immediate Tile did not flatten to expected quantities"); + assert.fail(`The root or an immediate Tile did not flatten to expected quantities ${err}`); } }); @@ -37,7 +37,7 @@ suite("AST Objects: DCL Tile", function () { try { const sut = (line: number, column: number): string => { return doc.documentDclContainer.getAtomFromPosition(new Position(line, column)).symbol; - }; + }; expect(sut(0, 0)).to.equal('/*\r\nthis is a block\r\ncomment\r\n*/'); expect(sut(3, 10)).to.equal('// line comment on block tail'); @@ -47,7 +47,7 @@ suite("AST Objects: DCL Tile", function () { expect(sut(31, 16)).to.equal('//boxed row'); } catch (err) { - assert.fail("A known atom position did not return the expected string value"); + assert.fail(`A known atom position did not return the expected string value ${err}`); } }); @@ -58,7 +58,7 @@ suite("AST Objects: DCL Tile", function () { const sut = (getLine: number, getColumn: number, expectLine: number, expectColumn: number): boolean => { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), true); return frag === null ? false : frag.line === expectLine && frag.column === expectColumn; - }; + }; expect(sut(4, 0, 0, 0)).to.equal(true); // expect DocumentContainer expect(sut(3, 22, 0, 0)).to.equal(true); expect(sut(31, 16, 5, 0)).to.equal(true); @@ -68,16 +68,16 @@ suite("AST Objects: DCL Tile", function () { expect(sut(42, 50, 42, 8)).to.equal(true); } catch (err) { - assert.fail("A known atom position did not return the expected parent position"); + assert.fail(`A known atom position did not return the expected parent position ${err}`); } }); - + test("DclTile.getParentFrom() TilesOnly == False", function () { try { const sut = (getLine: number, getColumn: number, expectLine: number, expectColumn: number): boolean => { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), false); return frag === null ? false : frag.line === expectLine && frag.column === expectColumn; - }; + }; expect(sut(4, 0, 0, 0)).to.equal(true); // expect DocumentContainer expect(sut(3, 22, 0, 0)).to.equal(true); expect(sut(31, 16, 5, 0)).to.equal(true); @@ -87,7 +87,7 @@ suite("AST Objects: DCL Tile", function () { expect(sut(42, 50, 42, 38)).to.equal(true); } catch (err) { - assert.fail("A known atom position did not return the expected parent position"); + assert.fail(`A known atom position did not return the expected parent position ${err}`); } }); @@ -97,10 +97,10 @@ suite("AST Objects: DCL Tile", function () { const sut = (getLine: number, getColumn: number, getTile: boolean): IDclFragment => { // comments cannot exist in tiles, so results should always be atom 0 when getParentFrom(false) returns an attribute const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); - const container: DclTile|DclAttribute = frag.asAttribute ?? frag.asTile; + const container: DclTile | DclAttribute = frag.asAttribute ?? frag.asTile; const result = container.firstNonComment; return result; - }; + }; expect(sut(0, 1, true)).to.equal(null); // Root should be null since it only contains comments & containers expect(sut(6, 12, true).symbol).to.equal('ALE_Dialog1'); expect(sut(17, 45, true).symbol).to.equal(':'); @@ -110,7 +110,7 @@ suite("AST Objects: DCL Tile", function () { expect(sut(43, 23, false).symbol).to.equal('width'); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); @@ -120,14 +120,14 @@ suite("AST Objects: DCL Tile", function () { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); const result = frag.asTile.openBracketAtom; return result; - }; + }; expect(sut(0, 1, true)).to.equal(null); // Root should be null since it only contains comments & containers expect(sut(6, 12, true).symbol).to.equal('{'); expect(sut(17, 45, true).symbol).to.equal('{'); expect(sut(36, 22, true).symbol).to.equal('{'); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); @@ -137,14 +137,14 @@ suite("AST Objects: DCL Tile", function () { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); const result = frag.asTile.closeBracketAtom; return result; - }; + }; expect(sut(0, 1, true)).to.equal(null); // Root should be null since it only contains comments & containers expect(sut(6, 12, true).symbol).to.equal('}'); expect(sut(17, 45, true).symbol).to.equal('}'); expect(sut(36, 22, true).symbol).to.equal('}'); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); @@ -155,24 +155,24 @@ suite("AST Objects: DCL Tile", function () { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); const result = frag.asTile.dialogNameAtom; return result; - }; + }; expect(sut(0, 1, true)).to.equal(null); // Root should be null since it only contains comments & containers expect(sut(6, 12, true).symbol).to.equal('ALE_Dialog1'); expect(sut(17, 45, true)).to.equal(null); expect(sut(36, 22, true).symbol).to.equal('ALE_Dialog2'); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); - + test("DclTile.tileTypeAtom Property", function () { try { const sut = (getLine: number, getColumn: number, getTile: boolean): IDclFragment => { const frag = doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); const result = frag.asTile.tileTypeAtom; return result; - }; + }; expect(sut(0, 1, true)).to.equal(null); // Root should be null since it only contains comments & containers expect(sut(6, 12, true).symbol).to.equal('dialog'); expect(sut(17, 45, true).symbol).to.equal('toggle'); @@ -180,16 +180,16 @@ suite("AST Objects: DCL Tile", function () { expect(sut(39, 27, true).symbol).to.equal('edit_box'); } catch (err) { - assert.fail("The expected container and/or string was not return by the test method"); + assert.fail(`The expected container and/or string was not return by the test method ${err}`); } }); - - + + test("DclTile Misc IDclFragment Obligations", function () { try { const sut = (getLine: number, getColumn: number, getTile: boolean): IDclContainer => { return doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); - }; + }; const tile1 = sut(6, 12, true); const tile2 = sut(17, 45, true); expect(tile1.isComment).to.equal(false); @@ -200,7 +200,7 @@ suite("AST Objects: DCL Tile", function () { expect(tile2.isString).to.equal(false); } catch (err) { - assert.fail("The expected container and/or value was not return by the test method"); + assert.fail(`The expected container and/or value was not return by the test method ${err}`); } }); @@ -208,7 +208,7 @@ suite("AST Objects: DCL Tile", function () { try { const sut = (getLine: number, getColumn: number, getTile: boolean): IDclContainer => { return doc.documentDclContainer.getParentFrom(new Position(getLine, getColumn), getTile); - }; + }; const realTile = sut(18, 20, true); let realIndex = realTile.firstAtom.flatIndex; const mockTile = new DclTile('\r\n', [ @@ -225,14 +225,15 @@ suite("AST Objects: DCL Tile", function () { ]); expect(realTile.equal(mockTile)).to.equal(true); + /*Any type is required for test to function*/ //eslint-disable-next-line (mockTile.atoms[1] as any)['symbol'] = 'spacex'; expect(realTile.equal(mockTile)).to.equal(false); } catch (err) { - assert.fail("The mock failed to equal or continued to equal the known tile before or after alterations"); + assert.fail(`The mock failed to equal or continued to equal the known tile before or after alterations ${err}`); } }); - + }); \ No newline at end of file diff --git a/extension/src/test/suite/codeCoverage.ts b/extension/src/test/suite/codeCoverage.ts index b24ba19d..4b8db0a5 100644 --- a/extension/src/test/suite/codeCoverage.ts +++ b/extension/src/test/suite/codeCoverage.ts @@ -7,8 +7,7 @@ import * as baseConfig from "@istanbuljs/nyc-config-typescript"; import 'ts-node/register'; import 'source-map-support/register'; - -const NYC = require('nyc'); +import * as NYC from 'nyc'; export async function run(): Promise { const reportingDir = path.resolve(__dirname, '../../../coverage'); @@ -44,7 +43,7 @@ export async function run(): Promise { } async function setupNYC() { - let nyc = new NYC({ + const nyc = new NYC({ ...baseConfig, all: true, cwd: path.join(__dirname, '..', '..', '..'), @@ -74,7 +73,7 @@ async function reportCodeCoverage(nyc) { let textReport = ''; - let currentWrite = process.stdout.write; + const currentWrite = process.stdout.write; process.stdout.write = (s) => { textReport = textReport + s; return true; }; await nyc.report.bind(nyc)(); diff --git a/extension/src/test/suite/help.userDocumentation.test.ts b/extension/src/test/suite/help.userDocumentation.test.ts index 0e460061..f364830a 100644 --- a/extension/src/test/suite/help.userDocumentation.test.ts +++ b/extension/src/test/suite/help.userDocumentation.test.ts @@ -1,30 +1,28 @@ import * as path from 'path'; import * as chai from 'chai'; -import * as fs from 'fs-extra'; import * as vscode from 'vscode'; - import * as testing from '../../help/userDocumentation'; import { ReadonlyDocument } from '../../project/readOnlyDocument'; import { ILispFragment } from '../../astObjects/ILispFragment'; import { LispContainer } from '../../astObjects/lispContainer'; -let prefixPath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; -let lspFilePath = path.join(prefixPath + "pdfMarkups.lsp"); +const prefixPath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; +const lspFilePath = path.join(prefixPath + "pdfMarkups.lsp"); -suite("Help: UserDocumentation Tests", function () { - const doc = ReadonlyDocument.open(lspFilePath); +suite("Help: UserDocumentation Tests", function () { + const doc = ReadonlyDocument.open(lspFilePath); const pos1 = new vscode.Position(150, 5); const pos2 = new vscode.Position(35, 5); const pos3 = new vscode.Position(11, 10); const pos4 = new vscode.Position(0, 5); - + let def1: LispContainer; let def2: LispContainer; let def3: LispContainer; let def4: LispContainer; - let args1: Array; + let args1: Array; let args2: Array; let args3: Array; let snip1: vscode.SnippetString; @@ -33,16 +31,16 @@ suite("Help: UserDocumentation Tests", function () { suiteSetup(async () => { try { let parent = doc.documentContainer.atoms.find(p => p.contains(pos1)); - def1 = await testing.getDefunAtPosition(parent, pos1); - + def1 = await testing.getDefunAtPosition(parent, pos1); + parent = doc.documentContainer.atoms.find(p => p.contains(pos2)); - def2 = await testing.getDefunAtPosition(parent, pos2); + def2 = await testing.getDefunAtPosition(parent, pos2); parent = doc.documentContainer.atoms.find(p => p.contains(pos3)); - def3 = await testing.getDefunAtPosition(parent, pos3, 1); + def3 = await testing.getDefunAtPosition(parent, pos3, 1); parent = doc.documentContainer.atoms.find(p => p.contains(pos4)); - def4 = await testing.getDefunAtPosition(parent, pos4); + def4 = await testing.getDefunAtPosition(parent, pos4); args1 = testing.getDefunArguments(def1); args2 = testing.getDefunArguments(def2); @@ -51,25 +49,25 @@ suite("Help: UserDocumentation Tests", function () { snip1 = testing.generateDocumentationSnippet('\n', args1); snip2 = testing.generateDocumentationSnippet('\n', args2); snip3 = testing.generateDocumentationSnippet('\n', args3); - } catch (error) { + } catch (err) { + console.log(`Failed to setup tests for user documentation. This is likely due to the test file not being found or parsed correctly. Please ensure the test file exists and is correctly formatted.\n${err}`); // No required reporting, these will fail in the context specific tests } - }); - - + }); + test("getDefunAtPosition() Test", function () { - try { - // tslint:disable-next-line:no-unused-expression + try { + //eslint-disable-next-line chai.expect(def1).to.exist; - // tslint:disable-next-line:no-unused-expression + //eslint-disable-next-line chai.expect(def2).to.exist; - // tslint:disable-next-line:no-unused-expression + //eslint-disable-next-line chai.expect(def3).to.exist; - // tslint:disable-next-line:no-unused-expression + //eslint-disable-next-line chai.expect(def4).to.not.exist; } catch (err) { - chai.expect.fail("Failed to locate a defun at known position"); + chai.expect.fail(`Failed to locate a defun at known position\n${err}`); } }); @@ -82,7 +80,7 @@ suite("Help: UserDocumentation Tests", function () { chai.expect(testing.getDefunArguments(null).length).to.equal(0); } catch (err) { - chai.expect.fail("Defun was null or the number of arguments extracted were not equal to 1"); + chai.expect.fail(`Defun was null or the number of arguments extracted were not equal to 1\n${err}`); } }); @@ -94,7 +92,7 @@ suite("Help: UserDocumentation Tests", function () { chai.expect(snip3.value.length).to.equal(44); } catch (err) { - chai.expect.fail("The produced snippet did not contain the expected number of characters"); + chai.expect.fail(`The produced snippet did not contain the expected number of characters\n${err}`); } }); diff --git a/extension/src/test/suite/helper.ts b/extension/src/test/suite/helper.ts index 8df31e04..89360335 100644 --- a/extension/src/test/suite/helper.ts +++ b/extension/src/test/suite/helper.ts @@ -6,19 +6,20 @@ export async function sleep(ms: number) { } //usage of this princ is princ({str}) which will pass an object instead of value only -export function princ(str : any){ - var name = Object.keys(str)[0]; - var value = str[name]; +//eslint-disable-next-line @typescript-eslint/no-explicit-any +export function princ(str: any) { + const name = Object.keys(str)[0]; + const value = str[name]; console.log(`-----the ${name} is ${value.toString()}-----`); } //This method is to read a file and return the vscode.TextDocument object -export async function readFile2TextDocument(filepath: string) : Promise { - let doc : vscode.TextDocument; +export async function readFile2TextDocument(filepath: string): Promise { + let doc: vscode.TextDocument; try { - doc = await vscode.workspace.openTextDocument(filepath); - return doc; - } catch (error) { - console.log(error); - return undefined; - } + doc = await vscode.workspace.openTextDocument(filepath); + return doc; + } catch (error) { + console.log(error); + return undefined; + } } diff --git a/extension/src/test/suite/index.ts b/extension/src/test/suite/index.ts index de358eb0..7eb50524 100644 --- a/extension/src/test/suite/index.ts +++ b/extension/src/test/suite/index.ts @@ -4,15 +4,15 @@ import { glob } from 'glob'; export async function run(): Promise { // Create the mocha test const mocha = new Mocha({ - ui: 'tdd' + ui: 'tdd', + color: true }); - mocha.options.color = true; const testsRoot = path.resolve(__dirname, '..'); + const files = await glob('**/*.test.js', { cwd: testsRoot }) - return new Promise(async (c, e) => { + return new Promise((c, e) => { try { - let files = await glob('**/*.test.js', { cwd: testsRoot }) files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); try { // Run the mocha test @@ -26,10 +26,8 @@ export async function run(): Promise { } catch (err) { e(err); } - } catch { - (err) => { - return e(err); - }; + } catch (err) { + return e(err); } }); diff --git a/extension/src/test/suite/parsing.comments.test.ts b/extension/src/test/suite/parsing.comments.test.ts index 47400898..9191747d 100644 --- a/extension/src/test/suite/parsing.comments.test.ts +++ b/extension/src/test/suite/parsing.comments.test.ts @@ -5,8 +5,8 @@ import { getBlockCommentParamNameRange, parseDocumentation } from '../../parsing import { ReadonlyDocument } from '../../project/readOnlyDocument'; -suite("Parsing: Comments Tests", function () { - +suite("Parsing: Comments Tests", function () { + let roDoc: ReadonlyDocument; suiteSetup(() => { @@ -17,14 +17,14 @@ suite("Parsing: Comments Tests", function () { - + test("Comment Extraction Test", function () { let failMessage = "Failed parse prior to testing any results"; - try { + try { const positions = [ - new Position(0 , 5 ), - new Position(6 , 14), - new Position(9 , 12), // bad input test, returns empty object + new Position(0, 5), + new Position(6, 14), + new Position(9, 12), // bad input test, returns empty object new Position(20, 12), new Position(31, 25), new Position(41, 11) @@ -43,8 +43,8 @@ suite("Parsing: Comments Tests", function () { accumulator[k].push(lspDoc[k]); } }); - } - + } + failMessage = "Incorrect parsed comment field block quantities"; expect(accumulator['params'].length).to.equal(6); expect(accumulator['description'].length).to.equal(5); @@ -52,11 +52,11 @@ suite("Parsing: Comments Tests", function () { expect(accumulator['remarks'].length).to.equal(1); failMessage = "Failed to properly migrate param variable name"; - let paramNames = accumulator['params'].map(p => p.name); + const paramNames = accumulator['params'].map(p => p.name); expect(paramNames).to.not.have.members(['Param']); } catch (err) { - assert.fail(failMessage); + assert.fail(failMessage, err); } }); diff --git a/extension/src/test/suite/parsing.dclParser.test.ts b/extension/src/test/suite/parsing.dclParser.test.ts index 1a5bddcc..20267c6a 100644 --- a/extension/src/test/suite/parsing.dclParser.test.ts +++ b/extension/src/test/suite/parsing.dclParser.test.ts @@ -10,24 +10,24 @@ const extRootPath = path.resolve(__dirname, '../../../'); const dclPath = path.resolve(extRootPath, "./extension/src/test/SourceFile/renaming/dialog.dcl"); -suite("Parsing: DCL Content", function () { +suite("Parsing: DCL Content", function () { - let doc: ReadonlyDocument; + let doc: ReadonlyDocument; suiteSetup(async () => { - doc = ReadonlyDocument.open(dclPath); + doc = ReadonlyDocument.open(dclPath); }); - test("DclParser - getDocumentTileContainer()", function () { + test("DclParser - getDocumentTileContainer()", function () { try { const start = Date.now(); const tile = getDocumentTileContainer(doc.fileContent); const stop = Date.now(); const text = tile.asText(); const conversion = Date.now(); - + const diff1 = stop - start; const diff2 = conversion - stop; - + console.log(`\t\tDCL Parsing Time: ${diff1}ms`); console.log(`\t\tDCL Convert Back: ${diff2}ms`); @@ -35,11 +35,11 @@ suite("Parsing: DCL Content", function () { expect(doc.fileContent).to.equal(text); } catch (err) { - assert.fail("The original parsed content did not convert back to the same text"); + assert.fail(`The original parsed content did not convert back to the same text\n${err}`); } }); - test("DCL Root Container Contents", function () { + test("DCL Root Container Contents", function () { try { const tile = doc.documentDclContainer; expect(tile.length).to.equal(4); @@ -56,7 +56,7 @@ suite("Parsing: DCL Content", function () { expect(tile.atoms[0].symbol.split('\n').length).to.equal(4); } catch (err) { - assert.fail("The parsed content did not contain the expected root values"); + assert.fail(`The parsed content did not contain the expected root value\n${err}`); } }); @@ -70,13 +70,13 @@ suite("Parsing: DCL Content", function () { const poor5 = 'myDCL : dialog {\n\t: button {\n\t\t= 100;\n\t\tlabel = "random"\n\tok_cancel;\n\t}'; const poor6 = 'myDCL : dialog {\n\tok_cancel;\n\t} randomExtra'; - test("Malformed DCL Test #1", function () { + test("Malformed DCL Test #1", function () { try { const sut1 = getDocumentTileContainer(good1); const sut2 = getDocumentTileContainer(poor0); const sut3 = getDocumentTileContainer(poor1); const sut4 = getDocumentTileContainer(poor6); - + const baseline = sut1.flatten().length; expect(sut2.flatten().length).to.equal(baseline - 1); expect(sut2.atoms[0].asTile.atoms[4]).instanceOf(DclTile); @@ -90,26 +90,26 @@ suite("Parsing: DCL Content", function () { expect(sut3.atoms[0].asTile.atoms[5]).instanceOf(DclTile); } catch (err) { - assert.fail("At least one test case parsed incorrectly or aggregated unexpectedly"); + assert.fail(`At least one test case parsed incorrectly or aggregated unexpectedly\n${err}`); } }); - test("Malformed DCL Test #2", function () { + test("Malformed DCL Test #2", function () { try { const sut1 = getDocumentTileContainer(good2); const sut2 = getDocumentTileContainer(poor2); const sut3 = getDocumentTileContainer(poor3); const sut4 = getDocumentTileContainer(poor4); const sut5 = getDocumentTileContainer(poor5); - + const baseline = sut1.flatten().length; // should be 19 expect(sut2.flatten().length).to.equal(baseline - 1); expect(sut2.atoms[0].asTile.atoms[4].asTile.atoms.filter(p => p instanceof DclAttribute).length).to.equal(2); expect(sut3.flatten().length).to.equal(baseline - 1); expect(sut3.atoms[0].asTile.atoms[4].asTile.atoms.filter(p => p instanceof DclAttribute).length).to.equal(1); - + expect(sut4.flatten().length).to.equal(baseline - 2); expect(sut4.atoms[0].asTile.atoms[4].asTile.atoms.filter(p => p instanceof DclAttribute).length).to.equal(2); @@ -117,7 +117,7 @@ suite("Parsing: DCL Content", function () { expect(sut5.atoms[0].asTile.atoms[4].asTile.atoms.filter(p => p instanceof DclAttribute).length).to.equal(2); } catch (err) { - assert.fail("At least one test case parsed incorrectly or aggregated unexpectedly"); + assert.fail(`At least one test case parsed incorrectly or aggregated unexpectedly\n${err}`); } }); diff --git a/extension/src/test/suite/parsing.shared.test.ts b/extension/src/test/suite/parsing.shared.test.ts index e22d0142..c0a8457a 100644 --- a/extension/src/test/suite/parsing.shared.test.ts +++ b/extension/src/test/suite/parsing.shared.test.ts @@ -14,8 +14,8 @@ suite("Parsing: Shared Tests", function () { try { windowsDoc = ReadonlyDocument.createMemoryDocument('(defun someFunc ()\r\n\t(command ".line" pause pause)\r\n\t(princ)\r\n)', 'autolisp'); linuxDoc = ReadonlyDocument.createMemoryDocument('(defun someFunc ()\n\t(command ".line" pause pause)\n\t(princ)\n)', 'autolisp'); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); @@ -28,7 +28,7 @@ suite("Parsing: Shared Tests", function () { expect(sut).to.equal('\r\n'); } catch (err) { - assert.fail("Expected CRLF, but got something else"); + assert.fail(`Expected CRLF, but got something else\n${err}`); } }); @@ -38,7 +38,7 @@ suite("Parsing: Shared Tests", function () { expect(sut).to.equal('\r\n'); } catch (err) { - assert.fail("Expected LF, but got something else"); + assert.fail(`Expected LF, but got something else\n${err}`); } }); @@ -51,7 +51,7 @@ suite("Parsing: Shared Tests", function () { expect(sut).to.equal('\n'); } catch (err) { - assert.fail("Expected CRLF, but got something else"); + assert.fail(`Expected CRLF, but got something else\n${err}`); } }); @@ -61,7 +61,7 @@ suite("Parsing: Shared Tests", function () { expect(sut).to.equal('\r\n'); } catch (err) { - assert.fail("Expected CRLF, but got something else"); + assert.fail(`Expected CRLF, but got something else\n${err}`); } }); diff --git a/extension/src/test/suite/project.test.ts b/extension/src/test/suite/project.test.ts index d86ba74a..b0e7b67d 100644 --- a/extension/src/test/suite/project.test.ts +++ b/extension/src/test/suite/project.test.ts @@ -6,25 +6,25 @@ import { ProjectTreeProvider, addLispFileNode2ProjectTree } from '../../project/ import { AddFile2Project } from '../../project/addFile2Project'; import { SaveProject } from '../../project/saveProject'; import { excludeFromProject } from '../../project/excludeFile'; -import * as fs from 'fs-extra'; +import * as fs from 'fs-extra'; import { RefreshProject } from '../../project/refreshProject'; import { getTreeItemTitle } from '../../project/projectutil'; import { openLspFile } from '../../project/openLspFile'; import { hasFileWithSameName } from '../../project/projectTree'; - -var expect = require('chai').expect; +import { expect } from 'chai' suite("Project related Tests", function () { - let prefixpath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; - let projpath = path.join(prefixpath + "project_test_file.prj"); - let ret = vscode.Uri.file(projpath); - let rootNode= OpenProjectFile(ret); + const prefixpath = __filename + "/../../../../extension/src/test/SourceFile/test_case/"; + const projpath = path.join(prefixpath + "project_test_file.prj"); + const ret = vscode.Uri.file(projpath); + const rootNode = OpenProjectFile(ret); suite("Project open Tests", function () { test("open nonexisting project file", function () { try { OpenProjectFile(vscode.Uri.file("empty.prj")); } catch (err) { + //eslint-disable-next-line expect(err.message.startsWith("Can't read project file:")).to.be.true; } }); @@ -37,15 +37,15 @@ suite("Project related Tests", function () { catch (err) { console.log(err); expect(err).to.be.equals(""); - } + } }); }); suite("Project create Tests", function () { test("create a new project", async function () { - let projpath = path.join(prefixpath + "createPrj.prj"); + const projpath = path.join(prefixpath + "createPrj.prj"); try { - let returnValue = await createProject(projpath); + const returnValue = await createProject(projpath); expect(returnValue.projectName).to.be.equals("createPrj"); } catch (err) { @@ -55,25 +55,26 @@ suite("Project related Tests", function () { }); test("failed to create a new project", function () { - let projpath_err = path.join(prefixpath + "createPr.pr"); + const projpath_err = path.join(prefixpath + "createPr.pr"); try { createProject(projpath_err); } catch (err) { + //eslint-disable-next-line expect(err.message.startsWith("Only PRJ files are allowed.")).to.be.true; } }); }); - suite("Project add '.lsp' file Tests",function(){ - let destprojpath = path.join(prefixpath + "project_test_file_add.prj"); - fs.copyFileSync(projpath, destprojpath); - let ret = vscode.Uri.file(destprojpath); - let rootNode= OpenProjectFile(ret); - - test("add '.lsp' file to project", async function(){ - let fileName= path.join(prefixpath + "test_case/pdfMarkups.lsp"); - try{ + suite("Project add '.lsp' file Tests", function () { + const destprojpath = path.join(prefixpath + "project_test_file_add.prj"); + fs.copyFileSync(projpath, destprojpath); + const ret = vscode.Uri.file(destprojpath); + const rootNode = OpenProjectFile(ret); + + test("add '.lsp' file to project", async function () { + const fileName = path.join(prefixpath + "test_case/pdfMarkups.lsp"); + try { addLispFileNode2ProjectTree(rootNode, fileName, null); expect(rootNode.sourceFiles.length).to.be.equals(2); } @@ -83,27 +84,28 @@ suite("Project related Tests", function () { fs.removeSync(destprojpath); }); - test("failed to add wrong extension file to project",async function(){ + test("failed to add wrong extension file to project", async function () { if (ProjectTreeProvider.hasProjectOpened() == true) { - let projpath = path.join(prefixpath + "add_fail_case.txt"); - let projpath1 = path.join(prefixpath + "add_fail_case.lsp.lsp"); - let projpath2 = path.join(prefixpath + "test_remove.lsp"); - let array = [projpath, projpath1, projpath2]; - for (let i=0;i<3;i++) { - let ret = vscode.Uri.file(array[i]); - let arr = new Array(); + const projpath = path.join(prefixpath + "add_fail_case.txt"); + const projpath1 = path.join(prefixpath + "add_fail_case.lsp.lsp"); + const projpath2 = path.join(prefixpath + "test_remove.lsp"); + const array = [projpath, projpath1, projpath2]; + for (let i = 0; i < 3; i++) { + const ret = vscode.Uri.file(array[i]); + const arr = new Array(); arr.push(ret); - let prom = AddFile2Project(arr); - try{ + const prom = AddFile2Project(arr); + try { prom - .then(response => { - return; - }) - .catch(error => { - expect(error).to.be.equals("Only LSP files are allowed."); - }) + .then(response => { + console.log(response) + return; + }) + .catch(error => { + expect(error).to.be.equals("Only LSP files are allowed."); + }) } - catch(err){ + catch (err) { expect(err).to.be.equals(""); } } @@ -111,12 +113,12 @@ suite("Project related Tests", function () { }); }); - suite("Project remove '.lsp' file Tests", function(){ - test("Successed to remove '.lsp' file from project", async function(){ - let destprojpath = path.join(prefixpath + "project_test_file_remove.prj"); - fs.copyFileSync(projpath, destprojpath); - let ret = vscode.Uri.file(destprojpath); - let rootNode= OpenProjectFile(ret); + suite("Project remove '.lsp' file Tests", function () { + test("Successed to remove '.lsp' file from project", async function () { + const destprojpath = path.join(prefixpath + "project_test_file_remove.prj"); + fs.copyFileSync(projpath, destprojpath); + const ret = vscode.Uri.file(destprojpath); + const rootNode = OpenProjectFile(ret); ProjectTreeProvider.instance().updateData(rootNode); try { await excludeFromProject(rootNode.sourceFiles[0]); @@ -129,26 +131,27 @@ suite("Project related Tests", function () { fs.removeSync(destprojpath); }); - test("Fail to remove '.lsp' file from unopened project", async function(){ + test("Fail to remove '.lsp' file from unopened project", async function () { ProjectTreeProvider.instance().updateData(null); - try{ + try { await excludeFromProject(rootNode.sourceFiles[0]); } catch (err) { + //eslint-disable-next-line expect(err.startsWith("A project must be open")).to.be.true; } }); }); - suite("Project save project Test", function(){ - test("Successed to save project", async function(){ - let destprojpath = path.join(prefixpath + "project_test_file_add.prj"); - fs.copyFileSync(projpath, destprojpath); - let ret = vscode.Uri.file(destprojpath); - let rootNode= OpenProjectFile(ret); + suite("Project save project Test", function () { + test("Successed to save project", async function () { + const destprojpath = path.join(prefixpath + "project_test_file_add.prj"); + fs.copyFileSync(projpath, destprojpath); + const ret = vscode.Uri.file(destprojpath); + const rootNode = OpenProjectFile(ret); ProjectTreeProvider.instance().updateData(rootNode); - let fileName= path.join(prefixpath + "pdfMarkups.lsp"); - try{ + const fileName = path.join(prefixpath + "pdfMarkups.lsp"); + try { addLispFileNode2ProjectTree(rootNode, fileName, null); await SaveProject(true); OpenProjectFile(ret); @@ -158,29 +161,30 @@ suite("Project related Tests", function () { expect(err).to.be.equals(""); } fs.removeSync(destprojpath); - }); - - test("No project to save", async function(){ + }); + + test("No project to save", async function () { ProjectTreeProvider.instance().updateData(null); - try{ - let msg = SaveProject(true); + try { + const msg = SaveProject(true); msg - .then(response => { - return; - }) - .catch(error => { - expect(error).to.be.equals("No project to save."); - }) + .then(response => { + console.log(response) + return; + }) + .catch(error => { + expect(error).to.be.equals("No project to save."); + }) } catch (err) { console.log(err); expect(err).to.be.equals(""); } - }); + }); }); - suite("Project refresh Test", function(){ - test("Successed to refresh project", function(){ + suite("Project refresh Test", function () { + test("Successed to refresh project", function () { try { RefreshProject(); } @@ -190,9 +194,9 @@ suite("Project related Tests", function () { } }); - test("file with same name", function(){ - let rootNode= OpenProjectFile(ret); - let fileName = "test_remove.lsp"; + test("file with same name", function () { + const rootNode = OpenProjectFile(ret); + const fileName = "test_remove.lsp"; try { hasFileWithSameName(fileName, rootNode); } @@ -203,9 +207,9 @@ suite("Project related Tests", function () { }); }); - suite("Project getTreeItemTitle Test", function(){ - test("Successed to getTreeItemTitle ptoject", function(){ - let treeNode = new vscode.TreeItem(rootNode.getDisplayText()); + suite("Project getTreeItemTitle Test", function () { + test("Successed to getTreeItemTitle ptoject", function () { + const treeNode = new vscode.TreeItem(rootNode.getDisplayText()); try { getTreeItemTitle(treeNode); } @@ -213,13 +217,13 @@ suite("Project related Tests", function () { console.log(err); expect(err).to.be.equals(""); } - + }); }); - suite("Project open lisp file Test", function(){ - test("Successed to open lisp file", async function(){ - let clickedTreeItem = rootNode.sourceFiles[0]; + suite("Project open lisp file Test", function () { + test("Successed to open lisp file", async function () { + const clickedTreeItem = rootNode.sourceFiles[0]; try { await openLspFile(clickedTreeItem); } @@ -229,15 +233,16 @@ suite("Project related Tests", function () { } }); - test("Failed to open lisp file", async function(){ - let projpath = path.join(prefixpath + "project_no_lisp_file.prj"); - let ret = vscode.Uri.file(projpath); - let rootNode= OpenProjectFile(ret); - let clickedTreeItem = rootNode.sourceFiles[0]; - try{ + test("Failed to open lisp file", async function () { + const projpath = path.join(prefixpath + "project_no_lisp_file.prj"); + const ret = vscode.Uri.file(projpath); + const rootNode = OpenProjectFile(ret); + const clickedTreeItem = rootNode.sourceFiles[0]; + try { await openLspFile(clickedTreeItem); } catch (err) { + //eslint-disable-next-line expect(err.startsWith("File doesn't exist: ")).to.be.true; } }); diff --git a/extension/src/test/suite/providers.completionDcl.test.ts b/extension/src/test/suite/providers.completionDcl.test.ts index d2509eae..7853d205 100644 --- a/extension/src/test/suite/providers.completionDcl.test.ts +++ b/extension/src/test/suite/providers.completionDcl.test.ts @@ -1,598 +1,596 @@ -import * as path from 'path'; -import {suite, test} from 'mocha'; -import {assert, expect} from 'chai'; -import {ReadonlyDocument} from '../../project/readOnlyDocument'; +import { suite, test } from 'mocha'; +import { assert, expect } from 'chai'; +import { ReadonlyDocument } from '../../project/readOnlyDocument'; import * as vscode from 'vscode'; -import {CompletionTriggerKind, Position} from 'vscode'; -import {CompletionLibraryDcl, SnippetKeys} from '../../completion/completionLibraryDcl'; +import { CompletionTriggerKind, Position } from 'vscode'; +import { CompletionLibraryDcl } from '../../completion/completionLibraryDcl'; import { invokeCompletionProviderDcl } from '../../completion/completionProviderDcl'; -import { loadAllResources } from '../../resources'; -import { DocumentServices } from '../../services/documentServices'; +import { Selectors } from '../../services/documentServices'; import { WebHelpLibrarySingleton } from '../../help/documentationLibrary'; import { Kinds } from '../../completion/completionItemDcl'; suite("CompletionDclProvider: Tests", function () { - - const dynamic = [ - '// Some Comment', - 'DynamicDlgName : dialog {', - '\t: boxed_column { children_alignment = right; #BeforeTile1#', - '\t\t#BeforeTile2#', - '\t\t: button { label = "Click Me"; } #AfterTile1#', - '\t\t#AfterTile2#', - '\t}', - '}', - '', - 'DynamicDlgName2 : dialog {', - '\t: boxed_column { ', - '\t\t', - '\t}', - '}', - ]; - const context = {triggerKind: CompletionTriggerKind.Invoke, triggerCharacter: ' '}; - let helpLib: WebHelpLibrarySingleton; - let compLib: CompletionLibraryDcl; - let boxColumnAtts: Array; - let allTiles: Array; - - //#region setup - suiteSetup(async () => { + + const dynamic = [ + '// Some Comment', + 'DynamicDlgName : dialog {', + '\t: boxed_column { children_alignment = right; #BeforeTile1#', + '\t\t#BeforeTile2#', + '\t\t: button { label = "Click Me"; } #AfterTile1#', + '\t\t#AfterTile2#', + '\t}', + '}', + '', + 'DynamicDlgName2 : dialog {', + '\t: boxed_column { ', + '\t\t', + '\t}', + '}', + ]; + const context = { triggerKind: CompletionTriggerKind.Invoke, triggerCharacter: ' ' }; + let helpLib: WebHelpLibrarySingleton; + let compLib: CompletionLibraryDcl; + let boxColumnAtts: Array; + let allTiles: Array; + + //#region setup + suiteSetup(async () => { + try { + helpLib = WebHelpLibrarySingleton.Instance; + compLib = CompletionLibraryDcl.Instance; + boxColumnAtts = [...helpLib.dclTiles.get('boxed_column').attributes]; + allTiles = Array.from(helpLib.dclTiles.keys()).filter(x => x !== 'dialog'); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); + } + }); + + enum LineTarget { + Before1 = 2, + Before2 = 3, + After1 = 4, + After2 = 5, + Blank1 = 8, + Blank2 = 11, + } + interface IInjections { + before1?: string; + before2?: string; + after1?: string; + after2?: string; + } + function injector(arg: IInjections): Array { + const result: Array = []; + for (let i = 0; i < dynamic.length; i++) { + if (i === LineTarget.Before1) { + result.push(dynamic[i].replace('#BeforeTile1#', arg.before1 ?? '')); + } else if (i === LineTarget.Before2) { + result.push(dynamic[i].replace('#BeforeTile2#', arg.before2 ?? '')); + } else if (i === LineTarget.After1) { + result.push(dynamic[i].replace('#AfterTile1#', arg.after1 ?? '')); + } else if (i === LineTarget.After2) { + result.push(dynamic[i].replace('#AfterTile2#', arg.after2 ?? '')); + } else { + result.push(dynamic[i]); + } + } + return result; + } + function dynamicDoc(arg: IInjections): ReadonlyDocument { + const parts = injector(arg); + return ReadonlyDocument.createMemoryDocument(parts.join('\n'), Selectors.DCL); + } + function getInsertText(item: vscode.CompletionItem): string { + const value = item.insertText; + if (value instanceof vscode.SnippetString) { + return value.value; + } else if (value) { + return value; + } + return ''; + } + //#endregion + + + // #region Attribute Testing + test("Attribute Suggestions - Position after known Attibute starter", function () { + try { + const doc = dynamicDoc({ before1: 'alignment' }); + const sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); + expect(sut.length).to.equal(1, 'length check #1'); + expect(sut[0].label.toString()).to.equal('='); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Attribute Suggestions - Position after unknown Attibute starter", function () { + try { + const doc = dynamicDoc({ before1: 'whatever' }); + const sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); + expect(sut.length).to.equal(1, 'length check #1'); + expect(sut[0].label.toString()).to.equal('='); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Attribute Suggestions - known Attibute expect enum suggestions", function () { + try { + const doc = dynamicDoc({ before1: 'alignment = ' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); + const expected = ["left", "right", "top", "bottom", "centered"]; + expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); + sut.forEach(item => { + expect(expected).to.include(item.label); + expect(getInsertText(item)).to.equal(`${item.label};`); + }); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); + expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Attribute Suggestions - known Attibute expect enum suggestions from existing", function () { + try { + const doc = dynamicDoc({ before1: 'alignment = left' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); + const expected = ["left", "right", "top", "bottom", "centered"]; + expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); + sut.forEach(item => { + expect(expected).to.include(item.label); + expect(getInsertText(item)).to.equal(`${item.label};`); + }); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); + expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Attribute Suggestions - partial attribute from both sides of the ';' character", function () { + try { + const doc = dynamicDoc({ before2: 'alignment = ;' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 14), context); + const expected = ["left", "right", "top", "bottom", "centered"]; + expect(sut.length).to.equal(expected.length, 'length check #1'); + sut.forEach(item => { + expect(expected).to.include(item.label); + expect(getInsertText(item)).to.equal(`${item.label};`); + }); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 15), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #2'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + test("Attribute Suggestions - well-formed Attibute expect enum suggestions from existing", function () { + try { + let doc = dynamicDoc({ before1: 'alignment = left;' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); + const expected = ["left", "right", "top", "bottom", "centered"]; + expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); + sut.forEach(item => { + expect(expected).to.include(item.label); + expect(getInsertText(item)).to.equal(item.label); + }); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); + expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); + + doc = dynamicDoc({ before2: 'alignment = left;' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 2), context); + expect(sut.length).to.equal(boxColumnAtts.length - 2, 'filtered length check'); + sut.forEach(item => { + expect(Kinds.ATTRIBUTE).to.equal(item.kind); + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + test("Attribute Suggestions - Partial Attibute expecting string suggestion", function () { + try { + let doc = dynamicDoc({ before1: 'key = "somevalue"' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 62), context); + expect(sut.length).to.equal(1, 'length check'); + expect(getInsertText(sut[0])).to.equal('"somevalue";'); + + // these verify that suggestions are only firing when the Position is right at the end quote + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 61), context); + expect(sut).to.equal(null); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 63), context); + expect(sut).to.equal(null); + + doc = dynamicDoc({ before1: 'key = ' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); + expect(sut.length).to.equal(1, 'length check'); + expect(sut[0].insertText).to.be.instanceOf(vscode.SnippetString); + expect(getInsertText(sut[0])).to.equal('"$0";'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Attribute Suggestions - Expect null from number primitive", function () { + try { + const doc = dynamicDoc({ before2: 'width = 5000' }); + const sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 12), context); + expect(sut).to.equal(null); + } + catch (err) { + assert.fail(`${err}`); + } + }); + // #endregion Attribute Testing + + + test("Hybrid Suggestions - Using Partial Attibute", function () { + try { + let doc = dynamicDoc({ before1: 'alignment' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 50), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #1'); + + doc = dynamicDoc({ before2: 'alignment' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 10), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #2'); + + doc = dynamicDoc({ after2: 'alignment' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 10), context); + expect(sut.length).to.equal(allTiles.length, 'length check #3'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Comment Suggestion - From '/' atom", function () { try { - helpLib = WebHelpLibrarySingleton.Instance; - compLib = CompletionLibraryDcl.Instance; - boxColumnAtts = [...helpLib.dclTiles.get('boxed_column').attributes]; - allTiles = Array.from(helpLib.dclTiles.keys()).filter(x => x !== 'dialog'); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + const doc = dynamicDoc({ after2: '/' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 3), context); + expect(sut.length).to.equal(1, 'length check'); + expect(getInsertText(sut[0])).to.equal('/*\n\t$0\n*/'); + + sut = invokeCompletionProviderDcl(doc, new Position(0, 5), context); + expect(sut).to.equal(null); // should not make suggestions inside of a comment + } + catch (err) { + assert.fail(`${err}`); } }); - enum LineTarget { - Before1 = 2, - Before2 = 3, - After1 = 4, - After2 = 5, - Blank1 = 8, - Blank2 = 11, - } - interface IInjections { - before1?: string; - before2?: string; - after1?: string; - after2?: string; - } - function injector(arg: IInjections): Array { - const result: Array = []; - for (let i = 0; i < dynamic.length; i++) { - if (i === LineTarget.Before1) { - result.push(dynamic[i].replace('#BeforeTile1#', arg.before1 ?? '')); - } else if (i === LineTarget.Before2) { - result.push(dynamic[i].replace('#BeforeTile2#', arg.before2 ?? '')); - } else if (i === LineTarget.After1) { - result.push(dynamic[i].replace('#AfterTile1#', arg.after1 ?? '')); - } else if (i === LineTarget.After2) { - result.push(dynamic[i].replace('#AfterTile2#', arg.after2 ?? '')); - } else { - result.push(dynamic[i]); - } - } - return result; - } - function dynamicDoc(arg: IInjections): ReadonlyDocument { - const parts = injector(arg); - return ReadonlyDocument.createMemoryDocument(parts.join('\n'), DocumentServices.Selectors.DCL); - } - function getInsertText(item: vscode.CompletionItem) : string { - const value = item.insertText; - if (value instanceof vscode.SnippetString) { - return value.value; - } else if (value) { - return value; - } - return ''; - } - //#endregion - - - // #region Attribute Testing - test("Attribute Suggestions - Position after known Attibute starter", function () { - try { - const doc = dynamicDoc({before1: 'alignment'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); - expect(sut.length).to.equal(1, 'length check #1'); - expect(sut[0].label.toString()).to.equal('='); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Attribute Suggestions - Position after unknown Attibute starter", function () { - try { - const doc = dynamicDoc({before1: 'whatever'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); - expect(sut.length).to.equal(1, 'length check #1'); - expect(sut[0].label.toString()).to.equal('='); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Attribute Suggestions - known Attibute expect enum suggestions", function () { - try { - const doc = dynamicDoc({before1: 'alignment = '}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); - const expected = ["left", "right", "top", "bottom", "centered"]; - expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); - sut.forEach(item => { - expect(expected).to.include(item.label); - expect(getInsertText(item)).to.equal(`${item.label};`); - }); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); - expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Attribute Suggestions - known Attibute expect enum suggestions from existing", function () { - try { - const doc = dynamicDoc({before1: 'alignment = left'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); - const expected = ["left", "right", "top", "bottom", "centered"]; - expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); - sut.forEach(item => { - expect(expected).to.include(item.label); - expect(getInsertText(item)).to.equal(`${item.label};`); - }); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); - expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Attribute Suggestions - partial attribute from both sides of the ';' character", function () { - try { - const doc = dynamicDoc({before2: 'alignment = ;'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 14), context); - const expected = ["left", "right", "top", "bottom", "centered"]; - expect(sut.length).to.equal(expected.length, 'length check #1'); - sut.forEach(item => { - expect(expected).to.include(item.label); - expect(getInsertText(item)).to.equal(`${item.label};`); - }); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 15), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #2'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - test("Attribute Suggestions - well-formed Attibute expect enum suggestions from existing", function () { - try { - let doc = dynamicDoc({before1: 'alignment = left;'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 58), context); - const expected = ["left", "right", "top", "bottom", "centered"]; - expect(sut.length).to.equal(expected.length, 'length check - position away from = atom'); - sut.forEach(item => { - expect(expected).to.include(item.label); - expect(getInsertText(item)).to.equal(item.label); - }); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 57), context); - expect(sut).to.equal(null, 'suggest nothing until at least 1 space from delineator'); - - doc = dynamicDoc({before2: 'alignment = left;'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 2), context); - expect(sut.length).to.equal(boxColumnAtts.length - 2, 'filtered length check'); - sut.forEach(item => { - expect(Kinds.ATTRIBUTE).to.equal(item.kind); - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - test("Attribute Suggestions - Partial Attibute expecting string suggestion", function () { - try { - let doc = dynamicDoc({before1: 'key = "somevalue"'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 62), context); - expect(sut.length).to.equal(1, 'length check'); - expect(getInsertText(sut[0])).to.equal('"somevalue";'); - - // these verify that suggestions are only firing when the Position is right at the end quote - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 61), context); - expect(sut).to.equal(null); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 63), context); - expect(sut).to.equal(null); - - doc = dynamicDoc({before1: 'key = '}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); - expect(sut.length).to.equal(1, 'length check'); - expect(sut[0].insertText).to.be.instanceOf(vscode.SnippetString); - expect(getInsertText(sut[0])).to.equal('"$0";'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Attribute Suggestions - Expect null from number primitive", function () { - try { - let doc = dynamicDoc({before2: 'width = 5000'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 12), context); - expect(sut).to.equal(null); - } - catch (err) { - assert.fail(`${err}`); - } - }); - // #endregion Attribute Testing - - - test("Hybrid Suggestions - Using Partial Attibute", function () { - try { - let doc = dynamicDoc({before1: 'alignment'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 50), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #1'); - - doc = dynamicDoc({before2: 'alignment'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 10), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 2, 'length check #2'); - - doc = dynamicDoc({after2: 'alignment'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 10), context); - expect(sut.length).to.equal(allTiles.length, 'length check #3'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Comment Suggestion - From '/' atom", function () { - try { - let doc = dynamicDoc({after2: '/'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 3), context); - expect(sut.length).to.equal(1, 'length check'); - expect(getInsertText(sut[0])).to.equal('/*\n\t$0\n*/'); - - sut = invokeCompletionProviderDcl(doc, new Position(0, 5), context); - expect(sut).to.equal(null); // should not make suggestions inside of a comment - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Hybrid Suggestions - Using position only", function () { - try { - let doc = dynamicDoc({}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 50), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #1'); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 10), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #2'); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 10), context); - expect(sut.length).to.equal(allTiles.length, 'length check #3'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Hybrid Suggestions - first atom context", function () { - try { - let doc = dynamicDoc({before1: ':'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 48), context); - expect(sut.length).to.equal(allTiles.length, 'length check #1'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({}); // going after the ';' atom from the attribute - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 46), context); - expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #1.2'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({before2: ':'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 2), context); - expect(sut.length).to.equal(allTiles.length, 'length check #2'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({after1: ':'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After1, 37), context); - expect(sut.length).to.equal(allTiles.length, 'length check #3'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({after2: ':'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 2), context); - expect(sut.length).to.equal(allTiles.length, 'length check #4'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - - - test("Hybrid Suggestions - second atom context", function () { - try { - let doc = dynamicDoc({before1: ': x'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 48), context); - expect(sut.length).to.equal(allTiles.length, 'length check #1'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({before2: ': x'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 4), context); - expect(sut.length).to.equal(allTiles.length, 'length check #2'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({after1: ': x'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After1, 37), context); - expect(sut.length).to.equal(allTiles.length, 'length check #3'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({after2: ': x'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 4), context); - expect(sut.length).to.equal(allTiles.length, 'length check #4'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - test("Hybrid Suggestions - well-formed Attibute using ';' atom", function () { - try { - const expectedCount = allTiles.length + boxColumnAtts.length - 2; - let doc = dynamicDoc({before1: 'alignment = left;'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 63), context); - expect(expectedCount).to.equal(sut.length, 'length check'); - - doc = dynamicDoc({before2: ': { } '}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 8), context); - expect(allTiles.length).to.equal(sut.length); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Tile Suggestions - Possibly well-formed Tile expect basic suggestions", function () { - try { - let doc = dynamicDoc({before2: ': { }'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); - expect(allTiles.length).to.equal(sut.length, 'length check'); - sut.forEach(item => { - expect(item.label).to.equal(getInsertText(item)); - }); - - doc = dynamicDoc({before2: ': box { }'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); - expect(allTiles.length).to.equal(sut.length); - sut.forEach(item => { - expect(item.label).to.equal(getInsertText(item)); - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - test("Tile Suggestions - Special Cases", function () { - try { - let doc = dynamicDoc({before2: ': paragraph { }'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 15), context); - expect(2).to.equal(sut.length, 'length check #1'); - expect(sut[0].label).to.equal('concatenation'); - expect(sut[1].label).to.equal('text_part'); - - doc = doc = dynamicDoc({before2: ': concatenation { }'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 30), context); - expect(1).to.equal(sut.length); - expect(sut[0].label).to.equal('text_part'); - - doc = doc = dynamicDoc({before2: ': x'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); - expect(1).to.equal(sut.length); - expect(getInsertText(sut[0])).to.equal('x { $0 }'); - - doc = doc = dynamicDoc({before2: ': column'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); - expect(2).to.equal(sut.length); - expect(getInsertText(sut[0])).to.equal('column { \n\t$0 \n}'); - expect(getInsertText(sut[1])).to.equal('column { $0 }'); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - test("Hybrid Suggestions - Using Position & Well-Formed Proximity Parent", function () { - try { - const expectedCount = allTiles.length + boxColumnAtts.length - 2; - let doc = dynamicDoc({before1: 'alignment = right;'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); - expect(expectedCount).to.equal(sut.length, 'length check #1'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); - expect(expectedCount).to.equal(sut.length, 'length check #2'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({before2: 'alignment = right;'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); - expect(expectedCount).to.equal(sut.length, 'length check #2'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); - } - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - // TODO: Add Paragraph & Concatenation logic - - test("Hybrid Suggestions - Using Position & Fractional Proximity Parent", function () { - try { - let doc = dynamicDoc({before1: ':'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); - expect(allTiles.length).to.equal(sut.length, 'length check #3'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - doc = dynamicDoc({before2: ':'}); - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); - expect(allTiles.length).to.equal(sut.length, 'length check #4'); - sut.forEach(item => { - if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); - - - test("Hybrid Suggestions - Using Position without association", function () { - try { - const allCount = allTiles.length + boxColumnAtts.length; - let doc = dynamicDoc({before1: ': x'}); - let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank1, 0), context); - expect(sut.length).to.equal(2, 'length check #1'); - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank2 - 1, 99), context); - expect(allCount).to.equal(sut.length, 'length check #2'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); - } else { - expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); - } - }); - - - sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank2, 99), context); - expect(allCount).to.equal(sut.length, 'length check #3'); - sut.forEach(item => { - if (item.kind === Kinds.ATTRIBUTE) { - expect(getInsertText(item)).to.equal(item.label.toString()); - } else if (compLib.tilesWithChildren.includes(item.label.toString())) { - expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); - } else { - expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); - } - }); - } - catch (err) { - assert.fail(`${err}`); - } - }); + test("Hybrid Suggestions - Using position only", function () { + try { + const doc = dynamicDoc({}); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 50), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #1'); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 10), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #2'); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 10), context); + expect(sut.length).to.equal(allTiles.length, 'length check #3'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Hybrid Suggestions - first atom context", function () { + try { + let doc = dynamicDoc({ before1: ':' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 48), context); + expect(sut.length).to.equal(allTiles.length, 'length check #1'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({}); // going after the ';' atom from the attribute + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 46), context); + expect(sut.length).to.equal(allTiles.length + boxColumnAtts.length - 1, 'length check #1.2'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ before2: ':' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 2), context); + expect(sut.length).to.equal(allTiles.length, 'length check #2'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ after1: ':' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After1, 37), context); + expect(sut.length).to.equal(allTiles.length, 'length check #3'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ after2: ':' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 2), context); + expect(sut.length).to.equal(allTiles.length, 'length check #4'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + + + test("Hybrid Suggestions - second atom context", function () { + try { + let doc = dynamicDoc({ before1: ': x' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 48), context); + expect(sut.length).to.equal(allTiles.length, 'length check #1'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ before2: ': x' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 4), context); + expect(sut.length).to.equal(allTiles.length, 'length check #2'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ after1: ': x' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After1, 37), context); + expect(sut.length).to.equal(allTiles.length, 'length check #3'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ after2: ': x' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.After2, 4), context); + expect(sut.length).to.equal(allTiles.length, 'length check #4'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + test("Hybrid Suggestions - well-formed Attibute using ';' atom", function () { + try { + const expectedCount = allTiles.length + boxColumnAtts.length - 2; + let doc = dynamicDoc({ before1: 'alignment = left;' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 63), context); + expect(expectedCount).to.equal(sut.length, 'length check'); + + doc = dynamicDoc({ before2: ': { } ' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 8), context); + expect(allTiles.length).to.equal(sut.length); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Tile Suggestions - Possibly well-formed Tile expect basic suggestions", function () { + try { + let doc = dynamicDoc({ before2: ': { }' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); + expect(allTiles.length).to.equal(sut.length, 'length check'); + sut.forEach(item => { + expect(item.label).to.equal(getInsertText(item)); + }); + + doc = dynamicDoc({ before2: ': box { }' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); + expect(allTiles.length).to.equal(sut.length); + sut.forEach(item => { + expect(item.label).to.equal(getInsertText(item)); + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + test("Tile Suggestions - Special Cases", function () { + try { + let doc = dynamicDoc({ before2: ': paragraph { }' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 15), context); + expect(2).to.equal(sut.length, 'length check #1'); + expect(sut[0].label).to.equal('concatenation'); + expect(sut[1].label).to.equal('text_part'); + + doc = doc = dynamicDoc({ before2: ': concatenation { }' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 30), context); + expect(1).to.equal(sut.length); + expect(sut[0].label).to.equal('text_part'); + + doc = doc = dynamicDoc({ before2: ': x' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); + expect(1).to.equal(sut.length); + expect(getInsertText(sut[0])).to.equal('x { $0 }'); + + doc = doc = dynamicDoc({ before2: ': column' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 5), context); + expect(2).to.equal(sut.length); + expect(getInsertText(sut[0])).to.equal('column { \n\t$0 \n}'); + expect(getInsertText(sut[1])).to.equal('column { $0 }'); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + test("Hybrid Suggestions - Using Position & Well-Formed Proximity Parent", function () { + try { + const expectedCount = allTiles.length + boxColumnAtts.length - 2; + let doc = dynamicDoc({ before1: 'alignment = right;' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); + expect(expectedCount).to.equal(sut.length, 'length check #1'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); + expect(expectedCount).to.equal(sut.length, 'length check #2'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ before2: 'alignment = right;' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); + expect(expectedCount).to.equal(sut.length, 'length check #2'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`\n: ${item.label} { $0 }`); + } + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + // TODO: Add Paragraph & Concatenation logic + + test("Hybrid Suggestions - Using Position & Fractional Proximity Parent", function () { + try { + let doc = dynamicDoc({ before1: ':' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before1, 99), context); + expect(allTiles.length).to.equal(sut.length, 'length check #3'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + doc = dynamicDoc({ before2: ':' }); + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Before2, 99), context); + expect(allTiles.length).to.equal(sut.length, 'length check #4'); + sut.forEach(item => { + if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); + + + test("Hybrid Suggestions - Using Position without association", function () { + try { + const allCount = allTiles.length + boxColumnAtts.length; + const doc = dynamicDoc({ before1: ': x' }); + let sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank1, 0), context); + expect(sut.length).to.equal(2, 'length check #1'); + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank2 - 1, 99), context); + expect(allCount).to.equal(sut.length, 'length check #2'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} {\n\t\t$0\n\t}`); + } else { + expect(getInsertText(item)).to.equal(`\n\t: ${item.label} { $0 }`); + } + }); + + + sut = invokeCompletionProviderDcl(doc, new Position(LineTarget.Blank2, 99), context); + expect(allCount).to.equal(sut.length, 'length check #3'); + sut.forEach(item => { + if (item.kind === Kinds.ATTRIBUTE) { + expect(getInsertText(item)).to.equal(item.label.toString()); + } else if (compLib.tilesWithChildren.includes(item.label.toString())) { + expect(getInsertText(item)).to.equal(`: ${item.label} {\n\t$0\n}`); + } else { + expect(getInsertText(item)).to.equal(`: ${item.label} { $0 }`); + } + }); + } + catch (err) { + assert.fail(`${err}`); + } + }); diff --git a/extension/src/test/suite/providers.gotoProvider.test.ts b/extension/src/test/suite/providers.gotoProvider.test.ts index 516abc91..7f04b18f 100644 --- a/extension/src/test/suite/providers.gotoProvider.test.ts +++ b/extension/src/test/suite/providers.gotoProvider.test.ts @@ -6,7 +6,7 @@ import { Position } from 'vscode'; import { AutoLispExtProvideDefinition } from "../../providers/gotoProvider"; suite("GotoProvider: Tests", function () { - + let wrkspcDoc: ReadonlyDocument; suiteSetup(() => { @@ -14,40 +14,34 @@ suite("GotoProvider: Tests", function () { const extRootPath = path.resolve(__dirname, '../../../'); const workspaceFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/renaming/modelspace utilities.lsp"); wrkspcDoc = ReadonlyDocument.open(workspaceFileTest); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); - - - - test("AutoLispExtProvideDefinition() - known native test", async function () { + test("AutoLispExtProvideDefinition() - known native test", async function () { try { const pos = new Position(22, 58); // target: princ const sut = await AutoLispExtProvideDefinition(wrkspcDoc, pos); expect(sut).to.equal(null); } catch (err) { - assert.fail("Result should have been null, but returned a value instead"); + assert.fail(`Result should have been null, but returned a value instead\n${err}`); } }); - test("AutoLispExtProvideDefinition() - known primitive test", async function () { + test("AutoLispExtProvideDefinition() - known primitive test", async function () { try { const pos = new Position(31, 23); // target: 2000 const sut = await AutoLispExtProvideDefinition(wrkspcDoc, pos); expect(sut).to.equal(null); } catch (err) { - assert.fail("Result should have been null, but returned a value instead"); + assert.fail(`Result should have been null, but returned a value instead\n${err}`); } }); - - - - test("AutoLispExtProvideDefinition() - known non-native same-source test #1", async function () { + test("AutoLispExtProvideDefinition() - known non-native same-source test #1", async function () { try { const pos = new Position(32, 10); // target: LookBusy const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -56,11 +50,11 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('modelspace utilities.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected same-source scope from known LispAtom"); + assert.fail(`Failed to get expected same-source scope from known LispAtom\n${err}`); } }); - test("AutoLispExtProvideDefinition() - known non-native same-source test #2", async function () { + test("AutoLispExtProvideDefinition() - known non-native same-source test #2", async function () { try { const pos = new Position(48, 22); // target: actvDoc (localized) const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -69,11 +63,11 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('modelspace utilities.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected same-source scope from known LispAtom"); + assert.fail(`Failed to get expected same-source scope from known LispAtom\n${err}`); } }); - test("AutoLispExtProvideDefinition() - known non-native same-source test #3", async function () { + test("AutoLispExtProvideDefinition() - known non-native same-source test #3", async function () { try { const pos = new Position(32, 15); // target: actvDoc (non-localized) const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -82,14 +76,11 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('modelspace utilities.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected same-source scope from known LispAtom"); + assert.fail(`Failed to get expected same-source scope from known LispAtom\n${err}`); } }); - - - - test("AutoLispExtProvideDefinition() - known non-native external test #1", async function () { + test("AutoLispExtProvideDefinition() - known non-native external test #1", async function () { try { const pos = new Position(25, 20); // target: LoadGlobalVariables const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -98,11 +89,11 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('standards.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected external-source scope from known LispAtom"); + assert.fail(`Failed to get expected external-source scope from known LispAtom\n${err}`); } }); - test("AutoLispExtProvideDefinition() - known non-native external test #2", async function () { + test("AutoLispExtProvideDefinition() - known non-native external test #2", async function () { try { const pos = new Position(25, 20); // target: GlobalsAreLoaded const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -111,11 +102,11 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('standards.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected external-source scope from known LispAtom"); + assert.fail(`Failed to get expected external-source scope from known LispAtom\n${err}`); } }); - test("AutoLispExtProvideDefinition() - known non-native external test #3", async function () { + test("AutoLispExtProvideDefinition() - known non-native external test #3", async function () { try { const pos = new Position(17, 20); // target: sfc:style3 const sut = (await AutoLispExtProvideDefinition(wrkspcDoc, pos))[0]; @@ -124,9 +115,7 @@ suite("GotoProvider: Tests", function () { expect(sut.uri.fsPath.endsWith('standards.lsp')).to.equal(true); } catch (err) { - assert.fail("Failed to get expected external-source scope from known LispAtom"); + assert.fail(`Failed to get expected external-source scope from known LispAtom\n${err}`); } }); - - }); \ No newline at end of file diff --git a/extension/src/test/suite/providers.hoverProvider.test.ts b/extension/src/test/suite/providers.hoverProvider.test.ts index 982729c0..de276d86 100644 --- a/extension/src/test/suite/providers.hoverProvider.test.ts +++ b/extension/src/test/suite/providers.hoverProvider.test.ts @@ -5,7 +5,7 @@ import { assert, expect } from 'chai'; import { AutoLispExtProvideHover } from '../../providers/hoverProvider'; import { Annotation } from '../../help/documentationPresenter'; import { ReadonlyDocument } from '../../project/readOnlyDocument'; -import { DocumentServices } from '../../services/documentServices'; +import { DocumentServices, Selectors } from '../../services/documentServices'; import { AutoLispExt } from '../../context'; import { SymbolManager } from "../../symbols"; import { parseDocumentation } from "../../parsing/comments"; @@ -17,253 +17,253 @@ const mdDir = path.resolve(extRootPath, "./extension/src/test/BaselineMDs").repl suite("Providers: Hover", function () { - const regenBaselines = false; // Set true to update baselines, but new baselines must be manually reviewed for acceptable output - const fileOps: fs.EncodingOption = { encoding: 'utf8' }; - const normalize = (str) => str.replace(/\r*\n/g, '\n'); - let lsp: ReadonlyDocument; - let dcl: ReadonlyDocument; - let mock: ReadonlyDocument; - - - suiteSetup(async () => { - AutoLispExt.WebHelpLibrary.year = '2021'; - lsp = ReadonlyDocument.open(lspPath); - dcl = ReadonlyDocument.open(dclPath); - const hasDupes = ';Dynamic Def1\r\n(defun dynamic (x y / z) t)\r\n;Dynamic Def2\r\n(defun dynamic (x y) t)\r\n;Dynamic Def3\r\n(defun dynamic (x) t)\r\n(dynamic x)'; - mock = ReadonlyDocument.createMemoryDocument(hasDupes, DocumentServices.Selectors.LSP); - }); - - test("Generate MD Baselines", function () { - try { - if (!regenBaselines) { - return; - } - - const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables - fs.writeFileSync(`${mdDir}/LoadGlobalVariables.md`, user1['contents'][0].value); - const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText - fs.writeFileSync(`${mdDir}/CCText.md`, user2['contents'][0].value); - const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle - fs.writeFileSync(`${mdDir}/settextstyle.md`, user3['contents'][0].value); - const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented - fs.writeFileSync(`${mdDir}/LookBusy.md`, user4['contents'][0].value); - const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null - expect(user5).to.equal(null); - - - const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string - expect(primitive1).to.equal(null); - const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number - expect(primitive2).to.equal(null); - const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile - expect(primitive3).to.equal(null); - const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string - expect(primitive4).to.equal(null); - const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global - expect(primitive5).to.equal(null); - - - const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command - fs.writeFileSync(`${mdDir}/command.md`, native1['contents'][0].value); - const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not - fs.writeFileSync(`${mdDir}/not.md`, native2['contents'][0].value); - const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq - fs.writeFileSync(`${mdDir}/setq.md`, native3['contents'][0].value); - const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null - expect(native4).to.equal(null); - const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers - fs.writeFileSync(`${mdDir}/vla-get-layers.md`, native5['contents'][0].value); - const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) - fs.writeFileSync(`${mdDir}/vla-put-attachmentpoint.md`, native6['contents'][0].value); - const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) - fs.writeFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, native7['contents'][0].value); - const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) - fs.writeFileSync(`${mdDir}/vlax-3d-point-1.md`, native8['contents'][0].value); - fs.writeFileSync(`${mdDir}/vlax-3d-point-2.md`, native8['contents'][1].value); - - - const active = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 1); - fs.writeFileSync(`${mdDir}/vlax-3d-point-ACTIVE.md`, active.value); - - - const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog - fs.writeFileSync(`${mdDir}/dialog.md`, tile1['contents'][0].value); - const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row - fs.writeFileSync(`${mdDir}/boxed_row.md`, tile2['contents'][0].value); - const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button - fs.writeFileSync(`${mdDir}/button.md`, tile3['contents'][0].value); - const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel - fs.writeFileSync(`${mdDir}/ok_cancel.md`, tile4['contents'][0].value); - - - const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label - fs.writeFileSync(`${mdDir}/label.md`, att1['contents'][0].value); - const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) - fs.writeFileSync(`${mdDir}/children_alignment.md`, att2['contents'][0].value); - const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) - expect(att3).to.equal(null); - const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel - fs.writeFileSync(`${mdDir}/is_cancel.md`, att4['contents'][0].value); - - const dyn = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) - fs.writeFileSync(`${mdDir}/dynamic.md`, dyn['contents'][0].value); - } - catch (err) { - assert.fail(`failed to update baselines: ${err}`); - } - }); - - - test("Primitives LSP|DCL - Expect Null", function () { - try { - const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string - expect(primitive1).to.equal(null); - const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number - expect(primitive2).to.equal(null); - const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile - expect(primitive3).to.equal(null); - const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string - expect(primitive4).to.equal(null); - const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global - expect(primitive5).to.equal(null); - } - catch (err) { - assert.fail("One or more known NULL results returned an unexpected value"); - } - }); - - - test("UserDefined LSP - Markdown Verification", function () { - try { - const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables - expect(normalize(fs.readFileSync(`${mdDir}/LoadGlobalVariables.md`, fileOps))).to.equal(user1['contents'][0].value); - const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText - expect(normalize(fs.readFileSync(`${mdDir}/CCText.md`, fileOps))).to.equal(user2['contents'][0].value); - const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle - expect(normalize(fs.readFileSync(`${mdDir}/settextstyle.md`, fileOps))).to.equal(user3['contents'][0].value); - const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented - expect(normalize(fs.readFileSync(`${mdDir}/LookBusy.md`, fileOps))).to.equal(user4['contents'][0].value); - const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null - expect(user5).to.equal(null); - } - catch (err) { - assert.fail(`One or more of the tracked UserDefined markdown representations drifted from expected results\n${err}`); - } - }); - - - test("Native LSP - Markdown Verification", function () { - try { - const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command - expect(normalize(fs.readFileSync(`${mdDir}/command.md`, fileOps))).to.equal(native1['contents'][0].value); - const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not - expect(normalize(fs.readFileSync(`${mdDir}/not.md`, fileOps))).to.equal(native2['contents'][0].value); - const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq - expect(normalize(fs.readFileSync(`${mdDir}/setq.md`, fileOps))).to.equal(native3['contents'][0].value); - const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null - expect(native4).to.equal(null); - const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers - expect(normalize(fs.readFileSync(`${mdDir}/vla-get-layers.md`, fileOps))).to.equal(native5['contents'][0].value); - const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) - expect(normalize(fs.readFileSync(`${mdDir}/vla-put-attachmentpoint.md`, fileOps))).to.equal(native6['contents'][0].value); - const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) - expect(normalize(fs.readFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, fileOps))).to.equal(native7['contents'][0].value); - const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) - expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-1.md`, fileOps))).to.equal(native8['contents'][0].value); - expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-2.md`, fileOps))).to.equal(native8['contents'][1].value); - } - catch (err) { - assert.fail(`One or more of the tracked Native LSP markdown representations drifted from expected results\n${err}`); - } - }); - - - test("Native DCL Tiles - Markdown Verification", function () { - try { - const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog - expect(normalize(fs.readFileSync(`${mdDir}/dialog.md`, fileOps))).to.equal(tile1['contents'][0].value); - const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row - expect(normalize(fs.readFileSync(`${mdDir}/boxed_row.md`, fileOps))).to.equal(tile2['contents'][0].value); - const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button - expect(normalize(fs.readFileSync(`${mdDir}/button.md`, fileOps))).to.equal(tile3['contents'][0].value); - const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel - expect(normalize(fs.readFileSync(`${mdDir}/ok_cancel.md`, fileOps))).to.equal(tile4['contents'][0].value); - } - catch (err) { - assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); - } - }); - - - test("Native DCL Attributes - Markdown Verification", function () { - try { - const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label - expect(normalize(fs.readFileSync(`${mdDir}/label.md`, fileOps))).to.equal(att1['contents'][0].value); - const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) - expect(normalize(fs.readFileSync(`${mdDir}/children_alignment.md`, fileOps))).to.equal(att2['contents'][0].value); - const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) - expect(att3).to.equal(null); - const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel - expect(normalize(fs.readFileSync(`${mdDir}/is_cancel.md`, fileOps))).to.equal(att4['contents'][0].value); - } - catch (err) { - assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); - } - }); - - - test("UserDefined LSP Dynamic - Markdown Verification", function () { - try { - const dyn1 = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) - expect(normalize(fs.readFileSync(`${mdDir}/dynamic.md`, fileOps))).to.equal(dyn1['contents'][0].value); - } - catch (err) { - assert.fail(`One or more of the tracked UserDefined Dynamic markdown representations drifted from expected results\n${err}`); - } - }); - - - test("Native LSP ActiveIndex - Markdown Verification", function () { - try { - const active1 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 0); - expect(active1.value).to.include("**`x`**"); - const active2 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 1); - expect(active2.value).to.include("**`y`**"); - const active3 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 2); - expect(active3.value).to.include("**`z`**"); - - expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-ACTIVE.md`, fileOps))).to.equal(active2.value); - } - catch (err) { - assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); - } - }); - - - test("UserDefined LSP ActiveIndex - Markdown Verification", function () { - let passedCount = 0; - try { - DocumentServices.findAllDocumentsWithCustomSymbolKey('settextstyle').forEach(doc => { - const flatView = doc.documentContainer.flatten(); - const map = SymbolManager.getSymbolMap(doc); - const defs = map.collectAllSymbols().get('settextstyle').filter(x => x.isDefinition); - - if (defs.length === 0 || !flatView[defs[0].flatIndex].commentLinks) { - return; - } - - const atom = flatView[defs[0].flatIndex]; - const arg = flatView[defs[0].flatIndex + 2]; - const userDocs = parseDocumentation(flatView[atom.commentLinks[atom.commentLinks.length - 1]]); - const active1 = Annotation.asMarkdown(atom, 0, [arg], userDocs, doc.fileName); - expect(active1.value).to.include("**`sfc:style1`**"); - passedCount++; - }); - expect(passedCount).to.equal(1); - } - catch (err) { - assert.fail(`One or more of the tracked UserDefined LSP markdown representations drifted from expected results\n${err}`); - } - }); + const regenBaselines = false; // Set true to update baselines, but new baselines must be manually reviewed for acceptable output + const fileOps: fs.EncodingOption = { encoding: 'utf8' }; + const normalize = (str) => str.replace(/\r*\n/g, '\n'); + let lsp: ReadonlyDocument; + let dcl: ReadonlyDocument; + let mock: ReadonlyDocument; + + + suiteSetup(async () => { + AutoLispExt.WebHelpLibrary.year = '2021'; + lsp = ReadonlyDocument.open(lspPath); + dcl = ReadonlyDocument.open(dclPath); + const hasDupes = ';Dynamic Def1\r\n(defun dynamic (x y / z) t)\r\n;Dynamic Def2\r\n(defun dynamic (x y) t)\r\n;Dynamic Def3\r\n(defun dynamic (x) t)\r\n(dynamic x)'; + mock = ReadonlyDocument.createMemoryDocument(hasDupes, Selectors.LSP); + }); + + test("Generate MD Baselines", function () { + try { + if (!regenBaselines) { + return; + } + + const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables + fs.writeFileSync(`${mdDir}/LoadGlobalVariables.md`, user1['contents'][0].value); + const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText + fs.writeFileSync(`${mdDir}/CCText.md`, user2['contents'][0].value); + const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle + fs.writeFileSync(`${mdDir}/settextstyle.md`, user3['contents'][0].value); + const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented + fs.writeFileSync(`${mdDir}/LookBusy.md`, user4['contents'][0].value); + const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null + expect(user5).to.equal(null); + + + const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string + expect(primitive1).to.equal(null); + const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number + expect(primitive2).to.equal(null); + const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile + expect(primitive3).to.equal(null); + const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string + expect(primitive4).to.equal(null); + const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global + expect(primitive5).to.equal(null); + + + const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command + fs.writeFileSync(`${mdDir}/command.md`, native1['contents'][0].value); + const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not + fs.writeFileSync(`${mdDir}/not.md`, native2['contents'][0].value); + const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq + fs.writeFileSync(`${mdDir}/setq.md`, native3['contents'][0].value); + const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null + expect(native4).to.equal(null); + const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers + fs.writeFileSync(`${mdDir}/vla-get-layers.md`, native5['contents'][0].value); + const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) + fs.writeFileSync(`${mdDir}/vla-put-attachmentpoint.md`, native6['contents'][0].value); + const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) + fs.writeFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, native7['contents'][0].value); + const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) + fs.writeFileSync(`${mdDir}/vlax-3d-point-1.md`, native8['contents'][0].value); + fs.writeFileSync(`${mdDir}/vlax-3d-point-2.md`, native8['contents'][1].value); + + + const active = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 1); + fs.writeFileSync(`${mdDir}/vlax-3d-point-ACTIVE.md`, active.value); + + + const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog + fs.writeFileSync(`${mdDir}/dialog.md`, tile1['contents'][0].value); + const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row + fs.writeFileSync(`${mdDir}/boxed_row.md`, tile2['contents'][0].value); + const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button + fs.writeFileSync(`${mdDir}/button.md`, tile3['contents'][0].value); + const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel + fs.writeFileSync(`${mdDir}/ok_cancel.md`, tile4['contents'][0].value); + + + const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label + fs.writeFileSync(`${mdDir}/label.md`, att1['contents'][0].value); + const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) + fs.writeFileSync(`${mdDir}/children_alignment.md`, att2['contents'][0].value); + const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) + expect(att3).to.equal(null); + const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel + fs.writeFileSync(`${mdDir}/is_cancel.md`, att4['contents'][0].value); + + const dyn = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) + fs.writeFileSync(`${mdDir}/dynamic.md`, dyn['contents'][0].value); + } + catch (err) { + assert.fail(`failed to update baselines: ${err}`); + } + }); + + + test("Primitives LSP|DCL - Expect Null", function () { + try { + const primitive1 = AutoLispExtProvideHover(lsp, new vscode.Position(18, 18)); // expect null - string + expect(primitive1).to.equal(null); + const primitive2 = AutoLispExtProvideHover(lsp, new vscode.Position(31, 23)); // expect null - number + expect(primitive2).to.equal(null); + const primitive3 = AutoLispExtProvideHover(dcl, new vscode.Position(6, 10)); // expect null - comment in Tile + expect(primitive3).to.equal(null); + const primitive4 = AutoLispExtProvideHover(dcl, new vscode.Position(12, 50)); // expect null - string + expect(primitive4).to.equal(null); + const primitive5 = AutoLispExtProvideHover(dcl, new vscode.Position(3, 5)); // expect null - comment global + expect(primitive5).to.equal(null); + } + catch (err) { + assert.fail(`One or more known NULL results returned an unexpected value\n${err}`); + } + }); + + + test("UserDefined LSP - Markdown Verification", function () { + try { + const user1 = AutoLispExtProvideHover(lsp, new vscode.Position(7, 5)); // LoadGlobalVariables + expect(normalize(fs.readFileSync(`${mdDir}/LoadGlobalVariables.md`, fileOps))).to.equal(user1['contents'][0].value); + const user2 = AutoLispExtProvideHover(lsp, new vscode.Position(10, 10)); // C:CText + expect(normalize(fs.readFileSync(`${mdDir}/CCText.md`, fileOps))).to.equal(user2['contents'][0].value); + const user3 = AutoLispExtProvideHover(lsp, new vscode.Position(11, 11)); // settextstyle + expect(normalize(fs.readFileSync(`${mdDir}/settextstyle.md`, fileOps))).to.equal(user3['contents'][0].value); + const user4 = AutoLispExtProvideHover(lsp, new vscode.Position(36, 10)); // LookBusy - local undocumented + expect(normalize(fs.readFileSync(`${mdDir}/LookBusy.md`, fileOps))).to.equal(user4['contents'][0].value); + const user5 = AutoLispExtProvideHover(lsp, new vscode.Position(17, 7)); // expect null + expect(user5).to.equal(null); + } + catch (err) { + assert.fail(`One or more of the tracked UserDefined markdown representations drifted from expected results\n${err}`); + } + }); + + + test("Native LSP - Markdown Verification", function () { + try { + const native1 = AutoLispExtProvideHover(lsp, new vscode.Position(12, 8)); // command + expect(normalize(fs.readFileSync(`${mdDir}/command.md`, fileOps))).to.equal(native1['contents'][0].value); + const native2 = AutoLispExtProvideHover(lsp, new vscode.Position(24, 10)); // not + expect(normalize(fs.readFileSync(`${mdDir}/not.md`, fileOps))).to.equal(native2['contents'][0].value); + const native3 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 10)); // setq + expect(normalize(fs.readFileSync(`${mdDir}/setq.md`, fileOps))).to.equal(native3['contents'][0].value); + const native4 = AutoLispExtProvideHover(lsp, new vscode.Position(39, 14)); // expect null + expect(native4).to.equal(null); + const native5 = AutoLispExtProvideHover(lsp, new vscode.Position(45, 28)); // vla-get-layers + expect(normalize(fs.readFileSync(`${mdDir}/vla-get-layers.md`, fileOps))).to.equal(native5['contents'][0].value); + const native6 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 5)); // vla-put-AttachmentPoint (has Enums) + expect(normalize(fs.readFileSync(`${mdDir}/vla-put-attachmentpoint.md`, fileOps))).to.equal(native6['contents'][0].value); + const native7 = AutoLispExtProvideHover(lsp, new vscode.Position(54, 54)); // acAttachmentPointTopLeft (is Enum) + expect(normalize(fs.readFileSync(`${mdDir}/acAttachmentPointTopLeft.md`, fileOps))).to.equal(native7['contents'][0].value); + const native8 = AutoLispExtProvideHover(lsp, new vscode.Position(55, 25)); // vlax-3d-point (ambiguous function) + expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-1.md`, fileOps))).to.equal(native8['contents'][0].value); + expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-2.md`, fileOps))).to.equal(native8['contents'][1].value); + } + catch (err) { + assert.fail(`One or more of the tracked Native LSP markdown representations drifted from expected results\n${err}`); + } + }); + + + test("Native DCL Tiles - Markdown Verification", function () { + try { + const tile1 = AutoLispExtProvideHover(dcl, new vscode.Position(5, 17)); // dialog + expect(normalize(fs.readFileSync(`${mdDir}/dialog.md`, fileOps))).to.equal(tile1['contents'][0].value); + const tile2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 11)); // boxed_row + expect(normalize(fs.readFileSync(`${mdDir}/boxed_row.md`, fileOps))).to.equal(tile2['contents'][0].value); + const tile3 = AutoLispExtProvideHover(dcl, new vscode.Position(44, 15)); // button + expect(normalize(fs.readFileSync(`${mdDir}/button.md`, fileOps))).to.equal(tile3['contents'][0].value); + const tile4 = AutoLispExtProvideHover(dcl, new vscode.Position(47, 10)); // ok_cancel + expect(normalize(fs.readFileSync(`${mdDir}/ok_cancel.md`, fileOps))).to.equal(tile4['contents'][0].value); + } + catch (err) { + assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); + } + }); + + + test("Native DCL Attributes - Markdown Verification", function () { + try { + const att1 = AutoLispExtProvideHover(dcl, new vscode.Position(7, 7)); // label + expect(normalize(fs.readFileSync(`${mdDir}/label.md`, fileOps))).to.equal(att1['contents'][0].value); + const att2 = AutoLispExtProvideHover(dcl, new vscode.Position(11, 40)); // children_alignment (has Enum) + expect(normalize(fs.readFileSync(`${mdDir}/children_alignment.md`, fileOps))).to.equal(att2['contents'][0].value); + const att3 = AutoLispExtProvideHover(dcl, new vscode.Position(21, 30)); // expect null (horizontal_margin: but doesn't have dedicated help page) + expect(att3).to.equal(null); + const att4 = AutoLispExtProvideHover(dcl, new vscode.Position(42, 60)); // is_cancel + expect(normalize(fs.readFileSync(`${mdDir}/is_cancel.md`, fileOps))).to.equal(att4['contents'][0].value); + } + catch (err) { + assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); + } + }); + + + test("UserDefined LSP Dynamic - Markdown Verification", function () { + try { + const dyn1 = AutoLispExtProvideHover(mock, new vscode.Position(6, 2)); // dynamic (memory LSP document to create edge case scenario) + expect(normalize(fs.readFileSync(`${mdDir}/dynamic.md`, fileOps))).to.equal(dyn1['contents'][0].value); + } + catch (err) { + assert.fail(`One or more of the tracked UserDefined Dynamic markdown representations drifted from expected results\n${err}`); + } + }); + + + test("Native LSP ActiveIndex - Markdown Verification", function () { + try { + const active1 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 0); + expect(active1.value).to.include("**`x`**"); + const active2 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 1); + expect(active2.value).to.include("**`y`**"); + const active3 = Annotation.asMarkdown(AutoLispExt.WebHelpLibrary.ambiguousFunctions.get('vlax-3d-point')[0], 2); + expect(active3.value).to.include("**`z`**"); + + expect(normalize(fs.readFileSync(`${mdDir}/vlax-3d-point-ACTIVE.md`, fileOps))).to.equal(active2.value); + } + catch (err) { + assert.fail(`One or more of the tracked Native DCL markdown representations drifted from expected results\n${err}`); + } + }); + + + test("UserDefined LSP ActiveIndex - Markdown Verification", function () { + let passedCount = 0; + try { + DocumentServices.findAllDocumentsWithCustomSymbolKey('settextstyle').forEach(doc => { + const flatView = doc.documentContainer.flatten(); + const map = SymbolManager.getSymbolMap(doc); + const defs = map.collectAllSymbols().get('settextstyle').filter(x => x.isDefinition); + + if (defs.length === 0 || !flatView[defs[0].flatIndex].commentLinks) { + return; + } + + const atom = flatView[defs[0].flatIndex]; + const arg = flatView[defs[0].flatIndex + 2]; + const userDocs = parseDocumentation(flatView[atom.commentLinks[atom.commentLinks.length - 1]]); + const active1 = Annotation.asMarkdown(atom, 0, [arg], userDocs, doc.fileName); + expect(active1.value).to.include("**`sfc:style1`**"); + passedCount++; + }); + expect(passedCount).to.equal(1); + } + catch (err) { + assert.fail(`One or more of the tracked UserDefined LSP markdown representations drifted from expected results\n${err}`); + } + }); }); \ No newline at end of file diff --git a/extension/src/test/suite/providers.referenceProvider.test.ts b/extension/src/test/suite/providers.referenceProvider.test.ts index 61d8fcff..fef28371 100644 --- a/extension/src/test/suite/providers.referenceProvider.test.ts +++ b/extension/src/test/suite/providers.referenceProvider.test.ts @@ -6,7 +6,7 @@ import { Position } from 'vscode'; import { AutoLispExtProvideReferences } from "../../providers/referenceProvider"; suite("ReferenceProvider: Tests", function () { - + let singleDoc: ReadonlyDocument; let wrkspcDoc: ReadonlyDocument; @@ -17,100 +17,100 @@ suite("ReferenceProvider: Tests", function () { const workspaceFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/renaming/modelspace utilities.lsp"); singleDoc = ReadonlyDocument.open(singleLispFileTest); wrkspcDoc = ReadonlyDocument.open(workspaceFileTest); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); - test("AutoLispExtProvideReferences() - known value type test #1", async function () { + test("AutoLispExtProvideReferences() - known value type test #1", async function () { try { const loc = new Position(91, 30); // pos of a string const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut).to.equal(null); } catch (err) { - assert.fail("Found Locations for known invalid Position/LispAtom"); + assert.fail(`Found Locations for known invalid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known value type test #2", async function () { + test("AutoLispExtProvideReferences() - known value type test #2", async function () { try { const loc = new Position(89, 20); // pos of a comment const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut).to.equal(null); } catch (err) { - assert.fail("Found Locations for known invalid Position/LispAtom"); + assert.fail(`Found Locations for known invalid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known value type test #3", async function () { + test("AutoLispExtProvideReferences() - known value type test #3", async function () { try { const loc = new Position(85, 87); // pos of a number const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut).to.equal(null); } catch (err) { - assert.fail("Found Locations for known invalid Position/LispAtom"); + assert.fail(`Found Locations for known invalid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known native test", async function () { + test("AutoLispExtProvideReferences() - known native test", async function () { try { const loc = new Position(29, 5); // pos of 'foreach' const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut.length).to.equal(1); } catch (err) { - assert.fail("Failed to get Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known localized test #1", async function () { + test("AutoLispExtProvideReferences() - known localized test #1", async function () { try { - const loc = new Position(29 , 12); // pos of 'rando' + const loc = new Position(29, 12); // pos of 'rando' const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut.length).to.equal(2); } catch (err) { - assert.fail("Failed to get Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known localized test #2", async function () { + test("AutoLispExtProvideReferences() - known localized test #2", async function () { try { - const loc = new Position(43 , 20); // pos of 'markups' + const loc = new Position(43, 20); // pos of 'markups' const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut.length).to.equal(9); } catch (err) { - assert.fail("Failed to get Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known localized only test", async function () { + test("AutoLispExtProvideReferences() - known localized only test", async function () { try { const loc = new Position(71, 24); // pos of 'ptf' const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut.length).to.equal(1); } catch (err) { - assert.fail("Failed to get Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - known non-localized function name test", async function () { + test("AutoLispExtProvideReferences() - known non-localized function name test", async function () { try { const loc = new Position(114, 30); // pos of 'collectMarkups' const sut = await AutoLispExtProvideReferences(singleDoc, loc); expect(sut.length).to.equal(2); } catch (err) { - assert.fail("Failed to get Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - workspace known @Global test", async function () { + test("AutoLispExtProvideReferences() - workspace known @Global test", async function () { try { const loc = new Position(11, 11); // pos of 'SetTextStyle' const sut = await AutoLispExtProvideReferences(wrkspcDoc, loc); @@ -118,11 +118,11 @@ suite("ReferenceProvider: Tests", function () { expect(new Set(sut.map(x => x.uri.fsPath)).size).to.equal(3); } catch (err) { - assert.fail("Failed to get workspace Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get workspace Locations for known valid Position/LispAtom\n${err}`); } }); - test("AutoLispExtProvideReferences() - workspace known Non-@Global test", async function () { + test("AutoLispExtProvideReferences() - workspace known Non-@Global test", async function () { try { const loc = new Position(17, 11); // pos of 'SetDimStyle' const sut = await AutoLispExtProvideReferences(wrkspcDoc, loc); @@ -130,7 +130,7 @@ suite("ReferenceProvider: Tests", function () { expect(new Set(sut.map(x => x.uri.fsPath)).size).to.equal(1); } catch (err) { - assert.fail("Failed to get workspace Locations for known valid Position/LispAtom"); + assert.fail(`Failed to get workspace Locations for known valid Position/LispAtom\n${err}`); } }); diff --git a/extension/src/test/suite/providers.renameProvider.test.ts b/extension/src/test/suite/providers.renameProvider.test.ts index 1f9c5d01..ec2f8d27 100644 --- a/extension/src/test/suite/providers.renameProvider.test.ts +++ b/extension/src/test/suite/providers.renameProvider.test.ts @@ -7,7 +7,7 @@ import { ReadonlyDocument } from '../../project/readOnlyDocument'; import { IRootSymbolHost, SymbolManager } from '../../symbols'; import { TDD, AutoLispExtPrepareRename, AutoLispExtProvideRenameEdits } from '../../providers/renameProvider'; import { AutoLispExt } from '../../context'; -import { WorkspaceEdit } from 'vscode-languageclient'; +//import { WorkspaceEdit } from 'vscode-languageclient'; let docSymbols: IRootSymbolHost; @@ -35,9 +35,6 @@ suite("RenameProvider: Tests", function () { localArg = new Position(50, 24); }); - - - test("AutoLispExtPrepareRename() Valid Atom", function () { try { const prepResult = AutoLispExtPrepareRename(roDoc, good); @@ -48,7 +45,7 @@ suite("RenameProvider: Tests", function () { expect(prepResult.placeholder).to.equal('GlobalsAreLoaded'); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -57,20 +54,17 @@ suite("RenameProvider: Tests", function () { expect(AutoLispExtPrepareRename(roDoc, bad)).to.equal(null); } catch (err) { - assert.fail("The known bad position did not error"); + assert.fail(`The known bad position did not error\n${err}`); } }); - - - test("AutoLispExtProvideRenameEdits() Un-Hosted Atom", async function () { try { const sut = AutoLispExtProvideRenameEdits(roDoc, outlier, 'anything'); expect(sut.entries().length).to.equal(1); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -80,7 +74,7 @@ suite("RenameProvider: Tests", function () { expect(sut.entries().length).to.equal(1); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -90,7 +84,7 @@ suite("RenameProvider: Tests", function () { expect(sut.entries().length).to.equal(3); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -100,7 +94,7 @@ suite("RenameProvider: Tests", function () { expect(sut.entries().length).to.equal(1); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -110,7 +104,7 @@ suite("RenameProvider: Tests", function () { expect(sut).to.equal(null); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -120,7 +114,7 @@ suite("RenameProvider: Tests", function () { expect(sut.entries().length).to.equal(1); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -131,7 +125,7 @@ suite("RenameProvider: Tests", function () { expect(sut['a'].length).to.equal(4); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); @@ -145,13 +139,10 @@ suite("RenameProvider: Tests", function () { }); } catch (err) { - assert.fail("The known position failed to produced results or results other than expected"); + assert.fail(`The known position failed to produced results or results other than expected\n${err}`); } }); - - - test("RenameProviderSupport.getRenameTargetsFromParentScope()", function () { try { docSymbols = SymbolManager.getSymbolMap(roDoc); @@ -159,7 +150,7 @@ suite("RenameProvider: Tests", function () { expect(targets.length).to.equal(3); } catch (err) { - assert.fail("The test global symbol query produced no results or an unexpected quantity"); + assert.fail(`The test global symbol query produced no results or an unexpected quantity\n${err}`); } }); @@ -173,7 +164,7 @@ suite("RenameProvider: Tests", function () { expect(sut).to.equal(null); } catch (err) { - assert.fail("The test symbol values failed to produce expected results"); + assert.fail(`The test symbol values failed to produce expected results\n${err}`); } }); @@ -186,7 +177,7 @@ suite("RenameProvider: Tests", function () { expect(sut).to.equal(false); } catch (err) { - assert.fail("The test symbol values failed to produce expected results"); + assert.fail(`The test symbol values failed to produce expected results\n${err}`); } }); @@ -201,7 +192,7 @@ suite("RenameProvider: Tests", function () { expect(TDD.isValidInput('ok45')).to.equal(true); } catch (err) { - assert.fail("The test symbol values failed to produce expected results"); + assert.fail(`The test symbol values failed to produce expected results\n${err}`); } }); diff --git a/extension/src/test/suite/services.documentServices.test.ts b/extension/src/test/suite/services.documentServices.test.ts index c6759111..3e1ad5d3 100644 --- a/extension/src/test/suite/services.documentServices.test.ts +++ b/extension/src/test/suite/services.documentServices.test.ts @@ -9,21 +9,21 @@ import { ReadonlyDocument } from '../../project/readOnlyDocument'; suite("Analysis Support: DocumentServices Tests", function () { - + let roDoc: ReadonlyDocument; let projUri: vscode.Uri; suiteSetup(() => { try { const extRootPath = path.resolve(__dirname, '../../../'); - + const lispFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/test_case/symbols.lsp"); roDoc = ReadonlyDocument.open(lispFileTest); - + const projectPath = path.resolve(extRootPath, "./extension/src/test/SourceFile/test_case/assorted.prj"); projUri = vscode.Uri.file(projectPath); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); @@ -31,59 +31,50 @@ suite("Analysis Support: DocumentServices Tests", function () { ProjectTreeProvider.instance().updateData(null); }); - - - - test("normalizePath() - should matched expected normalized output", function () { + test("normalizePath() - should matched expected normalized output", function () { try { const testPath = 'C:\\test\\folder\\and\\File.lsp'; - const output = DocumentServices.normalizeFilePath(testPath); + const output = DocumentServices.normalizeFilePath(testPath); expect(output).to.equal('C:/test/folder/and/File.lsp'); } catch (err) { - assert.fail("Path normalizer function did not return expected normalized path"); + assert.fail(`Path normalizer function did not return expected normalized path\n${err}`); } }); - - - - test("findAllDocumentsWithSymbolKey() - expect at least 1 ReadOnlyDocument", function () { - try { + test("findAllDocumentsWithSymbolKey() - expect at least 1 ReadOnlyDocument", function () { + try { const sut = DocumentServices.findAllDocumentsWithCustomSymbolKey('a'); expect(sut.length).to.be.at.least(1); } catch (err) { - assert.fail("Invalid quantity of found documents within the Project, Editor & Workspace"); + assert.fail(`Invalid quantity of found documents within the Project, Editor & Workspace\n${err}`); } }); - - test("findAllDocumentsWithSymbolKey() - expect 0 documents returned", function () { + + test("findAllDocumentsWithSymbolKey() - expect 0 documents returned", function () { try { - const rootNode = OpenProjectFile(projUri); + const rootNode = OpenProjectFile(projUri); ProjectTreeProvider.instance().updateData(rootNode); const output = DocumentServices.findAllDocumentsWithCustomSymbolKey('command'); expect(output.length).to.equal(0); } catch (err) { - assert.fail("Invalid quantity of found documents within the Project, Editor & Workspace"); + assert.fail(`Invalid quantity of found documents within the Project, Editor & Workspace\n${err}`); } }); - - - - test("hasUnverifiedGlobalizers() - Expect true using symbols.lsp", function () { + test("hasUnverifiedGlobalizers() - Expect true using symbols.lsp", function () { try { const sut = DocumentServices.hasUnverifiedGlobalizers(roDoc); expect(sut).to.equal(true); } catch (err) { - assert.fail("Should not return false in source with known/valid @Global comments"); + assert.fail(`Should not return false in source with known/valid @Global comments\n${err}`); } }); - test("hasUnverifiedGlobalizers() - Expect false using a dynamic lsp", function () { + test("hasUnverifiedGlobalizers() - Expect false using a dynamic lsp", function () { try { const malformed = '(defun doStuff()\n(command "line" pause pause)\n(princ))\n;some comment\n(princ)\n32)'; const memDoc = ReadonlyDocument.createMemoryDocument(malformed, 'autolisp'); @@ -91,40 +82,37 @@ suite("Analysis Support: DocumentServices Tests", function () { expect(sut).to.equal(false); } catch (err) { - assert.fail("Should not return true in source without any @Global comments"); + assert.fail(`Should not return true in source without any @Global comments\n${err}`); } }); - - - - test("hasGlobalizedTargetKey() - GV:Field0 has an @Global, but is also localized", function () { + test("hasGlobalizedTargetKey() - GV:Field0 has an @Global, but is also localized", function () { try { const sut = DocumentServices.hasGlobalizedTargetKey(roDoc, 'gv:field0'); expect(sut).to.equal(false); } catch (err) { - assert.fail("Invalid quantity of found documents within the Project, Editor & Workspace"); + assert.fail(`Invalid quantity of found documents within the Project, Editor & Workspace\n${err}`); } }); - test("hasGlobalizedTargetKey() - GV:Field1 has an @Global and is not localized", function () { - try { + test("hasGlobalizedTargetKey() - GV:Field1 has an @Global and is not localized", function () { + try { const output = DocumentServices.hasGlobalizedTargetKey(roDoc, 'gv:field1'); expect(output).to.equal(true); } catch (err) { - assert.fail("Invalid quantity of found documents within the Project, Editor & Workspace"); + assert.fail(`Invalid quantity of found documents within the Project, Editor & Workspace\n${err}`); } }); - test("hasGlobalizedTargetKey() - target key does not exist", function () { - try { + test("hasGlobalizedTargetKey() - target key does not exist", function () { + try { const output = DocumentServices.hasGlobalizedTargetKey(roDoc, 'anyRandomName'); expect(output).to.equal(false); } catch (err) { - assert.fail("Should not return true with the provided non-existent key"); + assert.fail(`Should not return true with the provided non-existent key\n${err}`); } }); diff --git a/extension/src/test/suite/services.flatContainerServices.test.ts b/extension/src/test/suite/services.flatContainerServices.test.ts index b5eebd79..0df02812 100644 --- a/extension/src/test/suite/services.flatContainerServices.test.ts +++ b/extension/src/test/suite/services.flatContainerServices.test.ts @@ -7,7 +7,7 @@ import { LispAtom } from '../../astObjects/lispAtom'; suite("Analysis Support: FlatContainerServices Tests", function () { - + let roDoc: ReadonlyDocument; let flatView: Array; @@ -16,14 +16,13 @@ suite("Analysis Support: FlatContainerServices Tests", function () { const extRootPath = path.resolve(__dirname, '../../../'); const lispFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/test_case/symbols.lsp"); roDoc = ReadonlyDocument.open(lispFileTest); - flatView = roDoc.documentContainer.flatten(); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + flatView = roDoc.documentContainer.flatten(); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); - - test("isPossibleFunctionReference() - Known good function references", function () { + test("isPossibleFunctionReference() - Known good function references", function () { try { const sut1 = FlatContainerServices.isPossibleFunctionReference(flatView, flatView[42]); const sut2 = FlatContainerServices.isPossibleFunctionReference(flatView, flatView[58]); @@ -31,11 +30,11 @@ suite("Analysis Support: FlatContainerServices Tests", function () { expect(sut2).to.equal(true); } catch (err) { - assert.fail("Known value returned unexpected False result"); + assert.fail(`Known value returned unexpected False result\n${err}`); } }); - test("isPossibleFunctionReference() - Known bad function references", function () { + test("isPossibleFunctionReference() - Known bad function references", function () { try { const sut1 = FlatContainerServices.isPossibleFunctionReference(flatView, flatView[72]); const sut2 = FlatContainerServices.isPossibleFunctionReference(flatView, flatView[79]); @@ -45,90 +44,87 @@ suite("Analysis Support: FlatContainerServices Tests", function () { expect(sut3).to.equal(false); } catch (err) { - assert.fail("Known value returned unexpected True result"); + assert.fail(`Known value returned unexpected True result\n${err}`); } }); - test("verifyAtomIsDefunAndGlobalized() - Valid global defun from Inline Comment", function () { + test("verifyAtomIsDefunAndGlobalized() - Valid global defun from Inline Comment", function () { try { const result = FlatContainerServices.verifyAtomIsDefunAndGlobalized(flatView, flatView[42]); expect(result).to.equal(true); } catch (err) { - assert.fail("Known value returned unexpected False result"); + assert.fail(`Known value returned unexpected False result\n${err}`); } }); - test("verifyAtomIsDefunAndGlobalized() - Valid global defun from Block Comment", function () { + test("verifyAtomIsDefunAndGlobalized() - Valid global defun from Block Comment", function () { try { const result = FlatContainerServices.verifyAtomIsDefunAndGlobalized(flatView, flatView[32]); expect(result).to.equal(true); } catch (err) { - assert.fail("Known value returned unexpected False result"); + assert.fail(`Known value returned unexpected False result\n${err}`); } }); - test("verifyAtomIsDefunAndGlobalized() - Is defun but not globalized", function () { + test("verifyAtomIsDefunAndGlobalized() - Is defun but not globalized", function () { try { const result = FlatContainerServices.verifyAtomIsDefunAndGlobalized(flatView, flatView[53]); expect(result).to.equal(false); } catch (err) { - assert.fail("Known value returned unexpected True result"); + assert.fail(`Known value returned unexpected True result\n${err}`); } }); - test("verifyAtomIsDefunAndGlobalized() - Invalid non-defun scope", function () { + test("verifyAtomIsDefunAndGlobalized() - Invalid non-defun scope", function () { try { const result = FlatContainerServices.verifyAtomIsDefunAndGlobalized(flatView, flatView[75]); expect(result).to.equal(false); } catch (err) { - assert.fail("Known value returned unexpected True result"); + assert.fail(`Known value returned unexpected True result\n${err}`); } }); - - - - test("verifyAtomIsSetqAndGlobalized() - Valid setq & global by Block Comment", function () { + test("verifyAtomIsSetqAndGlobalized() - Valid setq & global by Block Comment", function () { try { const result = FlatContainerServices.verifyAtomIsSetqAndGlobalized(flatView, flatView[67]); expect(result).to.equal(true); } catch (err) { - assert.fail("Known value returned unexpected False result"); + assert.fail(`Known value returned unexpected False result\n${err}`); } }); - test("verifyAtomIsSetqAndGlobalized() - Valid setq & global by Inline Comment", function () { + test("verifyAtomIsSetqAndGlobalized() - Valid setq & global by Inline Comment", function () { try { const result = FlatContainerServices.verifyAtomIsSetqAndGlobalized(flatView, flatView[72]); expect(result).to.equal(true); } catch (err) { - assert.fail("Known value returned unexpected False result"); + assert.fail(`Known value returned unexpected False result\n${err}`); } }); - - test("verifyAtomIsSetqAndGlobalized() - Invalid global, but is setq scope", function () { + + test("verifyAtomIsSetqAndGlobalized() - Invalid global, but is setq scope", function () { try { const result = FlatContainerServices.verifyAtomIsSetqAndGlobalized(flatView, flatView[75]); expect(result).to.equal(false); } catch (err) { - assert.fail("Known value returned unexpected True result"); + assert.fail(`Known value returned unexpected True result\n${err}`); } }); - test("verifyAtomIsSetqAndGlobalized() - Invalid global and non-setq scope", function () { + test("verifyAtomIsSetqAndGlobalized() - Invalid global and non-setq scope", function () { try { const result = FlatContainerServices.verifyAtomIsSetqAndGlobalized(flatView, flatView[78]); expect(result).to.equal(false); } catch (err) { - assert.fail("Known value returned unexpected True result"); + assert.fail(`Known value returned unexpected True result\n${err}`); } }); diff --git a/extension/src/test/suite/services.lispContainerServices.test.ts b/extension/src/test/suite/services.lispContainerServices.test.ts index d9250142..4c2f3e5f 100644 --- a/extension/src/test/suite/services.lispContainerServices.test.ts +++ b/extension/src/test/suite/services.lispContainerServices.test.ts @@ -14,15 +14,15 @@ suite("Analysis Support: LispContainerServices Tests", function () { const extRootPath = path.resolve(__dirname, '../../../'); const lispFileTest = path.resolve(extRootPath, "./extension/src/test/SourceFile/test_case/symbols.lsp"); roDoc = ReadonlyDocument.open(lispFileTest); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); - test("getLispContainerTypeName() - valid container inputs", function () { + test("getLispContainerTypeName() - valid container inputs", function () { try { const defun = LispContainerServices.getLispContainerTypeName(roDoc.documentContainer.atoms[1]); const setq = LispContainerServices.getLispContainerTypeName(roDoc.documentContainer.atoms[7]); @@ -30,37 +30,37 @@ suite("Analysis Support: LispContainerServices Tests", function () { expect(setq).to.equal('setq'); } catch (err) { - assert.fail("Known LispContainers did not produce expected value results"); + assert.fail(`Known LispContainers did not produce expected value results\n${err}`); } }); - test("getLispContainerTypeName() - primitive container input", function () { + test("getLispContainerTypeName() - primitive container input", function () { try { const qList = LispContainerServices.getLispContainerTypeName(roDoc.documentContainer.atoms[11].body.atoms[3]); expect(qList).to.equal('*primitive*'); } catch (err) { - assert.fail("Known LispContainers did not produce expected value results"); + assert.fail(`Known LispContainers did not produce expected value results\n${err}`); } }); - test("getLispContainerTypeName() - invalid container input", function () { + test("getLispContainerTypeName() - invalid container input", function () { try { const unknown = LispContainerServices.getLispContainerTypeName(roDoc.documentContainer.atoms[11].body.atoms[6]); expect(unknown).to.equal('*invalid*'); } catch (err) { - assert.fail("Known invalid LispAtom input did not produce expected value results"); + assert.fail(`Known invalid LispAtom input did not produce expected value results\n${err}`); } }); - test("getLispContainerTypeName() - invalid atomic input", function () { + test("getLispContainerTypeName() - invalid atomic input", function () { try { const unknown = LispContainerServices.getLispContainerTypeName(roDoc.documentContainer.atoms[0]); expect(unknown).to.equal('*unknown*'); } catch (err) { - assert.fail("Known invalid LispAtom input did not produce expected value results"); + assert.fail(`Known invalid LispAtom input did not produce expected value results\n${err}`); } }); diff --git a/extension/src/test/suite/services.symbolServices.test.ts b/extension/src/test/suite/services.symbolServices.test.ts index afa2fafb..fe1f46d0 100644 --- a/extension/src/test/suite/services.symbolServices.test.ts +++ b/extension/src/test/suite/services.symbolServices.test.ts @@ -11,7 +11,7 @@ let symbolMap: IRootSymbolHost; let flatView: Array; suite("Analysis Support: SymbolServices Tests", function () { - + suiteSetup(() => { try { @@ -23,102 +23,102 @@ suite("Analysis Support: SymbolServices Tests", function () { symbolMap = SymbolManager.getSymbolMap(roDoc); // flatView - used on all other tests because it is more efficient flatView = roDoc.documentContainer.flatten(); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); - test("isNative() test on Known & Unknown symbols", function () { + test("isNative() test on Known & Unknown symbols", function () { try { expect(SymbolServices.isNative('command')).to.equal(true); expect(SymbolServices.isNative('COMMAND')).to.equal(false); expect(SymbolServices.isNative('xyz')).to.equal(false); } catch (err) { - assert.fail("Values known to be or not be native AutoLisp symbols returned unexpected results"); + assert.fail(`Values known to be or not be native AutoLisp symbols returned unexpected results\n${err}`); } }); - test("hasGlobalFlag() - Defun exported by multi-line block tag", function () { + test("hasGlobalFlag() - Defun exported by multi-line block tag", function () { try { const target = symbolMap.items[0].asHost.named; const result = SymbolServices.hasGlobalFlag(roDoc, target); expect(result).to.equal(true); } catch (err) { - assert.fail("A known @Global ISymbolReference should not have returned false"); + assert.fail(`A known @Global ISymbolReference should not have returned false\n${err}`); } }); - test("hasGlobalFlag() - Defun exported by single block tag", function () { + test("hasGlobalFlag() - Defun exported by single block tag", function () { try { const target = symbolMap.items[1].asHost.named; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(true); } catch (err) { - assert.fail("A known @Global ISymbolReference should not have returned false"); + assert.fail(`A known @Global ISymbolReference should not have returned false\n${err}`); } }); - test("hasGlobalFlag() - Defun exported by inline tag", function () { + test("hasGlobalFlag() - Defun exported by inline tag", function () { try { const target = symbolMap.items[2].asHost.named; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(true); } catch (err) { - assert.fail("A known @Global ISymbolReference should not have returned false"); + assert.fail(`A known @Global ISymbolReference should not have returned false\n${err}`); } }); - test("hasGlobalFlag() - Defun commented but not exported", function () { + test("hasGlobalFlag() - Defun commented but not exported", function () { try { const target = symbolMap.items[3].asHost.named; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(false); } catch (err) { - assert.fail("A known non-@Global ISymbolReference should not have returned true"); + assert.fail(`A known non-@Global ISymbolReference should not have returned true\n${err}`); } }); - test("hasGlobalFlag() - Nested Setq tagged to export but localized", function () { + test("hasGlobalFlag() - Nested Setq tagged to export but localized", function () { try { // this atom is technically localized by the defun, which nullifies the @Global comment. // However, this is not the point where the program understands that. The RenameProvider // will directly handle that level of due diligence verification for edge cases. const target = symbolMap.items[0].asHost.items[3]; // npm run test ERROR - const result = SymbolServices.hasGlobalFlag(flatView, target); + const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(true); } catch (err) { - assert.fail("A known @Global ISymbolReference should not have returned false"); + assert.fail(`A known @Global ISymbolReference should not have returned false\n${err}`); } }); - test("hasGlobalFlag() - Nested Setq exported inline and not localized", function () { + test("hasGlobalFlag() - Nested Setq exported inline and not localized", function () { try { const target = symbolMap.items[0].asHost.items[4]; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(true); } catch (err) { - assert.fail("A known @Global ISymbolReference should not have returned false"); + assert.fail(`A known @Global ISymbolReference should not have returned false\n${err}`); } }); - test("hasGlobalFlag() - Nested Setq localized not export tagged", function () { + test("hasGlobalFlag() - Nested Setq localized not export tagged", function () { try { const target = symbolMap.items[0].asHost.items[5]; // npm run test ERROR @@ -126,29 +126,29 @@ suite("Analysis Support: SymbolServices Tests", function () { expect(result).to.equal(false); } catch (err) { - assert.fail("A known non-@Global ISymbolReference should not have returned true"); + assert.fail(`A known non-@Global ISymbolReference should not have returned true\n${err}`); } }); - test("hasGlobalFlag() - Nested Setq not localized or export tagged", function () { + test("hasGlobalFlag() - Nested Setq not localized or export tagged", function () { try { const target = symbolMap.items[0].asHost.items[6]; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(false); } catch (err) { - assert.fail("A known non-@Global ISymbolReference should not have returned true"); + assert.fail(`A known non-@Global ISymbolReference should not have returned true\n${err}`); } }); - test("hasGlobalFlag() - using SymbolHost as invalid argument", function () { + test("hasGlobalFlag() - using SymbolHost as invalid argument", function () { try { const target = symbolMap.items[0]; const result = SymbolServices.hasGlobalFlag(flatView, target); expect(result).to.equal(false); } catch (err) { - assert.fail("A known invalid ISymbolReference should not have returned true"); + assert.fail(`A known invalid ISymbolReference should not have returned true\n${err}`); } }); diff --git a/extension/src/test/suite/symbols.test.ts b/extension/src/test/suite/symbols.test.ts index 334b1187..04dbdf1c 100644 --- a/extension/src/test/suite/symbols.test.ts +++ b/extension/src/test/suite/symbols.test.ts @@ -7,7 +7,7 @@ import { SymbolManager, IRootSymbolHost, ISymbolHost, ISymbolReference } from '. let roDoc: ReadonlyDocument; let symbolMap: IRootSymbolHost; -suite("SymbolManager & Object Method Tests", function () { +suite("SymbolManager & Object Method Tests", function () { suiteSetup(() => { @@ -18,25 +18,22 @@ suite("SymbolManager & Object Method Tests", function () { symbolMap = SymbolManager.getSymbolMap(roDoc, true); symbolMap = SymbolManager.getSymbolMap(roDoc); expect(symbolMap.items.length).to.be.at.least(10); - } catch (error) { - assert.fail("Failed to initialize shared suite data sources"); + } catch (err) { + assert.fail(`Failed to initialize shared suite data sources\n${err}`); } }); suiteTeardown(() => { try { - expect(symbolMap.isValid).to.equal(true); + expect(symbolMap.isValid).to.equal(true); SymbolManager.invalidateSymbolMapCache(); - expect(symbolMap.isValid).to.equal(false); - } catch (error) { - assert.fail("Failed to dispose known Symbol Map"); + expect(symbolMap.isValid).to.equal(false); + } catch (err) { + assert.fail(`Failed to dispose known Symbol Map\n${err}`); } }); - - - - test("NamedSymbolReference - Property Expectation", function () { + test("NamedSymbolReference - Property Expectation", function () { try { const sut = symbolMap.items[0].asHost.named; expect(sut.asHost).to.equal(null); @@ -46,16 +43,16 @@ suite("SymbolManager & Object Method Tests", function () { expect(sut.hasId).to.equal(true); expect(sut.id).to.equal("c:whatever"); expect(sut.isDefinition).to.equal(true); - expect(sut.isLocalization).to.equal(false); + expect(sut.isLocalization).to.equal(false); expect(sut.parent.parent).to.equal(symbolMap); expect(sut.range.start.line).to.equal(13); } catch (err) { - assert.fail("At least one of the various properties initialized to unexpected results"); + assert.fail(`At least one of the various properties initialized to unexpected results\n${err}`); } }); - test("NamedSymbolHost - Property Expectation", function () { + test("NamedSymbolHost - Property Expectation", function () { try { const sut = symbolMap.items[0].asHost; expect(sut.asHost).to.equal(sut); @@ -69,11 +66,11 @@ suite("SymbolManager & Object Method Tests", function () { expect(sut.range.start.line).to.equal(13); } catch (err) { - assert.fail("At least one of the various properties initialized to unexpected results"); + assert.fail(`At least one of the various properties initialized to unexpected results\n${err}`); } }); - test("AnonymousSymbolHost - Property Expectation", function () { + test("AnonymousSymbolHost - Property Expectation", function () { try { const sut = symbolMap as ISymbolHost; expect(sut.asHost).to.equal(sut); @@ -87,14 +84,11 @@ suite("SymbolManager & Object Method Tests", function () { expect(sut.range.start.line).to.equal(3); } catch (err) { - assert.fail("At least one of the various properties initialized to unexpected results"); + assert.fail(`At least one of the various properties initialized to unexpected results\n${err}`); } }); - - - - test("ISymbolBase.equal() - complete sub-type coverage test", function () { + test("ISymbolBase.equal() - complete sub-type coverage test", function () { try { const nHost = symbolMap.items[0].asHost; const nRef = symbolMap.items[0].asHost.named; @@ -105,91 +99,82 @@ suite("SymbolManager & Object Method Tests", function () { expect(nRef.equal(nHost)).to.equal(false); } catch (err) { - assert.fail("Failed to yield expected truthy results"); + assert.fail(`Failed to yield expected truthy results\n${err}`); } }); - - - - test("ISymbolReference.findLocalizingParent() - using localized symbol", function () { + test("ISymbolReference.findLocalizingParent() - using localized symbol", function () { try { const sut = symbolMap.items[0].asHost.items[7].asReference; const result = sut.findLocalizingParent(); expect(result).to.equal(symbolMap.items[0]); } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - test("ISymbolReference.findLocalizingParent() - using globalized symbol", function () { + test("ISymbolReference.findLocalizingParent() - using globalized symbol", function () { try { const sut = symbolMap.items[0].asHost.items[4].asReference; const result = sut.findLocalizingParent(); expect(result).to.equal(symbolMap); } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - - - - test("ISymbolHost.findLocalizingParent() - using NamedSymbolHost with localized name", function () { + test("ISymbolHost.findLocalizingParent() - using NamedSymbolHost with localized name", function () { try { const sut = symbolMap.items[0].asHost; const result = sut.findLocalizingParent('gv:field0'); expect(result).to.equal(symbolMap.items[0]); } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - test("ISymbolHost.findLocalizingParent() - using NamedSymbolHost with global name", function () { + test("ISymbolHost.findLocalizingParent() - using NamedSymbolHost with global name", function () { try { const sut = symbolMap.items[0].asHost; const result = sut.findLocalizingParent('gv:field1'); expect(result).to.equal(symbolMap); } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - - - test("IRootSymbolHost.collectAllSymbols() - verify effective accumulation", function () { try { const sut = symbolMap.collectAllSymbols(); [ - {id: 'c:whatever', count: 1}, - {id: 'a', count: 3}, - {id: 'b', count: 1}, - {id: 'gv:field0', count: 2}, - {id: 'gv:field1', count: 2}, - {id: 'c', count: 1}, - {id: 'c:stuffandthings', count: 1}, - {id: 'c:stuff&things', count: 1}, - {id: 'c:dostuff', count: 1}, - {id: 'gv:field2', count: 2}, - {id: 'gv:field3', count: 1}, - {id: 'gv:field4', count: 1}, - {id: 'gv:field5', count: 1} + { id: 'c:whatever', count: 1 }, + { id: 'a', count: 3 }, + { id: 'b', count: 1 }, + { id: 'gv:field0', count: 2 }, + { id: 'gv:field1', count: 2 }, + { id: 'c', count: 1 }, + { id: 'c:stuffandthings', count: 1 }, + { id: 'c:stuff&things', count: 1 }, + { id: 'c:dostuff', count: 1 }, + { id: 'gv:field2', count: 2 }, + { id: 'gv:field3', count: 1 }, + { id: 'gv:field4', count: 1 }, + { id: 'gv:field5', count: 1 } ].forEach(entry => { expect(sut.get(entry.id).length).to.equal(entry.count); }); } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - test("IRootSymbolHost.collectAllSymbols() - provided vs generated symbol collection Map<>", function () { + test("IRootSymbolHost.collectAllSymbols() - provided vs generated symbol collection Map<>", function () { try { // Note: this needs to match because it indirectly proves out the ability to aggregate multiple // document LispContainers into a single (provided) summary Map<> when necessary. @@ -209,9 +194,7 @@ suite("SymbolManager & Object Method Tests", function () { } } catch (err) { - assert.fail("Failed to pull symbol map"); + assert.fail(`Failed to pull symbol map\n${err}`); } }); - - }); \ No newline at end of file diff --git a/extension/src/uriHandler.ts b/extension/src/uriHandler.ts index f34d9801..6afed00b 100644 --- a/extension/src/uriHandler.ts +++ b/extension/src/uriHandler.ts @@ -1,62 +1,58 @@ // 'use strict'; - import * as vscode from 'vscode'; - -import { - acitiveDocHasValidLanguageId -} from './utils' +import { acitiveDocHasValidLanguageId } from './utils' import { setDefaultAcadPid } from "./debug" import * as nls from 'vscode-nls'; const localize = nls.config({ messageFormat: nls.MessageFormat.file })(); function getUrlParams(queryString) { - let hashes = queryString.split('&') - return hashes.reduce((params, hash) => { - let [key, val] = hash.split('=') - return Object.assign(params, { [key]: decodeURIComponent(val) }) - }, {}) + const hashes = queryString.split('&') + return hashes.reduce((params, hash) => { + const [key, val] = hash.split('=') + return Object.assign(params, { [key]: decodeURIComponent(val) }) + }, {}) } const modalMsgOption = { modal: true }; export function onUriRequested(uri: vscode.Uri) { - let qs = getUrlParams(uri.query); - - let pidStr = qs["pid"]; - if (pidStr === undefined) { - let msg = localize("autolispext.urihandler.invaid", "Invalid call to AutoCAD AutoLISP Extension."); - vscode.window.showInformationMessage(msg); - return; - } - - setDefaultAcadPid(parseInt(pidStr)); - - if (vscode.debug.activeDebugSession) { - let msg = localize("autolispext.urihandler.activeddebugcfg", "Current debug configuration: "); - vscode.window.showInformationMessage(msg + vscode.debug.activeDebugSession.name, - modalMsgOption); - return; - } - - if (vscode.window.activeTextEditor) { - if (acitiveDocHasValidLanguageId()) { - let msg = localize("autolispext.urihandler.debug.start", - "From the menu bar, click Run > Start Debugging to debug the current AutoLISP source file."); - vscode.window.showInformationMessage(msg, modalMsgOption); - } - else { - let msg = localize("autolispext.urihandler.debug.openfile", - "Open an AutoLISP source file and click Run > Start Debugging from the menu bar to debug the file."); - vscode.window.showInformationMessage(msg, modalMsgOption); - } - - return; - } - - let msg = localize("autolispext.urihandler.debug.openfile", - "Open an AutoLISP source file and click Run > Start Debugging from the menu bar to debug the file."); - vscode.window.showInformationMessage(msg, modalMsgOption); - - return; + const qs = getUrlParams(uri.query); + + const pidStr = qs["pid"]; + if (pidStr === undefined) { + const msg = localize("autolispext.urihandler.invaid", "Invalid call to AutoCAD AutoLISP Extension."); + vscode.window.showInformationMessage(msg); + return; + } + + setDefaultAcadPid(parseInt(pidStr)); + + if (vscode.debug.activeDebugSession) { + const msg = localize("autolispext.urihandler.activeddebugcfg", "Current debug configuration: "); + vscode.window.showInformationMessage(msg + vscode.debug.activeDebugSession.name, + modalMsgOption); + return; + } + + if (vscode.window.activeTextEditor) { + if (acitiveDocHasValidLanguageId()) { + const msg = localize("autolispext.urihandler.debug.start", + "From the menu bar, click Run > Start Debugging to debug the current AutoLISP source file."); + vscode.window.showInformationMessage(msg, modalMsgOption); + } + else { + const msg = localize("autolispext.urihandler.debug.openfile", + "Open an AutoLISP source file and click Run > Start Debugging from the menu bar to debug the file."); + vscode.window.showInformationMessage(msg, modalMsgOption); + } + + return; + } + + const msg = localize("autolispext.urihandler.debug.openfile", + "Open an AutoLISP source file and click Run > Start Debugging from the menu bar to debug the file."); + vscode.window.showInformationMessage(msg, modalMsgOption); + + return; } diff --git a/extension/src/utils.ts b/extension/src/utils.ts index 6fb515a5..057e5bb2 100644 --- a/extension/src/utils.ts +++ b/extension/src/utils.ts @@ -2,77 +2,76 @@ import * as vscode from 'vscode'; import * as crypto from 'crypto'; import * as path from 'path' import * as fs from 'fs-extra'; - -const os = require('os'); +import * as os from 'os' export function getFullDocRange(editor: vscode.TextEditor): vscode.Range { - return editor.document.validateRange( - new vscode.Range( - new vscode.Position(0, 0), - new vscode.Position(Number.MAX_VALUE, Number.MAX_VALUE) - ) - ); + return editor.document.validateRange( + new vscode.Range( + new vscode.Position(0, 0), + new vscode.Position(Number.MAX_VALUE, Number.MAX_VALUE) + ) + ); } export function getSelectedDocRange(editor: vscode.TextEditor): vscode.Range { - let startPos = new vscode.Position(editor.selection.start.line, editor.selection.start.character); - let endPos = new vscode.Position(editor.selection.end.line, editor.selection.end.character); - return editor.document.validateRange( - new vscode.Range( - startPos, - endPos - ) - ); + const startPos = new vscode.Position(editor.selection.start.line, editor.selection.start.character); + const endPos = new vscode.Position(editor.selection.end.line, editor.selection.end.character); + return editor.document.validateRange( + new vscode.Range( + startPos, + endPos + ) + ); } -export function acitiveDocHasValidLanguageId(): Boolean { - const editor = vscode.window.activeTextEditor; +export function acitiveDocHasValidLanguageId(): boolean { + const editor = vscode.window.activeTextEditor; - return editor.document.languageId === 'autolisp' || - editor.document.languageId === 'autolispdcl' || - editor.document.languageId === 'lisp'; + return editor.document.languageId === 'autolisp' || + editor.document.languageId === 'autolispdcl' || + editor.document.languageId === 'lisp'; } //get the editor opened for the given file; //return null if there's no editor for this file export function getDocument(filePath: string): vscode.TextDocument { - let docs = vscode.workspace.textDocuments; - if(!docs) - return null; + const docs = vscode.workspace.textDocuments; + if (!docs) + return null; + + for (const doc of docs) { + if (doc.isClosed || doc.isUntitled || !doc.fileName) + continue; - for (let doc of docs) { - if(doc.isClosed || doc.isUntitled || !doc.fileName) - continue; - - if (pathEqual(filePath, doc.fileName, false) == false) - continue; + if (pathEqual(filePath, doc.fileName, false) == false) + continue; - return doc; - } + return doc; + } - return null; + return null; } let isWindows = undefined; -export function pathEqual(path1:string, path2:string, isDir:boolean): boolean { - let p1 = path.normalize(path1); - let p2 = path.normalize(path2); - - if(isDir) { - //for directory, eliminate the trailing slash if it exists - p1 = path.format(path.parse(p1)); - p2 = path.format(path.parse(p2)); - } - - if(isWindows == undefined) { - isWindows = (os.type() == 'Windows_NT'); - } - - if(isWindows) - return p1.toLocaleLowerCase() == p2.toLocaleLowerCase(); - else - return p1 == p2; +export function pathEqual(path1: string, path2: string, isDir: boolean): boolean { + let p1 = path.normalize(path1); + let p2 = path.normalize(path2); + + if (isDir) { + //for directory, eliminate the trailing slash if it exists + p1 = path.format(path.parse(p1)); + p2 = path.format(path.parse(p2)); + } + + if (isWindows == undefined) { + isWindows = (os.type() == 'Windows_NT'); + } + + if (isWindows) + return p1.toLocaleLowerCase() == p2.toLocaleLowerCase(); + else + return p1 == p2; } //if the given file is opened in an editor, save its latest content into a temp file, @@ -82,44 +81,44 @@ export function pathEqual(path1:string, path2:string, isDir:boolean): boolean { //the reason why we save open doc to tmp: // 1. we need to search in the unsaved text; // 2. the user might manually override the encoding on VS Code editor; -export function saveOpenDoc2Tmp(filePath:string): string { - let doc = getDocument(filePath); - if(doc == null) - return filePath; - - let tmpFile = getTmpFilePath(); +export function saveOpenDoc2Tmp(filePath: string): string { + const doc = getDocument(filePath); + if (doc == null) + return filePath; - fs.writeFileSync(tmpFile, doc.getText()); + const tmpFile = getTmpFilePath(); - return tmpFile; + fs.writeFileSync(tmpFile, doc.getText()); + + return tmpFile; } export function getTmpFilePath(): string { - let tmpFile = tryGetTmpFilePath(); + let tmpFile = tryGetTmpFilePath(); - while (fs.existsSync(tmpFile)) { - //in case the file path is occupied - tmpFile = tryGetTmpFilePath(); - } + while (fs.existsSync(tmpFile)) { + //in case the file path is occupied + tmpFile = tryGetTmpFilePath(); + } - return tmpFile; + return tmpFile; } function tryGetTmpFilePath() { - return path.join(os.tmpdir(), `unsaved.${crypto.randomBytes(6).readUIntLE(0, 6).toString(36)}.tmp`); + return path.join(os.tmpdir(), `unsaved.${crypto.randomBytes(6).readUIntLE(0, 6).toString(36)}.tmp`); } // useful when building from new RegExp and incorporating a dynamic keyword as part of the search pattern. export function escapeRegExp(string): string { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } +} // en-US is forced because native AutoLisp is in english and ZXX is a 'no particular language' override // https://unicode.org/reports/tr35/#BCP_47_Language_Tag_Conversion const collator = new Intl.Collator([vscode.env.language, 'en-US', 'zxx'], { sensitivity: 'base', }); export function StringEqualsIgnoreCase(str1: string, str2: string): boolean { - return collator.compare(str1, str2) === 0; + return collator.compare(str1, str2) === 0; } // For situations (like parsing) where many strings are being constructed or one large string from many small sources. @@ -128,33 +127,33 @@ export function StringEqualsIgnoreCase(str1: string, str2: string): boolean { export class StringBuilder { private _charCodes: Array = []; - charCodeAt(index: number): number { - return this._charCodes[index]; - } + charCodeAt(index: number): number { + return this._charCodes[index]; + } - hasValues(): boolean { - return this._charCodes.length > 0; - } + hasValues(): boolean { + return this._charCodes.length > 0; + } appendCode(charCode: number): void { this._charCodes.push(charCode); } - endsWith(charCode: number): boolean { + endsWith(charCode: number): boolean { return this._charCodes[this._charCodes.length - 1] === charCode; } - materialize(): string { + materialize(): string { try { - return String.fromCharCode(...this._charCodes); + return String.fromCharCode(...this._charCodes); } finally { this._charCodes.length = 0; } } - // This is no longer used, but functional and can be put back in if you need it - //------------------------------------------------------------------------------ + // This is no longer used, but functional and can be put back in if you need it + //------------------------------------------------------------------------------ // appendString(char: string): void { // for (let i = 0; i < char.length; i++) { // this._charCodes.push(char.charCodeAt(i)); @@ -162,21 +161,21 @@ export class StringBuilder { // } - // This is no longer used, but functional and can be put back in if you need it - //------------------------------------------------------------------------------ + // This is no longer used, but functional and can be put back in if you need it + //------------------------------------------------------------------------------ // static toCharCodeArray(chars: string, inArray?: Array): Array { - // if (!inArray) { - // inArray = []; - // } + // if (!inArray) { + // inArray = []; + // } // for (let i = 0; i < chars.length; i++) { // inArray.push(chars.charCodeAt(i)); // } // return inArray; // } - - // This is no longer used, but functional and can be put back in if you need it - //------------------------------------------------------------------------------ + + // This is no longer used, but functional and can be put back in if you need it + //------------------------------------------------------------------------------ // endsWithCodes(charCodes: Array): boolean { // let offsetLength = this._charCodes.length - charCodes.length; // if (offsetLength < 0) { @@ -190,5 +189,5 @@ export class StringBuilder { // return true; // } - + } \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 62690506..05eb8190 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,16 +1,13 @@ -const gulp = require('gulp'); -const path = require('path'); +import { src, dest, series, task } from 'gulp'; +import { createProject } from 'gulp-typescript'; +import typescript from 'typescript'; +import { init, write } from 'gulp-sourcemaps'; +import del from 'del'; +import { through } from 'event-stream'; +import { publish, createVSIX } from 'vsce'; +import { createAdditionalLanguageFiles, rewriteLocalizeCalls } from 'vscode-nls-dev'; -const ts = require('gulp-typescript'); -const typescript = require('typescript'); -const sourcemaps = require('gulp-sourcemaps'); -const del = require('del'); -const runSequence = require('run-sequence'); -const es = require('event-stream'); -const vsce = require('vsce'); -const nls = require('vscode-nls-dev'); - -const tsProject = ts.createProject('./tsconfig.json', { typescript }); +const tsProject = createProject('./tsconfig.json', { typescript }); const inlineMap = true; const inlineSource = false; @@ -19,19 +16,19 @@ const outDest = 'out'; // If all VS Code langaues are support you can use nls.coreLanguages const languages = [ { id: "zh-tw", folderName: "cht", transifexId: "zh-hant" }, - { id: "zh-cn", folderName: "chs", transifexId: "zh-hans" }, - { id: "fr", folderName: "fra" }, - { id: "de", folderName: "deu" }, - { id: "it", folderName: "ita" }, - { id: "es", folderName: "esp" }, - { id: "ja", folderName: "jpn" }, - { id: "ko", folderName: "kor" }, - { id: "ru", folderName: "rus" }, - //{ id: "bg", folderName: "bul" }, // VS Code supports Bulgarian, but VS is not currently localized for it + { id: "zh-cn", folderName: "chs", transifexId: "zh-hans" }, + { id: "fr", folderName: "fra" }, + { id: "de", folderName: "deu" }, + { id: "it", folderName: "ita" }, + { id: "es", folderName: "esp" }, + { id: "ja", folderName: "jpn" }, + { id: "ko", folderName: "kor" }, + { id: "ru", folderName: "rus" }, + //{ id: "bg", folderName: "bul" }, // VS Code supports Bulgarian, but VS is not currently localized for it { id: "hu", folderName: "hun" }, // VS Code supports Hungarian, but VS is not currently localized for it - { id: "pt-br", folderName: "ptb", transifexId: "pt-BR" } - //{ id: "tr", folderName: "trk" }, - //{ id: "cs", folderName: "csy" }, + { id: "pt-br", folderName: "ptb", transifexId: "pt-BR" } + //{ id: "tr", folderName: "trk" }, + //{ id: "cs", folderName: "csy" }, //{ id: "pl", folderName: "plk" } ]; @@ -48,24 +45,24 @@ const internalNlsCompileTask = function () { }; const addI18nTask = function () { - return gulp.src(['package.nls.json']) - .pipe(nls.createAdditionalLanguageFiles(languages, 'i18n')) - .pipe(gulp.dest('.')); + return src(['package.nls.json']) + .pipe(createAdditionalLanguageFiles(languages, 'i18n')) + .pipe(dest('.')); }; -const buildTask = gulp.series(cleanTask, internalNlsCompileTask, addI18nTask); +const buildTask = series(cleanTask, internalNlsCompileTask, addI18nTask); const doCompile = function (buildNls) { var r = tsProject.src() - .pipe(sourcemaps.init()) + .pipe(init()) .pipe(tsProject()).js - .pipe(buildNls ? nls.rewriteLocalizeCalls() : es.through()) - .pipe(buildNls ? nls.createAdditionalLanguageFiles(languages, 'i18n', 'out') : es.through()); + .pipe(buildNls ? rewriteLocalizeCalls() : through()) + .pipe(buildNls ? createAdditionalLanguageFiles(languages, 'i18n', 'out') : through()); if (inlineMap && inlineSource) { - r = r.pipe(sourcemaps.write()); + r = r.pipe(write()); } else { - r = r.pipe(sourcemaps.write("../out", { + r = r.pipe(write("../out", { // no inlined source includeContent: inlineSource, // Return relative source map root directories per file. @@ -73,25 +70,25 @@ const doCompile = function (buildNls) { })); } - return r.pipe(gulp.dest(outDest)); + return r.pipe(dest(outDest)); } const vscePublishTask = function () { - return vsce.publish(); + return publish(); }; const vscePackageTask = function () { - return vsce.createVSIX(); + return createVSIX(); }; -gulp.task('default', buildTask); +task('default', buildTask); -gulp.task('clean', cleanTask); +task('clean', cleanTask); -gulp.task('compile', gulp.series(cleanTask, internalCompileTask)); +task('compile', series(cleanTask, internalCompileTask)); -gulp.task('build', buildTask); +task('build', buildTask); -gulp.task('publish', gulp.series(vscePublishTask)); +task('publish', series(vscePublishTask)); -gulp.task('package', gulp.series(vscePackageTask)); \ No newline at end of file +task('package', series(vscePackageTask)); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a527b5a9..ddc4cef2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "chai": "^6.2.2", "del": "^8.0.1", "eslint": "^9.39.2", + "eslint-plugin-chai-friendly": "^1.1.0", "event-stream": "^4.0.1", "glob": "^13.0.2", "gulp": "^5.0.1", @@ -4369,6 +4370,19 @@ } } }, + "node_modules/eslint-plugin-chai-friendly": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-chai-friendly/-/eslint-plugin-chai-friendly-1.1.0.tgz", + "integrity": "sha512-+T1rClpDdXkgBAhC16vRQMI5umiWojVqkj9oUTdpma50+uByCZM/oBfxitZiOkjMRlm725mwFfz/RVgyDRvCKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" + } + }, "node_modules/eslint-scope": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", diff --git a/package.json b/package.json index d07d2d8a..f012d2ae 100644 --- a/package.json +++ b/package.json @@ -635,6 +635,7 @@ "chai": "^6.2.2", "del": "^8.0.1", "eslint": "^9.39.2", + "eslint-plugin-chai-friendly": "^1.1.0", "event-stream": "^4.0.1", "glob": "^13.0.2", "gulp": "^5.0.1", diff --git a/tsconfig.json b/tsconfig.json index e7e64ec7..93406995 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,8 @@ "sourceMap": true, "alwaysStrict": true, "skipDefaultLibCheck": true, - "skipLibCheck": true + "skipLibCheck": true, + "allowJs": true }, "include": ["extension/src"], "exclude": ["node_modules", ".vscode-test"] diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 2bd680db..00000000 --- a/tslint.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "rules": { - "no-string-throw": true, - "no-unused-expression": true, - "no-duplicate-variable": true, - "curly": true, - "class-name": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": true - }, - "defaultSeverity": "warning" -} \ No newline at end of file