From 9c1faccab57aca779bb90a973221fdc8ebec7049 Mon Sep 17 00:00:00 2001 From: anijanyan Date: Sat, 22 Apr 2023 13:25:41 +0400 Subject: [PATCH 1/5] imports fixed --- packages/ace-linters/tests/lsp-converters.tests.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/ace-linters/tests/lsp-converters.tests.ts b/packages/ace-linters/tests/lsp-converters.tests.ts index d06cd531..17492725 100644 --- a/packages/ace-linters/tests/lsp-converters.tests.ts +++ b/packages/ace-linters/tests/lsp-converters.tests.ts @@ -19,8 +19,7 @@ import { toCompletions, toResolvedCompletion, toTooltip } from "../type-converters/lsp-converters"; -import {AceLinters} from "../types"; -import Tooltip = AceLinters.Tooltip; +import {CompletionService, Tooltip} from "../types"; describe('Converters from/to Language Server Protocol', () => { @@ -269,11 +268,11 @@ describe('Converters from/to Language Server Protocol', () => { items: JSON.parse(JSON.stringify(completionItems)) } - let completionsService: AceLinters.CompletionService = { + let completionsService: CompletionService = { service: "test", completions: completionItems } - let completionsService1: AceLinters.CompletionService = { + let completionsService1: CompletionService = { service: "test1", completions: completionList } From 49ed536a98c4482bd1805c6f6d0411ebb5759af0 Mon Sep 17 00:00:00 2001 From: anijanyan Date: Sun, 21 May 2023 18:33:04 +0400 Subject: [PATCH 2/5] separated unit tests --- packages/ace-linters/mocha.unit.config.js | 7 + .../{ => unit}/common-converters.tests.ts | 21 +-- .../{ => unit}/language-provider.tests.ts | 8 +- .../tests/{ => unit}/lsp-converters.tests.ts | 174 ++---------------- .../tests/{ => unit}/mock-worker.ts | 0 .../tests/{ => unit}/service-manager.tests.ts | 10 +- .../ace-linters/tests/unit/utils.tests.ts | 31 ++++ packages/ace-linters/tests/utils.tests.ts | 56 ------ 8 files changed, 67 insertions(+), 240 deletions(-) create mode 100644 packages/ace-linters/mocha.unit.config.js rename packages/ace-linters/tests/{ => unit}/common-converters.tests.ts (75%) rename packages/ace-linters/tests/{ => unit}/language-provider.tests.ts (96%) rename packages/ace-linters/tests/{ => unit}/lsp-converters.tests.ts (69%) rename packages/ace-linters/tests/{ => unit}/mock-worker.ts (100%) rename packages/ace-linters/tests/{ => unit}/service-manager.tests.ts (93%) create mode 100644 packages/ace-linters/tests/unit/utils.tests.ts delete mode 100644 packages/ace-linters/tests/utils.tests.ts diff --git a/packages/ace-linters/mocha.unit.config.js b/packages/ace-linters/mocha.unit.config.js new file mode 100644 index 00000000..8b8fb16f --- /dev/null +++ b/packages/ace-linters/mocha.unit.config.js @@ -0,0 +1,7 @@ +module.exports = { + extension: ['ts'], + reporter: 'spec', + timeout: 5000, + spec: 'tests/unit/*.tests.ts', + require: "ts-node/register" +}; \ No newline at end of file diff --git a/packages/ace-linters/tests/common-converters.tests.ts b/packages/ace-linters/tests/unit/common-converters.tests.ts similarity index 75% rename from packages/ace-linters/tests/common-converters.tests.ts rename to packages/ace-linters/tests/unit/common-converters.tests.ts index fb8103ac..802af790 100644 --- a/packages/ace-linters/tests/common-converters.tests.ts +++ b/packages/ace-linters/tests/unit/common-converters.tests.ts @@ -1,15 +1,12 @@ import {expect} from "chai"; +import {Range as AceRange} from "ace-code/src/range"; import { CompletionItemKind, } from "vscode-languageserver-protocol"; -import {CommonConverter} from "../type-converters/common-converters"; -import {Editor} from "ace-code/src/editor"; -import {MockRenderer} from "ace-code/src/test/mockrenderer"; +import {CommonConverter} from "../../type-converters/common-converters"; + describe('General Converters', () => { - let editor = new Editor(new MockRenderer()); - const Range = editor.getSelectionRange().constructor; - describe('normalizeRanges', () => { it('should correctly normalize the ranges of an array of completions', () => { const completions = [ @@ -17,10 +14,10 @@ describe('General Converters', () => { {value: 'value2', range: {start: {row: 2, column: 0}, end: {row: 3, column: 0}}} ]; const expected = [ - {value: 'value1', range: Range.fromPoints({row: 0, column: 0}, {row: 1, column: 0})}, - {value: 'value2', range: Range.fromPoints({row: 2, column: 0}, {row: 3, column: 0})} + {value: 'value1', range: AceRange.fromPoints({row: 0, column: 0}, {row: 1, column: 0})}, + {value: 'value2', range: AceRange.fromPoints({row: 2, column: 0}, {row: 3, column: 0})} ]; - expect(CommonConverter.normalizeRanges(completions, editor)).to.deep.equal(expected); + expect(CommonConverter.normalizeRanges(completions)).to.deep.equal(expected); }); }); @@ -35,13 +32,13 @@ describe('General Converters', () => { describe('toRange', () => { it('should correctly convert a range object to an Ace range', () => { const range = {start: {row: 0, column: 0}, end: {row: 1, column: 0}}; - const expected = Range.fromPoints({row: 0, column: 0}, {row: 1, column: 0}); - expect(CommonConverter.toRange(range, Range)).to.deep.equal(expected); + const expected = AceRange.fromPoints({row: 0, column: 0}, {row: 1, column: 0}); + expect(CommonConverter.toRange(range)).to.deep.equal(expected); }); it('should return undefined if the range object is missing start or end properties', () => { const range = {start: {row: 0, column: 0}}; - expect(CommonConverter.toRange(range as any, Range)).to.undefined; + expect(CommonConverter.toRange(range as any)).to.undefined; }); }); diff --git a/packages/ace-linters/tests/language-provider.tests.ts b/packages/ace-linters/tests/unit/language-provider.tests.ts similarity index 96% rename from packages/ace-linters/tests/language-provider.tests.ts rename to packages/ace-linters/tests/unit/language-provider.tests.ts index 0415f87c..804a655f 100644 --- a/packages/ace-linters/tests/language-provider.tests.ts +++ b/packages/ace-linters/tests/unit/language-provider.tests.ts @@ -4,12 +4,12 @@ import "ace-code/src/test/mockdom"; //@ts-ignore window["self"] = {}; -import {LanguageProvider} from "../language-provider"; +import {LanguageProvider} from "../../language-provider"; import {Mode as JSONMode} from "ace-code/src/mode/json"; import {Mode as HtmlMode} from "ace-code/src/mode/html"; import {assert, expect} from "chai"; import {MockWorker} from "./mock-worker"; -import {ServiceManager} from "../services/service-manager"; +import {ServiceManager} from "../../services/service-manager"; import {Done} from "mocha"; import Completion = Ace.Completion; @@ -64,7 +64,7 @@ describe('LanguageProvider tests', () => { manager = new ServiceManager(ctx); manager.registerService("html", { features: {completion: true, completionResolve: true, diagnostics: true, format: true, hover: true}, - module: () => import("../services/html/html-service"), + module: () => import("../../services/html/html-service"), className: "HtmlService", modes: "html" }); @@ -161,7 +161,7 @@ describe('LanguageProvider tests', () => { manager.registerService("json", { features: {completion: true, completionResolve: true, diagnostics: true, format: true, hover: true}, - module: () => import("../services/json/json-service"), + module: () => import("../../services/json/json-service"), className: "JsonService", modes: "json" }); diff --git a/packages/ace-linters/tests/lsp-converters.tests.ts b/packages/ace-linters/tests/unit/lsp-converters.tests.ts similarity index 69% rename from packages/ace-linters/tests/lsp-converters.tests.ts rename to packages/ace-linters/tests/unit/lsp-converters.tests.ts index 4df4e253..29cbc5f7 100644 --- a/packages/ace-linters/tests/lsp-converters.tests.ts +++ b/packages/ace-linters/tests/unit/lsp-converters.tests.ts @@ -1,7 +1,8 @@ import {expect} from "chai"; -import * as Converter from "../type-converters/lsp-converters"; +import * as Converter from "../../type-converters/lsp-converters"; +import {Range as AceRange} from "ace-code/src/range"; import { CompletionItem, CompletionItemKind, @@ -12,22 +13,19 @@ import { MarkupKind } from "vscode-languageserver-protocol"; import { - filterDiagnostics, fromSignatureHelp, toAnnotations, toCompletionItem, toCompletions, toResolvedCompletion, toTooltip -} from "../type-converters/lsp-converters"; -import {CompletionService, Tooltip} from "../types"; +} from "../../type-converters/lsp-converters"; +import {CompletionService, Tooltip} from "../../types"; + describe('Converters from/to Language Server Protocol', () => { describe('fromRange', () => { - it('should convert an AceRangeData to a Range', () => { - const aceRange = { - start: {row: 0, column: 1}, - end: {row:2, column: 3} - }; + it('should convert an Ace.Range to a Range', () => { + const aceRange = new AceRange(0, 1, 2, 3); const expectedRange = { start: { @@ -69,7 +67,7 @@ describe('Converters from/to Language Server Protocol', () => { }); describe('toRange', () => { - it('should convert a Range to an AceRangeData', () => { + it('should convert a Range to an Ace.Range', () => { const range = { start: { line: 0, @@ -81,10 +79,7 @@ describe('Converters from/to Language Server Protocol', () => { } }; - const expectedAceRange = { - start: {row: 0, column: 1}, - end: {row:2, column: 3} - }; + const expectedAceRange = new AceRange(0, 1, 2, 3); const result = Converter.toRange(range); @@ -218,10 +213,7 @@ describe('Converters from/to Language Server Protocol', () => { meta: 'Function', caption: 'html', snippet: "Test text", - range: { - start: {row: 0, column: 1}, - end: {row:0, column: 5} - }, + range: new AceRange(0, 1, 0, 5), documentation: { kind: "markdown", value: "Test value" @@ -247,10 +239,7 @@ describe('Converters from/to Language Server Protocol', () => { meta: 'Function', caption: 'html', snippet: "Test text", - range: { - start: {row: 0, column: 1}, - end: {row:0, column: 5} - }, + range: new AceRange(0, 1, 0, 5), documentation: { kind: "markdown", value: "Test value" @@ -470,145 +459,4 @@ describe('Converters from/to Language Server Protocol', () => { }); - describe("filterDiagnostics", () => { - const diagnostic1: Diagnostic = { - message: "Syntax error: unexpected token '}'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }; - const diagnostic2 = { - message: "Unused variable 'x'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }; - const diagnostic3 = { - message: "Function 'foo' is not defined", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }; - const diagnostic4 = { - message: "Warning: unreachable code", - severity: DiagnosticSeverity.Warning, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }; - const diagnostic5 = { - message: "Info: variable 'x' is assigned but never used", - severity: DiagnosticSeverity.Information, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }; - const diagnostics = [diagnostic1, diagnostic2, diagnostic3, diagnostic4, diagnostic5]; - - it("should exclude diagnostics with error messages to ignore", () => { - const filterErrors = { - errorMessagesToIgnore: [/unused variable/i], - errorMessagesToTreatAsWarning: [], - errorMessagesToTreatAsInfo: [], - }; - const result = filterDiagnostics(diagnostics, filterErrors); - expect(result).deep.equal([diagnostic1, diagnostic3, diagnostic4, diagnostic5]); - }); - - it("should treat diagnostics with error messages to treat as warning as warnings", () => { - const filterErrors = { - errorMessagesToIgnore: [], - errorMessagesToTreatAsWarning: [/unreachable code/i], - errorMessagesToTreatAsInfo: [], - }; - const result = filterDiagnostics(diagnostics, filterErrors); - expect(result).deep.equal([ - { - message: "Syntax error: unexpected token '}'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Unused variable 'x'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Function 'foo' is not defined", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Warning: unreachable code", - severity: DiagnosticSeverity.Warning, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Info: variable 'x' is assigned but never used", - severity: DiagnosticSeverity.Information, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - ]); - }); - - it("should treat diagnostics with error messages to treat as info as info messages", () => { - const filterErrors = { - errorMessagesToIgnore: [], - errorMessagesToTreatAsWarning: [], - errorMessagesToTreatAsInfo: [/assigned but never used/i], - }; - const result = filterDiagnostics(diagnostics, filterErrors); - expect(result).deep.equal([ - { - message: "Syntax error: unexpected token '}'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Unused variable 'x'", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Function 'foo' is not defined", - severity: DiagnosticSeverity.Error, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Warning: unreachable code", - severity: DiagnosticSeverity.Warning, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - { - message: "Info: variable 'x' is assigned but never used", - severity: DiagnosticSeverity.Information, - range: { - start: {line: 1, character: 1}, end: {line: 1, character: 1} - } - }, - ]); - }); - }); - }); diff --git a/packages/ace-linters/tests/mock-worker.ts b/packages/ace-linters/tests/unit/mock-worker.ts similarity index 100% rename from packages/ace-linters/tests/mock-worker.ts rename to packages/ace-linters/tests/unit/mock-worker.ts diff --git a/packages/ace-linters/tests/service-manager.tests.ts b/packages/ace-linters/tests/unit/service-manager.tests.ts similarity index 93% rename from packages/ace-linters/tests/service-manager.tests.ts rename to packages/ace-linters/tests/unit/service-manager.tests.ts index ba62e470..ca134204 100644 --- a/packages/ace-linters/tests/service-manager.tests.ts +++ b/packages/ace-linters/tests/unit/service-manager.tests.ts @@ -1,7 +1,7 @@ import {expect} from "chai"; import {MockWorker} from "./mock-worker"; -import {ServiceManager} from "../services/service-manager"; -import {BaseService} from "../services/base-service"; +import {ServiceManager} from "../../services/service-manager"; +import {BaseService} from "../../services/base-service"; describe('ServiceManager tests', () => { let manager: ServiceManager; @@ -22,13 +22,13 @@ describe('ServiceManager tests', () => { const cssService = { features: {completion: true, completionResolve: true, diagnostics: true, format: true, hover: true}, - module: () => import("../services/css/css-service"), + module: () => import("../../services/css/css-service"), className: "CssService", modes: "css" }; const htmlService = { features: {completion: true, completionResolve: true, diagnostics: true, format: true, hover: true}, - module: () => import("../services/html/html-service"), + module: () => import("../../services/html/html-service"), className: "HtmlService", modes: "css" }; @@ -78,7 +78,7 @@ describe('ServiceManager tests', () => { const jsonService = { features: {completion: true, completionResolve: true, diagnostics: true, format: true, hover: true}, - module: () => import("../services/json/json-service"), + module: () => import("../../services/json/json-service"), className: "JsonService", modes: "json" }; diff --git a/packages/ace-linters/tests/unit/utils.tests.ts b/packages/ace-linters/tests/unit/utils.tests.ts new file mode 100644 index 00000000..36c77ade --- /dev/null +++ b/packages/ace-linters/tests/unit/utils.tests.ts @@ -0,0 +1,31 @@ +import {mergeObjects} from "../../utils"; +import {expect} from "chai"; + +describe('mergeObjects', () => { + it('should merge two objects with priority to first object values', () => { + const obj1 = { a: 1, b: { c: 3, d: 4 } }; + const obj2 = { b: { c: 5, e: 6 }, f: 7 }; + const expected = { a: 1, b: { c: 3, d: 4, e: 6 }, f: 7 }; + expect(mergeObjects(obj1, obj2)).to.deep.equal(expected); + }); + + it('should merge arrays within the objects', () => { + const obj1 = { a: [1, 2], b: { c: [3, 4] } }; + const obj2 = { a: [3, 4], b: { c: [5, 6] } }; + const expected = { a: [1, 2, 3, 4], b: { c: [3, 4, 5, 6] } }; + expect(mergeObjects(obj1, obj2)).to.deep.equal(expected); + }); + + it('should handle empty objects', () => { + const obj1 = {}; + const obj2 = { a: 1, b: 2 }; + expect(mergeObjects(obj1, obj2)).to.deep.equal(obj2); + expect(mergeObjects(obj2, obj1)).to.deep.equal(obj2); + }); + + it('should handle null input', () => { + const obj = { a: 1, b: 2 }; + expect(mergeObjects(null, obj)).to.deep.equal(obj); + expect(mergeObjects(obj, null)).to.deep.equal(obj); + }); +}); diff --git a/packages/ace-linters/tests/utils.tests.ts b/packages/ace-linters/tests/utils.tests.ts deleted file mode 100644 index 185c7670..00000000 --- a/packages/ace-linters/tests/utils.tests.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {checkValueAgainstRegexpArray, mergeObjects} from "../utils"; -import {assert, expect} from "chai"; - -describe('mergeObjects', () => { - it('should merge two objects with priority to first object values', () => { - const obj1 = { a: 1, b: { c: 3, d: 4 } }; - const obj2 = { b: { c: 5, e: 6 }, f: 7 }; - const expected = { a: 1, b: { c: 3, d: 4, e: 6 }, f: 7 }; - expect(mergeObjects(obj1, obj2)).to.deep.equal(expected); - }); - - it('should merge arrays within the objects', () => { - const obj1 = { a: [1, 2], b: { c: [3, 4] } }; - const obj2 = { a: [3, 4], b: { c: [5, 6] } }; - const expected = { a: [1, 2, 3, 4], b: { c: [3, 4, 5, 6] } }; - expect(mergeObjects(obj1, obj2)).to.deep.equal(expected); - }); - - it('should handle empty objects', () => { - const obj1 = {}; - const obj2 = { a: 1, b: 2 }; - expect(mergeObjects(obj1, obj2)).to.deep.equal(obj2); - expect(mergeObjects(obj2, obj1)).to.deep.equal(obj2); - }); - - it('should handle null input', () => { - const obj = { a: 1, b: 2 }; - expect(mergeObjects(null, obj)).to.deep.equal(obj); - expect(mergeObjects(obj, null)).to.deep.equal(obj); - }); -}); - -describe('checkValueAgainstRegexpArray', () => { - it('should return false when regexpArray is undefined', () => { - const result = checkValueAgainstRegexpArray('test'); - assert.strictEqual(result, false); - }); - - it('should return false when value does not match any regular expression', () => { - const regexpArray = [/\d+/, /[a-z]+/]; - const result = checkValueAgainstRegexpArray('TEST', regexpArray); - assert.strictEqual(result, false); - }); - - it('should return true when value matches a regular expression', () => { - const regexpArray = [/\d+/, /[a-z]+/]; - const result = checkValueAgainstRegexpArray('test123', regexpArray); - assert.strictEqual(result, true); - }); - - it('should return true when value matches multiple regular expressions', () => { - const regexpArray = [/\d+/, /[a-z]+/, /[!@#$%^&*()_+-={}[\]|\\:;"'<>,.?/]+/]; - const result = checkValueAgainstRegexpArray('test123!@#', regexpArray); - assert.strictEqual(result, true); - }); -}); From 269d580b04206163a864c6eb049276bd95fa2099 Mon Sep 17 00:00:00 2001 From: anijanyan Date: Sun, 21 May 2023 18:47:21 +0400 Subject: [PATCH 3/5] beginning of ui tests --- package-lock.json | 1238 ++++++++++++++++- packages/ace-linters/.mocharc.yaml | 7 - packages/ace-linters/mocha.ui.config.js | 7 + packages/ace-linters/package.json | 11 +- packages/ace-linters/tests/ui/dist/test.html | 105 ++ .../ace-linters/tests/ui/example.tests.ts | 41 + packages/ace-linters/webpack.config.js | 3 +- 7 files changed, 1396 insertions(+), 16 deletions(-) delete mode 100644 packages/ace-linters/.mocharc.yaml create mode 100644 packages/ace-linters/mocha.ui.config.js create mode 100644 packages/ace-linters/tests/ui/dist/test.html create mode 100644 packages/ace-linters/tests/ui/example.tests.ts diff --git a/package-lock.json b/package-lock.json index eea210be..e5133d24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -712,6 +712,77 @@ "node": ">= 8" } }, + "node_modules/@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=14.1.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@puppeteer/browsers/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, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@puppeteer/browsers/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "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/@puppeteer/browsers/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, + "engines": { + "node": ">=12" + } + }, "node_modules/@swc/core": { "version": "1.3.53", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.53.tgz", @@ -1096,6 +1167,16 @@ "@types/node": "*" } }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vscode/l10n": { "version": "0.0.11", "license": "MIT" @@ -1388,6 +1469,18 @@ "node": ">=0.4.0" } }, + "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, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "dev": true, @@ -1620,6 +1713,18 @@ ], "license": "MIT" }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/batch": { "version": "0.6.1", "dev": true, @@ -1641,6 +1746,55 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bn.js": { "version": "5.2.1", "dev": true, @@ -1879,6 +2033,15 @@ "ieee754": "^1.2.1" } }, + "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==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "dev": true, @@ -2033,6 +2196,12 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "dev": true, @@ -2041,6 +2210,18 @@ "node": ">=6.0" } }, + "node_modules/chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "dependencies": { + "mitt": "3.0.0" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, "node_modules/cipher-base": { "version": "1.0.4", "dev": true, @@ -2267,6 +2448,33 @@ "dev": true, "license": "MIT" }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "dev": true, @@ -2311,6 +2519,35 @@ "dev": true, "license": "MIT" }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "license": "MIT", @@ -2464,6 +2701,12 @@ "dev": true, "license": "MIT" }, + "node_modules/devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, "node_modules/diff": { "version": "5.0.0", "dev": true, @@ -2585,6 +2828,15 @@ "node": ">= 0.8" } }, + "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==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.10.0", "dev": true, @@ -2608,6 +2860,15 @@ "node": ">=4" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "dev": true, @@ -3089,6 +3350,41 @@ ], "license": "MIT" }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/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/fast-deep-equal": { "version": "3.1.3", "license": "MIT" @@ -3142,6 +3438,15 @@ "node": ">=0.8.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==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "license": "MIT", @@ -3326,6 +3631,12 @@ ], "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==", + "dev": true + }, "node_modules/fs-monkey": { "version": "1.0.3", "dev": true, @@ -3634,6 +3945,18 @@ "wbuf": "^1.1.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-entities": { "version": "2.3.3", "dev": true, @@ -3729,11 +4052,51 @@ } } }, + "node_modules/http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/https-browserify": { "version": "1.0.0", "dev": true, "license": "MIT" }, + "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, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "dev": true, @@ -3876,6 +4239,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "node_modules/is-binary-path": { "version": "2.1.0", "dev": true, @@ -4308,6 +4677,12 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/loader-runner": { "version": "4.3.0", "dev": true, @@ -4553,6 +4928,39 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "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, + "dependencies": { + "minimist": "^1.2.6" + }, + "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==", + "dev": true + }, "node_modules/mocha": { "version": "10.2.0", "dev": true, @@ -5119,6 +5527,15 @@ "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/optionator": { "version": "0.9.1", "license": "MIT", @@ -5236,14 +5653,32 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/parseurl": { - "version": "1.3.3", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, "engines": { - "node": ">= 0.8" - } - }, + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "license": "MIT" @@ -5310,6 +5745,12 @@ "node": ">=0.12" } }, + "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==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "dev": true, @@ -5337,6 +5778,38 @@ "node": ">=8" } }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/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/prelude-ls": { "version": "1.2.1", "license": "MIT", @@ -5378,6 +5851,15 @@ "node": ">=8" } }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "dev": true, @@ -5398,6 +5880,12 @@ "node": ">= 0.10" } }, + "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==", + "dev": true + }, "node_modules/public-encrypt": { "version": "4.0.3", "dev": true, @@ -5416,6 +5904,16 @@ "dev": true, "license": "MIT" }, + "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/punycode": { "version": "2.1.1", "license": "MIT", @@ -5423,6 +5921,51 @@ "node": ">=6" } }, + "node_modules/puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "node_modules/puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "dependencies": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + }, + "engines": { + "node": ">=14.14.0" + }, + "peerDependencies": { + "typescript": ">= 4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/qs": { "version": "6.11.0", "dev": true, @@ -5748,6 +6291,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true + }, "node_modules/select-hose": { "version": "2.0.0", "dev": true, @@ -6244,6 +6793,48 @@ "node": ">=6" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "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==", + "dev": 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/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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/terser": { "version": "5.15.1", "dev": true, @@ -6317,6 +6908,12 @@ "version": "0.2.0", "license": "MIT" }, + "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 + }, "node_modules/thunky": { "version": "1.1.0", "dev": true, @@ -6477,6 +7074,52 @@ "node": ">=4.2.0" } }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "dev": true, @@ -6526,6 +7169,12 @@ "querystring": "0.2.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==", + "dev": true + }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "dev": true, @@ -7039,6 +7688,30 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/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, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "license": "MIT", @@ -7284,6 +7957,16 @@ "node": ">=8" } }, + "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==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yn": { "version": "3.1.1", "dev": true, @@ -7327,8 +8010,10 @@ "@types/eslint": "^8.21.1", "@types/mocha": "^5.2.7", "chai": "^4.3.7", + "http-server": "^14.1.1", "mocha": "^10.2.0", "nyc": "^15.1.0", + "puppeteer": "^19.9.1", "ts-node": "^10.9.1" } }, @@ -7825,6 +8510,56 @@ "fastq": "^1.6.0" } }, + "@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "dev": true, + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "dependencies": { + "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, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "requires": { + "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" + } + }, + "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 + } + } + }, "@swc/core": { "version": "1.3.53", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.53.tgz", @@ -8077,6 +8812,16 @@ "@types/node": "*" } }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@vscode/l10n": { "version": "0.0.11" }, @@ -8297,9 +9042,11 @@ "@xml-tools/simple-schema": "^3.0.5", "chai": "^4.3.7", "htmlhint": "^1.1.4", + "http-server": "^14.1.1", "luaparse": "latest", "mocha": "^10.2.0", "nyc": "^15.1.0", + "puppeteer": "^19.9.1", "showdown": "latest", "ts-node": "^10.9.1", "vscode-css-languageservice": "latest", @@ -8327,6 +9074,15 @@ "version": "8.2.0", "dev": true }, + "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, + "requires": { + "debug": "4" + } + }, "aggregate-error": { "version": "3.1.0", "dev": true, @@ -8467,6 +9223,15 @@ "version": "1.5.1", "dev": true }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, "batch": { "version": "0.6.1", "dev": true @@ -8479,6 +9244,40 @@ "version": "2.2.0", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "bn.js": { "version": "5.2.1", "dev": true @@ -8644,6 +9443,12 @@ "ieee754": "^1.2.1" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, "buffer-from": { "version": "1.1.2", "dev": true @@ -8733,10 +9538,25 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "chrome-trace-event": { "version": "1.0.3", "dev": true }, + "chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "dev": true, + "requires": { + "mitt": "3.0.0" + } + }, "cipher-base": { "version": "1.0.4", "dev": true, @@ -8890,6 +9710,24 @@ "version": "1.0.3", "dev": true }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", + "dev": true + }, + "cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, "create-ecdh": { "version": "4.0.4", "dev": true, @@ -8931,6 +9769,26 @@ "version": "1.1.1", "dev": true }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, "cross-spawn": { "version": "7.0.3", "requires": { @@ -9022,6 +9880,12 @@ "version": "2.1.0", "dev": true }, + "devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==", + "dev": true + }, "diff": { "version": "5.0.0", "dev": true @@ -9108,6 +9972,15 @@ "version": "1.0.2", "dev": true }, + "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==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "enhanced-resolve": { "version": "5.10.0", "dev": true, @@ -9120,6 +9993,15 @@ "version": "7.8.1", "dev": true }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-module-lexer": { "version": "0.9.3", "dev": true @@ -9425,6 +10307,29 @@ } } }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "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, + "requires": { + "pump": "^3.0.0" + } + } + } + }, "fast-deep-equal": { "version": "3.1.3" }, @@ -9462,6 +10367,15 @@ "websocket-driver": ">=0.5.1" } }, + "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==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "file-entry-cache": { "version": "6.0.1", "requires": { @@ -9567,6 +10481,12 @@ "version": "1.3.2", "dev": true }, + "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==", + "dev": true + }, "fs-monkey": { "version": "1.0.3", "dev": true @@ -9754,6 +10674,15 @@ "wbuf": "^1.1.0" } }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, "html-entities": { "version": "2.3.3", "dev": true @@ -9819,10 +10748,41 @@ "micromatch": "^4.0.2" } }, + "http-server": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", + "dev": true, + "requires": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + } + }, "https-browserify": { "version": "1.0.0", "dev": true }, + "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, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "dev": true @@ -9894,6 +10854,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "dev": true, @@ -10145,6 +11111,12 @@ "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "loader-runner": { "version": "4.3.0", "dev": true @@ -10303,6 +11275,33 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", + "dev": true + }, + "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, + "requires": { + "minimist": "^1.2.6" + } + }, + "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==", + "dev": true + }, "mocha": { "version": "10.2.0", "dev": true, @@ -10666,6 +11665,12 @@ "is-wsl": "^2.2.0" } }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, "optionator": { "version": "0.9.1", "requires": { @@ -10745,6 +11750,18 @@ "safe-buffer": "^5.1.1" } }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parseurl": { "version": "1.3.3", "dev": true @@ -10788,6 +11805,12 @@ "sha.js": "^2.4.8" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "picocolors": { "version": "1.0.0", "dev": true @@ -10803,6 +11826,37 @@ "find-up": "^4.0.0" } }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "prelude-ls": { "version": "1.2.1" }, @@ -10824,6 +11878,12 @@ "fromentries": "^1.2.0" } }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "proxy-addr": { "version": "2.0.7", "dev": true, @@ -10838,6 +11898,12 @@ } } }, + "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==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "dev": true, @@ -10856,9 +11922,52 @@ } } }, + "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, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1" }, + "puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "dev": true, + "requires": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + } + }, "qs": { "version": "6.11.0", "dev": true, @@ -11044,6 +12153,12 @@ "ajv-keywords": "^3.5.2" } }, + "secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", + "dev": true + }, "select-hose": { "version": "2.0.0", "dev": true @@ -11401,6 +12516,44 @@ "version": "2.2.1", "dev": true }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "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, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "terser": { "version": "5.15.1", "dev": true, @@ -11440,6 +12593,12 @@ "text-table": { "version": "0.2.0" }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "thunky": { "version": "1.1.0", "dev": true @@ -11532,6 +12691,37 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + } + } + }, + "union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "requires": { + "qs": "^6.4.0" + } + }, "unpipe": { "version": "1.0.0", "dev": true @@ -11564,6 +12754,12 @@ } } }, + "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==", + "dev": true + }, "util": { "version": "0.12.5", "dev": true, @@ -11903,6 +13099,26 @@ "version": "0.1.4", "dev": true }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "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, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "whatwg-url": { "version": "5.0.0", "requires": { @@ -12061,6 +13277,16 @@ } } }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "yn": { "version": "3.1.1", "dev": true diff --git a/packages/ace-linters/.mocharc.yaml b/packages/ace-linters/.mocharc.yaml deleted file mode 100644 index 534390a5..00000000 --- a/packages/ace-linters/.mocharc.yaml +++ /dev/null @@ -1,7 +0,0 @@ -extension: - - ts - -spec: "tests/*.tests.ts" - -require: - - ts-node/register diff --git a/packages/ace-linters/mocha.ui.config.js b/packages/ace-linters/mocha.ui.config.js new file mode 100644 index 00000000..ef88cf1d --- /dev/null +++ b/packages/ace-linters/mocha.ui.config.js @@ -0,0 +1,7 @@ +module.exports = { + extension: ['ts'], + reporter: 'spec', + timeout: 5000, + spec: 'tests/ui/*.tests.ts', + require: "ts-node/register" +}; \ No newline at end of file diff --git a/packages/ace-linters/package.json b/packages/ace-linters/package.json index d925be95..da8aade5 100644 --- a/packages/ace-linters/package.json +++ b/packages/ace-linters/package.json @@ -9,7 +9,12 @@ "build:dependencies": "npm run build:yaml-language-server && npm run build:eslint-linter-bundle", "build": "npm run clean && npm run build:dependencies && webpack --mode=production", "build-dev": "npm run clean && npm run build:dependencies && webpack --mode=development", - "test": "mocha --timeout 5000 --exit", + + "build-test": "npm run build:dependencies && webpack --name=test", + "start-test-server": "npm run build-test && http-server --cors='*' tests/ui/dist", + "test:unit": "mocha --config mocha.unit.config.js", + "test:ui": "mocha --config mocha.ui.config.js", + "test": "npm run test:unit && npm run test:ui", "test:coverage": "nyc npm run test", "start-server": "http-server build --cors=\"*\"" }, @@ -37,7 +42,9 @@ "chai": "^4.3.7", "mocha": "^10.2.0", "nyc": "^15.1.0", - "ts-node": "^10.9.1" + "ts-node": "^10.9.1", + "puppeteer": "^19.9.1", + "http-server": "^14.1.1" }, "main": "build/ace-linters.js", "types": "types/index.d.ts", diff --git a/packages/ace-linters/tests/ui/dist/test.html b/packages/ace-linters/tests/ui/dist/test.html new file mode 100644 index 00000000..1a3c311f --- /dev/null +++ b/packages/ace-linters/tests/ui/dist/test.html @@ -0,0 +1,105 @@ + + + + + Example with using fetch and inline worker + + + +
+ + + + + + diff --git a/packages/ace-linters/tests/ui/example.tests.ts b/packages/ace-linters/tests/ui/example.tests.ts new file mode 100644 index 00000000..a04e94f6 --- /dev/null +++ b/packages/ace-linters/tests/ui/example.tests.ts @@ -0,0 +1,41 @@ +import {expect} from "chai"; +import * as puppeteer from 'puppeteer'; + +const opts = { + headless: false, + slowMo: 10, + devtools: true +}; + +describe("sample test", function () { + let browser: puppeteer.Browser; + let page: puppeteer.Page; + let errors = []; + + before(async function () { + this.timeout(10000); + browser = await puppeteer.launch(opts); + page = (await browser.pages())[0]; + page.on("console", function(err) { + if (err.type() == "error" && err.location().url != "http://localhost:8080/favicon.ico") + errors.push(err.text()); + }).on('pageerror', ({message}) => errors.push(message)); + await page.goto("http://localhost:8080/test.html", { + timeout: 10000, + waitUntil: 'domcontentloaded', + }); + }); + + it('should not have errors', async function () { + await page.waitForSelector("#example"); + expect(errors.length).to.eql(0); + }) + + it('should have the correct page title', async function () { + expect(await page.title()).to.eql('Example with using fetch and inline worker'); + }); + + after(async function () { + await browser.close(); + }); +}); \ No newline at end of file diff --git a/packages/ace-linters/webpack.config.js b/packages/ace-linters/webpack.config.js index 65efb545..1440c466 100644 --- a/packages/ace-linters/webpack.config.js +++ b/packages/ace-linters/webpack.config.js @@ -3,6 +3,7 @@ const NodePolyfillPlugin = require("node-polyfill-webpack-plugin"); module.exports = (env, argv) => { const isProduction = argv.mode === 'production'; + const isTest = argv.name === 'test'; let loader; loader = { test: /\.(t|j)sx?$/, @@ -59,7 +60,7 @@ module.exports = (env, argv) => { }, output: { filename: '[name].js', - path: __dirname + '/build', + path: __dirname + (isTest ? "/tests/ui/dist/" : "") + '/build', publicPath: 'auto', library: { type: "umd2" From f553aed11aee13d4645dd2c3c0e4ef9c1aceda63 Mon Sep 17 00:00:00 2001 From: mkslanc Date: Tue, 23 May 2023 20:39:05 +0400 Subject: [PATCH 4/5] fix test --- .../tests/unit/common-converters.tests.ts | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/packages/ace-linters/tests/unit/common-converters.tests.ts b/packages/ace-linters/tests/unit/common-converters.tests.ts index 802af790..943b8f1f 100644 --- a/packages/ace-linters/tests/unit/common-converters.tests.ts +++ b/packages/ace-linters/tests/unit/common-converters.tests.ts @@ -7,20 +7,6 @@ import {CommonConverter} from "../../type-converters/common-converters"; describe('General Converters', () => { - describe('normalizeRanges', () => { - it('should correctly normalize the ranges of an array of completions', () => { - const completions = [ - {value: 'value1', range: {start: {row: 0, column: 0}, end: {row: 1, column: 0}}}, - {value: 'value2', range: {start: {row: 2, column: 0}, end: {row: 3, column: 0}}} - ]; - const expected = [ - {value: 'value1', range: AceRange.fromPoints({row: 0, column: 0}, {row: 1, column: 0})}, - {value: 'value2', range: AceRange.fromPoints({row: 2, column: 0}, {row: 3, column: 0})} - ]; - expect(CommonConverter.normalizeRanges(completions)).to.deep.equal(expected); - }); - }); - describe('cleanHtml', () => { it('should clean the HTML string by replacing tags', () => { const html = "link"; @@ -33,12 +19,12 @@ describe('General Converters', () => { it('should correctly convert a range object to an Ace range', () => { const range = {start: {row: 0, column: 0}, end: {row: 1, column: 0}}; const expected = AceRange.fromPoints({row: 0, column: 0}, {row: 1, column: 0}); - expect(CommonConverter.toRange(range)).to.deep.equal(expected); + expect(CommonConverter.toRange(range, AceRange)).to.deep.equal(expected); }); it('should return undefined if the range object is missing start or end properties', () => { const range = {start: {row: 0, column: 0}}; - expect(CommonConverter.toRange(range as any)).to.undefined; + expect(CommonConverter.toRange(range as any, AceRange)).to.undefined; }); }); From a272e217a363e623f1e7ce6ca56185cec9609e10 Mon Sep 17 00:00:00 2001 From: anijanyan Date: Wed, 24 May 2023 14:04:11 +0400 Subject: [PATCH 5/5] fixes due code review --- .../ui/{example.tests.ts => general-ui.tests.ts} | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) rename packages/ace-linters/tests/ui/{example.tests.ts => general-ui.tests.ts} (78%) diff --git a/packages/ace-linters/tests/ui/example.tests.ts b/packages/ace-linters/tests/ui/general-ui.tests.ts similarity index 78% rename from packages/ace-linters/tests/ui/example.tests.ts rename to packages/ace-linters/tests/ui/general-ui.tests.ts index a04e94f6..3c4ced9a 100644 --- a/packages/ace-linters/tests/ui/example.tests.ts +++ b/packages/ace-linters/tests/ui/general-ui.tests.ts @@ -2,12 +2,12 @@ import {expect} from "chai"; import * as puppeteer from 'puppeteer'; const opts = { - headless: false, - slowMo: 10, - devtools: true + headless: true, + slowMo: 0, + devtools: false }; -describe("sample test", function () { +describe("General ui tests", function () { let browser: puppeteer.Browser; let page: puppeteer.Page; let errors = []; @@ -31,10 +31,6 @@ describe("sample test", function () { expect(errors.length).to.eql(0); }) - it('should have the correct page title', async function () { - expect(await page.title()).to.eql('Example with using fetch and inline worker'); - }); - after(async function () { await browser.close(); });