diff --git a/data-extraction/README.md b/data-extraction/README.md index 218e407..85af883 100644 --- a/data-extraction/README.md +++ b/data-extraction/README.md @@ -3,6 +3,8 @@ [![](https://img.shields.io/twitter/follow/hediet_dev.svg?style=social)](https://twitter.com/intent/follow?screen_name=hediet_dev) A library that helps implementing data extractors for the Debug Visualizer VS Code extension. +It will automatically be injected by the extension when the debugger attaches. +Compatible with NodeJS and browsers. # Installation @@ -14,15 +16,10 @@ yarn add @hediet/debug-visualizer-data-extraction # Usage -## `createGraph` / `createGraphFromPointers` Helper +## `createGraphFromPointers` Helper ```ts -import { - registerDefaultDataExtractors, - createGraphFromPointers, -} from "@hediet/debug-visualizer-data-extraction"; - -registerDefaultDataExtractors(); +import { createGraphFromPointers } from "@hediet/debug-visualizer-data-extraction"; setTimeout(() => { new Main().run(); @@ -85,14 +82,7 @@ class DoublyLinkedList { ## Registering Custom Data Extractors ```ts -import { - registerDefaultDataExtractors, - getDataExtractorApi, -} from "@hediet/debug-visualizer-data-extraction"; - -// The default data extractors are usually also registered by the VS Code extension. -// Registered them manually ensures that they are up to date. -registerDefaultDataExtractors(); +import { getDataExtractorApi } from "@hediet/debug-visualizer-data-extraction"; getDataExtractorApi().registerExtractor({ id: "my-foo-extractor", diff --git a/data-extraction/package.json b/data-extraction/package.json index cfb4b60..76fa5fe 100644 --- a/data-extraction/package.json +++ b/data-extraction/package.json @@ -22,11 +22,18 @@ "registry": "https://registry.npmjs.org/" }, "scripts": { - "dev": "tsc --watch", - "build": "tsc" + "dev": "webpack --watch --mode development", + "build": "webpack --mode production" }, "dependencies": {}, "devDependencies": { - "typescript": "^" + "typescript": "^3.7.5", + "@types/express": "^4.17.2", + "@types/serve-static": "^1.13.3", + "@types/node": "^13.7.1", + "tslint": "^6.0.0", + "webpack": "^4.41.6", + "webpack-cli": "^3.3.11", + "ts-loader": "^6.2.1" } } diff --git a/data-extraction/src/js/DataExtractor.ts b/data-extraction/src/js/DataExtractor.ts deleted file mode 100644 index 24f2229..0000000 --- a/data-extraction/src/js/DataExtractor.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { ExtractedData } from "../DataExtractionResult"; - -export interface DataExtractor { - /** - * Must be unique among all data extractors. - */ - id: string; - getExtractions( - data: unknown, - extractionCollector: ExtractionCollector, - context: DataExtractorContext - ): void; -} - -export interface ExtractionCollector { - /** - * Suggests a possible extraction. - */ - addExtraction(extraction: DataExtraction): void; -} - -export interface DataExtractorContext { - /** - * Evaluates an expression in the context of the active stack frame. - */ - evalFn: (expression: string) => TEval; -} - -export interface DataExtraction { - /** - * Higher priorities are preferred. - */ - priority: number; - - /** - * A unique id identifying this extraction among all extractions. - * Required to express extraction preferences. - */ - id: string; - /** - * A user friendly name of this extraction. - */ - name: string; - extractData(): TData; -} - -export function getExtractions( - extractor: DataExtractor, - data: unknown, - context: DataExtractorContext -): DataExtraction[] { - const extractions = new Array>(); - const collector: ExtractionCollector = { - addExtraction(extraction) { - extractions.push(extraction); - }, - }; - extractor.getExtractions(data, collector, context); - return extractions; -} diff --git a/data-extraction/src/js/DataExtractorApi.ts b/data-extraction/src/js/DataExtractorApi.ts deleted file mode 100644 index fc48455..0000000 --- a/data-extraction/src/js/DataExtractorApi.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { - ExtractedData, - DataExtractionResult, - DataExtractorInfo, -} from "../DataExtractionResult"; -import { - DataExtractor, - DataExtraction, - ExtractionCollector, -} from "./DataExtractor"; - -export interface DataExtractorApi { - /** - * Registers a single extractor. - * @preferExisting if `true`, an existing extractor is not overwritten. - */ - registerExtractor( - extractor: DataExtractor, - preferExisting?: boolean - ): void; - - /** - * Registers multiple extractors. - * @preferExisting if `true`, an existing extractor is not overwritten. - */ - registerExtractors( - extractors: DataExtractor[], - preferExisting?: boolean - ): void; - - /** - * Extracts data from `value`. - */ - getData( - value: unknown, - evalFn: (expression: string) => T, - preferredDataExtractorId: string | undefined - ): JSONString; -} - -export type DataResult = - | { - kind: "Data"; - extractionResult: DataExtractionResult; - } - | { kind: "NoExtractors" } - | { kind: "Error"; message: string }; - -export interface JSONString extends String { - __brand: { json: T }; -} - -declare const window: any; - -/** - * @internal - */ -export function selfContainedInitDataExtractorApi(): boolean { - const globalObj = - typeof window === "object" ? (window as any) : (global as any); - const key = "@hediet/data-extractor/v1"; - const prefix = key + "::"; - - let api: DataExtractorApi | undefined = globalObj[key]; - if (api) { - return false; - } - - function toJson(data: TData): JSONString { - return JSON.stringify(data) as any; - } - function getExtractors(): DataExtractor[] { - return Object.entries(globalObj) - .filter(([key, value]) => key.startsWith(prefix)) - .map(([key, value]) => value as DataExtractor); - } - globalObj["$asData"] = (x: unknown) => x; - globalObj[key] = api = { - registerExtractor(extractor, preferExisting) { - const key = prefix + extractor.id; - if (preferExisting && key in globalObj) { - // don't overwrite existing data extractor - return; - } - globalObj[key] = extractor; - }, - registerExtractors( - extractors: DataExtractor[], - preferExisting - ) { - for (const e of extractors) { - this.registerExtractor(e, preferExisting); - } - }, - getData(value, evalFn, preferredDataExtractorId) { - const extractions = new Array>(); - const extractionCollector: ExtractionCollector = { - addExtraction(extraction) { - extractions.push(extraction); - }, - }; - - for (const e of getExtractors()) { - e.getExtractions(value, extractionCollector, { evalFn }); - } - extractions.sort((a, b) => b.priority - a.priority); - let usedExtraction = extractions[0]; - if (!usedExtraction) { - return toJson({ kind: "NoExtractors" } as DataResult); - } - - if (preferredDataExtractorId) { - const preferred = extractions.find( - e => e.id === preferredDataExtractorId - ); - if (preferred) { - usedExtraction = preferred; - } - } - - function mapExtractor( - e: DataExtraction - ): DataExtractorInfo { - return { - id: e.id as any, - name: e.name, - priority: e.priority, - }; - } - - const data = usedExtraction.extractData(); - return toJson({ - kind: "Data", - extractionResult: { - data, - usedExtractor: mapExtractor(usedExtraction), - availableExtractors: extractions.map(mapExtractor), - }, - } as DataResult); - }, - }; - - api.registerExtractor({ - id: "to-string", - getExtractions: (data, collector) => { - collector.addExtraction({ - id: "to-string", - name: "To String", - priority: 100, - extractData() { - return { - kind: { - text: true, - }, - text: "" + data, - }; - }, - }); - }, - }); - return true; -} - -/** - * This code is used to detect if the API has not been initialized yet. - * @internal - */ -export const ApiHasNotBeenInitializedCode = "EgH0cybXij1jYUozyakO" as const; - -/** - * @internal - */ -export function selfContainedGetInitializedDataExtractorApi(): DataExtractorApi { - const obj = typeof window === "object" ? (window as any) : (global as any); - const key = "@hediet/data-extractor/v1"; - let api: DataExtractorApi | undefined = obj[key]; - if (!api) { - const code: typeof ApiHasNotBeenInitializedCode = - "EgH0cybXij1jYUozyakO"; - throw new Error( - `Data Extractor API has not been initialized. Code: ${code}` - ); - } - return api; -} - -/** - * Get the data extractor API. - */ -export function getDataExtractorApi(): DataExtractorApi { - selfContainedInitDataExtractorApi(); - return selfContainedGetInitializedDataExtractorApi(); -} diff --git a/data-extraction/src/js/Extractors/index.ts b/data-extraction/src/js/Extractors/index.ts deleted file mode 100644 index 65c64f8..0000000 --- a/data-extraction/src/js/Extractors/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { TypeScriptAstDataExtractor } from "./TypeScriptDataExtractors"; -export { AsIsDataExtractor } from "./AsIsDataExtractor"; -export { GetDebugVisualizationDataExtractor } from "./GetDebugVisualizationDataExtractor"; - -export { registerDefaultDataExtractors } from "./registerDefaultDataExtractors"; diff --git a/data-extraction/src/js/api/DataExtractorApi.ts b/data-extraction/src/js/api/DataExtractorApi.ts new file mode 100644 index 0000000..970fa38 --- /dev/null +++ b/data-extraction/src/js/api/DataExtractorApi.ts @@ -0,0 +1,89 @@ +import { + ExtractedData, + DataExtractionResult, +} from "../../DataExtractionResult"; + +export interface DataExtractorApi { + /** + * Registers a single extractor. + */ + registerExtractor( + extractor: DataExtractor + ): void; + + /** + * Registers multiple extractors. + */ + registerExtractors(extractors: DataExtractor[]): void; + + /** + * Extracts data from `value`. + */ + getData( + value: unknown, + evalFn: (expression: string) => T, + preferredDataExtractorId: string | undefined + ): JSONString; + + /** + * Registers all default (built-in) extractors. + * @preferExisting if `true`, existing extractors with the same id are not overwritten. + */ + registerDefaultExtractors(preferExisting?: boolean): void; +} + +export type DataResult = + | { + kind: "Data"; + extractionResult: DataExtractionResult; + } + | { kind: "NoExtractors" } + | { kind: "Error"; message: string }; + +export interface JSONString extends String { + __brand: { json: T }; +} + +export interface DataExtractor { + /** + * Must be unique among all data extractors. + */ + id: string; + getExtractions( + data: unknown, + extractionCollector: ExtractionCollector, + context: DataExtractorContext + ): void; +} + +export interface ExtractionCollector { + /** + * Suggests a possible extraction. + */ + addExtraction(extraction: DataExtraction): void; +} + +export interface DataExtractorContext { + /** + * Evaluates an expression in the context of the active stack frame. + */ + evalFn: (expression: string) => TEval; +} + +export interface DataExtraction { + /** + * Higher priorities are preferred. + */ + priority: number; + + /** + * A unique id identifying this extraction among all extractions. + * Required to express extraction preferences. + */ + id: string; + /** + * A user friendly name of this extraction. + */ + name: string; + extractData(): TData; +} diff --git a/data-extraction/src/js/api/DataExtractorApiImpl.ts b/data-extraction/src/js/api/DataExtractorApiImpl.ts new file mode 100644 index 0000000..1b0e8bb --- /dev/null +++ b/data-extraction/src/js/api/DataExtractorApiImpl.ts @@ -0,0 +1,90 @@ +import { + DataExtractorApi, + DataResult, + JSONString, + DataExtractor, + DataExtraction, + ExtractionCollector, +} from "./DataExtractorApi"; +import { ExtractedData, DataExtractorInfo } from "../../DataExtractionResult"; +import { registerDefaultDataExtractors } from "./default-extractors"; + +export class DataExtractorApiImpl implements DataExtractorApi { + private readonly extractors = new Map< + string, + DataExtractor + >(); + + private toJson(data: TData): JSONString { + return JSON.stringify(data) as any; + } + + public registerExtractor( + extractor: DataExtractor + ): void { + this.extractors.set(extractor.id, extractor); + } + + public registerExtractors( + extractors: DataExtractor[] + ): void { + for (const e of extractors) { + this.registerExtractor(e); + } + } + + public getData( + value: unknown, + evalFn: (expression: string) => T, + preferredDataExtractorId: string | undefined + ): JSONString { + const extractions = new Array>(); + const extractionCollector: ExtractionCollector = { + addExtraction(extraction) { + extractions.push(extraction); + }, + }; + + for (const e of this.extractors.values()) { + e.getExtractions(value, extractionCollector, { evalFn }); + } + extractions.sort((a, b) => b.priority - a.priority); + let usedExtraction = extractions[0]; + if (!usedExtraction) { + return this.toJson({ kind: "NoExtractors" } as DataResult); + } + + if (preferredDataExtractorId) { + const preferred = extractions.find( + e => e.id === preferredDataExtractorId + ); + if (preferred) { + usedExtraction = preferred; + } + } + + function mapExtractor( + e: DataExtraction + ): DataExtractorInfo { + return { + id: e.id as any, + name: e.name, + priority: e.priority, + }; + } + + const data = usedExtraction.extractData(); + return this.toJson({ + kind: "Data", + extractionResult: { + data, + usedExtractor: mapExtractor(usedExtraction), + availableExtractors: extractions.map(mapExtractor), + }, + } as DataResult); + } + + public registerDefaultExtractors(preferExisting: boolean = false): void { + registerDefaultDataExtractors(this); + } +} diff --git a/data-extraction/src/js/Extractors/AsIsDataExtractor.ts b/data-extraction/src/js/api/default-extractors/AsIsDataExtractor.ts similarity index 81% rename from data-extraction/src/js/Extractors/AsIsDataExtractor.ts rename to data-extraction/src/js/api/default-extractors/AsIsDataExtractor.ts index f71bd43..18ac0fa 100644 --- a/data-extraction/src/js/Extractors/AsIsDataExtractor.ts +++ b/data-extraction/src/js/api/default-extractors/AsIsDataExtractor.ts @@ -1,5 +1,9 @@ -import { ExtractedData } from "../../DataExtractionResult"; -import { DataExtractor, ExtractionCollector, DataExtractorContext } from ".."; +import { ExtractedData } from "../../../DataExtractionResult"; +import { + DataExtractor, + ExtractionCollector, + DataExtractorContext, +} from "../.."; export class AsIsDataExtractor implements DataExtractor { readonly id = "as-is"; diff --git a/data-extraction/src/js/Extractors/GetDebugVisualizationDataExtractor.ts b/data-extraction/src/js/api/default-extractors/GetDebugVisualizationDataExtractor.ts similarity index 87% rename from data-extraction/src/js/Extractors/GetDebugVisualizationDataExtractor.ts rename to data-extraction/src/js/api/default-extractors/GetDebugVisualizationDataExtractor.ts index ecc187e..1bbf9c0 100644 --- a/data-extraction/src/js/Extractors/GetDebugVisualizationDataExtractor.ts +++ b/data-extraction/src/js/api/default-extractors/GetDebugVisualizationDataExtractor.ts @@ -1,9 +1,9 @@ -import { ExtractedData } from "../../DataExtractionResult"; +import { ExtractedData } from "../../../DataExtractionResult"; import { - ExtractionCollector, DataExtractor, + ExtractionCollector, DataExtractorContext, -} from "../DataExtractor"; +} from "../DataExtractorApi"; export class GetDebugVisualizationDataExtractor implements DataExtractor { diff --git a/data-extraction/src/js/api/default-extractors/ToStringExtractor.ts b/data-extraction/src/js/api/default-extractors/ToStringExtractor.ts new file mode 100644 index 0000000..55fe82f --- /dev/null +++ b/data-extraction/src/js/api/default-extractors/ToStringExtractor.ts @@ -0,0 +1,30 @@ +import { ExtractedData } from "../../../DataExtractionResult"; +import { + DataExtractor, + ExtractionCollector, + DataExtractorContext, +} from "../DataExtractorApi"; + +export class ToStringDataExtractor implements DataExtractor { + readonly id = "to-string"; + + getExtractions( + data: unknown, + collector: ExtractionCollector, + context: DataExtractorContext + ): void { + collector.addExtraction({ + id: "to-string", + name: "To String", + priority: 100, + extractData() { + return { + kind: { + text: true, + }, + text: "" + data, + }; + }, + }); + } +} diff --git a/data-extraction/src/js/Extractors/TypeScriptDataExtractors.ts b/data-extraction/src/js/api/default-extractors/TypeScriptDataExtractors.ts similarity index 96% rename from data-extraction/src/js/Extractors/TypeScriptDataExtractors.ts rename to data-extraction/src/js/api/default-extractors/TypeScriptDataExtractors.ts index 1171daf..9766b58 100644 --- a/data-extraction/src/js/Extractors/TypeScriptDataExtractors.ts +++ b/data-extraction/src/js/api/default-extractors/TypeScriptDataExtractors.ts @@ -1,10 +1,10 @@ -import * as ts from "typescript"; +import * as ts from "typescript"; // Only compile-time import! import { DataExtractor, ExtractionCollector, DataExtractorContext, -} from "../DataExtractor"; -import { CommonDataTypes } from "../../CommonDataTypes"; +} from "../DataExtractorApi"; +import { CommonDataTypes } from "../../../CommonDataTypes"; // This class is self contained and can be injected into both nodejs and browser environments. export class TypeScriptAstDataExtractor diff --git a/data-extraction/src/js/api/default-extractors/index.ts b/data-extraction/src/js/api/default-extractors/index.ts new file mode 100644 index 0000000..1693dd1 --- /dev/null +++ b/data-extraction/src/js/api/default-extractors/index.ts @@ -0,0 +1 @@ +export { registerDefaultDataExtractors } from "./registerDefaultDataExtractors"; diff --git a/data-extraction/src/js/Extractors/registerDefaultDataExtractors.ts b/data-extraction/src/js/api/default-extractors/registerDefaultDataExtractors.ts similarity index 52% rename from data-extraction/src/js/Extractors/registerDefaultDataExtractors.ts rename to data-extraction/src/js/api/default-extractors/registerDefaultDataExtractors.ts index 40c6e86..d297df3 100644 --- a/data-extraction/src/js/Extractors/registerDefaultDataExtractors.ts +++ b/data-extraction/src/js/api/default-extractors/registerDefaultDataExtractors.ts @@ -1,18 +1,19 @@ -import { getDataExtractorApi } from "../DataExtractorApi"; +import { DataExtractorApi } from "../DataExtractorApi"; import { TypeScriptAstDataExtractor } from "./TypeScriptDataExtractors"; import { AsIsDataExtractor } from "./AsIsDataExtractor"; import { GetDebugVisualizationDataExtractor } from "./GetDebugVisualizationDataExtractor"; +import { ToStringDataExtractor } from "./ToStringExtractor"; /** - * The default data extractors should be registered by vs code anyways. - * This however ensures that the most up to date extractors are registered. + * The default data extractors should be registered by VS Code automatically. + * Registering them manually ensures that they are up to date. */ -export function registerDefaultDataExtractors() { - const api = getDataExtractorApi(); +export function registerDefaultDataExtractors(api: DataExtractorApi) { for (const item of [ new TypeScriptAstDataExtractor(), new AsIsDataExtractor(), new GetDebugVisualizationDataExtractor(), + new ToStringDataExtractor(), ]) { api.registerExtractor(item); } diff --git a/data-extraction/src/js/api/index.ts b/data-extraction/src/js/api/index.ts new file mode 100644 index 0000000..b01e4dc --- /dev/null +++ b/data-extraction/src/js/api/index.ts @@ -0,0 +1,2 @@ +export * from "./DataExtractorApi"; +export * from "./injection"; diff --git a/data-extraction/src/js/api/injection.ts b/data-extraction/src/js/api/injection.ts new file mode 100644 index 0000000..23d5af7 --- /dev/null +++ b/data-extraction/src/js/api/injection.ts @@ -0,0 +1,73 @@ +import * as fs from "fs"; +import { DataExtractorApi } from "./DataExtractorApi"; +import { DataExtractorApiImpl } from "./DataExtractorApiImpl"; +import * as helpers from "../helpers"; +import * as globalHelpers from "../global-helpers"; + +/** + * Returns standalone JS code representing an expression that initializes the data extraction API. + * This expression returns nothing. + * This function is called in the VS Code extension, the expression is evaluated in the debugee. + */ +export function getExpressionToInitializeDataExtractorApi(): string { + const _fs = require("fs") as typeof fs; + const moduleSrc = _fs.readFileSync(__filename, { encoding: "utf8" }); + return `((function () { + let module = {}; + ${moduleSrc} + module.exports.installHelpers(); + return module.exports.getDataExtractorApi(); + })())`; +} + +/** + * Returns standalone JS code representing an expression returns the data extraction API. + * This expression returns an object of type `DataExtractorApi`. + * If the API must be initialized with `getExpressionToInitializeDataExtractorApi()`, + * it throws an exception containing the text of `ApiHasNotBeenInitializedCode`. + * This function is called in the VS Code extension, the expression is evaluated in the debugee. + */ +export function getExpressionForDataExtractorApi(): string { + return `((${selfContainedGetInitializedDataExtractorApi.toString()})())`; +} + +const apiKey = "@hediet/data-extractor-api/v2"; + +export function getDataExtractorApi(): DataExtractorApi { + const globalObj = + typeof window === "object" ? (window as any) : (global as any); + if (!globalObj[apiKey]) { + globalObj[apiKey] = new DataExtractorApiImpl(); + } + return globalObj[apiKey]; +} + +/** + * This code is used to detect if the API has not been initialized yet. + * @internal + */ +export const ApiHasNotBeenInitializedCode = "EgH0cybXij1jYUozyakO" as const; + +/** + * @internal + */ +function selfContainedGetInitializedDataExtractorApi(): DataExtractorApi { + const globalObj = + typeof window === "object" ? (window as any) : (global as any); + const key: typeof apiKey = "@hediet/data-extractor-api/v2"; + let api: DataExtractorApi | undefined = globalObj[key]; + if (!api) { + const code: typeof ApiHasNotBeenInitializedCode = + "EgH0cybXij1jYUozyakO"; + throw new Error( + `Data Extractor API has not been initialized. Code: ${code}` + ); + } + return api; +} + +export function installHelpers(): void { + const globalObj = + typeof window === "object" ? (window as any) : (global as any); + globalObj["hediet_dbgVis"] = { ...helpers, ...globalHelpers }; +} diff --git a/data-extraction/src/js/global-helpers.ts b/data-extraction/src/js/global-helpers.ts new file mode 100644 index 0000000..5f4a95b --- /dev/null +++ b/data-extraction/src/js/global-helpers.ts @@ -0,0 +1 @@ +export { getDataExtractorApi as getApi } from "./api/injection"; diff --git a/data-extraction/src/js/createGraph.ts b/data-extraction/src/js/helpers/createGraph.ts similarity index 57% rename from data-extraction/src/js/createGraph.ts rename to data-extraction/src/js/helpers/createGraph.ts index cd75c8d..9f248dd 100644 --- a/data-extraction/src/js/createGraph.ts +++ b/data-extraction/src/js/helpers/createGraph.ts @@ -2,7 +2,7 @@ import { CommonDataTypes, EdgeGraphData, NodeGraphData, -} from "../CommonDataTypes"; +} from "../../CommonDataTypes"; /** * Given a list of roots, it creates a graph by following their edges recursively. @@ -66,46 +66,3 @@ export function createGraph( } return r; } - -/** - * Given a labeled list of roots, it creates a graph by following their edges recursively. - * Tracks cycles. - */ -export function createGraphFromPointers( - roots: Record, - infoSelector: ( - item: T - ) => { - id?: string | number; - edges: ({ to: T } & Omit)[]; - } & Omit -): CommonDataTypes.Graph { - const marker = {}; - - interface Pointer { - marker: {}; - name: string; - value: T | null | undefined; - } - - const items = Object.entries(roots).map(([name, value]) => ({ - marker, - name, - value, - })); - - return createGraph(items, item => { - if ("marker" in item && item["marker"] === marker) { - return { - id: "label____" + item.name, - color: "orange", - label: item.name, - edges: [{ to: item.value!, color: "orange", label: "" }].filter( - t => !!t.to - ), - }; - } else { - return infoSelector(item as T); - } - }); -} diff --git a/data-extraction/src/js/helpers/createGraphFromPointers.ts b/data-extraction/src/js/helpers/createGraphFromPointers.ts new file mode 100644 index 0000000..0cb537c --- /dev/null +++ b/data-extraction/src/js/helpers/createGraphFromPointers.ts @@ -0,0 +1,45 @@ +import { EdgeGraphData, NodeGraphData, CommonDataTypes } from "../.."; +import { createGraph } from "."; + +/** + * Given a labeled list of roots, it creates a graph by following their edges recursively. + * Tracks cycles. + */ +export function createGraphFromPointers( + roots: Record, + infoSelector: ( + item: T + ) => { + id?: string | number; + edges: ({ to: T } & Omit)[]; + } & Omit +): CommonDataTypes.Graph { + const marker = {}; + + interface Pointer { + marker: {}; + name: string; + value: T | null | undefined; + } + + const items = Object.entries(roots).map(([name, value]) => ({ + marker, + name, + value, + })); + + return createGraph(items, item => { + if ("marker" in item && item["marker"] === marker) { + return { + id: "label____" + item.name, + color: "orange", + label: item.name, + edges: [{ to: item.value!, color: "orange", label: "" }].filter( + t => !!t.to + ), + }; + } else { + return infoSelector(item as T); + } + }); +} diff --git a/data-extraction/src/js/helpers/index.ts b/data-extraction/src/js/helpers/index.ts new file mode 100644 index 0000000..b106c10 --- /dev/null +++ b/data-extraction/src/js/helpers/index.ts @@ -0,0 +1,2 @@ +export * from "./createGraph"; +export * from "./createGraphFromPointers"; diff --git a/data-extraction/src/js/index.ts b/data-extraction/src/js/index.ts index aa3cecb..4f6220b 100644 --- a/data-extraction/src/js/index.ts +++ b/data-extraction/src/js/index.ts @@ -1,4 +1,2 @@ -export * from "./Extractors"; -export * from "./DataExtractor"; -export * from "./DataExtractorApi"; -export * from "./createGraph"; +export * from "./api"; +export * from "./helpers"; diff --git a/data-extraction/webpack.config.js b/data-extraction/webpack.config.js new file mode 100644 index 0000000..510beb3 --- /dev/null +++ b/data-extraction/webpack.config.js @@ -0,0 +1,2 @@ +require("ts-node").register(); +module.exports = require("./webpack.config.ts"); diff --git a/data-extraction/webpack.config.ts b/data-extraction/webpack.config.ts new file mode 100644 index 0000000..b830d08 --- /dev/null +++ b/data-extraction/webpack.config.ts @@ -0,0 +1,43 @@ +import * as webpack from "webpack"; +import path = require("path"); +import { CleanWebpackPlugin } from "clean-webpack-plugin"; + +const r = (file: string) => path.resolve(__dirname, file); + +module.exports = { + target: "node", + entry: r("./src/index"), + output: { + path: r("./dist"), + filename: "index.js", + libraryTarget: "commonjs2", + devtoolModuleFilenameTemplate: "../[resource-path]", + }, + devtool: "source-map", + resolve: { + extensions: [".ts", ".js"], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { + loader: "ts-loader", + }, + ], + }, + ], + }, + node: { + __dirname: false, + __filename: false, + }, + plugins: [ + new CleanWebpackPlugin({ + protectWebpackAssets: true, + cleanAfterEveryBuildPatterns: ["!**/*.d.ts", "!**/*.d.ts.map"], + }), + ], +} as webpack.Configuration; diff --git a/example-project/src/demo_custom-data-extractor.ts b/example-project/src/demo_custom-data-extractor.ts index 251f5ae..e98170a 100644 --- a/example-project/src/demo_custom-data-extractor.ts +++ b/example-project/src/demo_custom-data-extractor.ts @@ -1,10 +1,7 @@ -import { - registerDefaultDataExtractors, - getDataExtractorApi, -} from "@hediet/debug-visualizer-data-extraction"; +import { getDataExtractorApi } from "@hediet/debug-visualizer-data-extraction"; // Registers all existing extractors. -registerDefaultDataExtractors(); +getDataExtractorApi().registerDefaultExtractors(); getDataExtractorApi().registerExtractor({ id: "my-extractor", diff --git a/example-project/src/demo_doubly-linked-list.ts b/example-project/src/demo_doubly-linked-list.ts index 6c41a68..36c3d7b 100644 --- a/example-project/src/demo_doubly-linked-list.ts +++ b/example-project/src/demo_doubly-linked-list.ts @@ -1,9 +1,9 @@ import { - registerDefaultDataExtractors, + getDataExtractorApi, createGraphFromPointers, } from "@hediet/debug-visualizer-data-extraction"; -registerDefaultDataExtractors(); +getDataExtractorApi().registerDefaultExtractors(); setTimeout(() => { new Main().run(); diff --git a/example-project/src/demo_typescript.ts b/example-project/src/demo_typescript.ts index c848083..cc6d897 100644 --- a/example-project/src/demo_typescript.ts +++ b/example-project/src/demo_typescript.ts @@ -1,8 +1,9 @@ import * as ts from "typescript"; -import { registerDefaultDataExtractors } from "@hediet/debug-visualizer-data-extraction"; +import { getDataExtractorApi } from "@hediet/debug-visualizer-data-extraction"; import { MockLanguageServiceHost } from "./MockLanguageServiceHost"; -registerDefaultDataExtractors(); +// Registers all existing extractors. +getDataExtractorApi().registerDefaultExtractors(); setTimeout(() => { new Main().run(); diff --git a/extension/package.json b/extension/package.json index 5750c73..49c081f 100644 --- a/extension/package.json +++ b/extension/package.json @@ -64,13 +64,14 @@ "crypto-random-string": "^3.1.0" }, "devDependencies": { - "@types/express": "^4.17.0", - "@types/serve-static": "^1.13.2", - "@types/node": "^12.6.8", - "@types/vscode": "1.35.0", - "tslint": "^5.18.0", - "typescript": "^3.5.3", - "webpack": "^4.38.0", - "webpack-cli": "^3.3.6" + "@types/express": "^4.17.2", + "@types/serve-static": "^1.13.3", + "@types/node": "^13.7.1", + "@types/vscode": "1.42.0", + "tslint": "^6.0.0", + "typescript": "^3.7.5", + "webpack": "^4.41.6", + "webpack-cli": "^3.3.11", + "ts-loader": "^6.2.1" } } diff --git a/extension/src/DataSource/JsDebuggerSource.ts b/extension/src/DataSource/JsDebuggerSource.ts index 42ce1e4..2dd5805 100644 --- a/extension/src/DataSource/JsDebuggerSource.ts +++ b/extension/src/DataSource/JsDebuggerSource.ts @@ -6,14 +6,11 @@ import { import { observable, autorun, action } from "mobx"; import { Disposable } from "@hediet/std/disposable"; import { - selfContainedGetInitializedDataExtractorApi, + getExpressionForDataExtractorApi, DataResult, DataExtractorId, ApiHasNotBeenInitializedCode, - selfContainedInitDataExtractorApi, - TypeScriptAstDataExtractor, - AsIsDataExtractor, - GetDebugVisualizationDataExtractor, + getExpressionToInitializeDataExtractorApi, } from "@hediet/debug-visualizer-data-extraction"; import { DataExtractionState, @@ -100,14 +97,30 @@ export class JsDebuggerSourceImplementation implements JsDataSource { try { w._state = { kind: "loading" }; - const fnSrc = selfContainedGetInitializedDataExtractorApi.toString(); const preferredExtractor = w.preferredDataExtractor ? `"${w.preferredDataExtractor}"` : "undefined"; - const body = `(${fnSrc})().getData(${w.expression}, expr => eval(expr), ${preferredExtractor})`; - const expression = `(() => { try { return ${body}; } catch (e) { return JSON.stringify({ kind: "Error", message: e.message, stack: e.stack }); } })()`; + const body = `${getExpressionForDataExtractorApi()}.getData( + ${w.expression}, + expr => eval(expr), + ${preferredExtractor} + )`; + + const expression = ` + (() => { + try { + return ${body}; + } catch (e) { + return JSON.stringify({ + kind: "Error", + message: e.message, + stack: e.stack + }); + } + })() + `; const reply = await session.evaluate({ expression, @@ -147,24 +160,14 @@ export class JsDebuggerSourceImplementation implements JsDataSource { frameId: number | undefined ): Promise { try { - let expression = `(${selfContainedInitDataExtractorApi.toString()})();`; + // prefer existing is true, so that manually registered (possibly newer) extractors are not overwritten. + const expression = `${getExpressionToInitializeDataExtractorApi()}.registerDefaultExtractors(true);`; - const es = [ - TypeScriptAstDataExtractor, - AsIsDataExtractor, - GetDebugVisualizationDataExtractor, - ].map(e => `new (${e.toString()})()`); - expression += `(${selfContainedGetInitializedDataExtractorApi.toString()})()`; - // prefer existing is true, so that manually registered extractors are not overwritten. - expression += `.registerExtractors([${es.join(",")}], true)`; - - const reply = await session.evaluate({ + await session.evaluate({ expression, frameId, }); - if (reply.result === "true") { - // register extractors - } + return true; } catch (error) { return false; diff --git a/extension/ui/package.json b/extension/ui/package.json index 26707df..c71b219 100644 --- a/extension/ui/package.json +++ b/extension/ui/package.json @@ -28,26 +28,26 @@ "vis-data": "^6.3.5" }, "devDependencies": { - "@types/classnames": "^2.2.8", - "@types/react": "^16.8.21", - "@types/react-dom": "^16.8.4", + "@types/classnames": "^2.2.9", + "@types/react": "^16.9.19", + "@types/react-dom": "^16.9.5", "@types/line-column": "^1.0.0", "clean-webpack-plugin": "^3.0.0", - "css-loader": "^3.0.0", - "file-loader": "^4.0.0", - "fork-ts-checker-webpack-plugin": "^1.4.2", + "css-loader": "^3.4.2", + "file-loader": "^5.0.2", + "fork-ts-checker-webpack-plugin": "^4.0.3", "html-webpack-plugin": "^3.2.0", - "monaco-editor-webpack-plugin": "^1.7.0", - "node-sass": "^4.12.0", - "raw-loader": "^3.0.0", - "sass": "^1.20.1", - "sass-loader": "^7.1.0", - "style-loader": "^0.23.1", - "ts-loader": "^6.0.3", - "ts-node": "^8.3.0", - "typescript": "^3.5.2", - "webpack": "^4.35.0", - "webpack-cli": "^3.3.4", - "webpack-dev-server": "^3.7.2" + "monaco-editor-webpack-plugin": "^1.8.2", + "node-sass": "^4.13.1", + "raw-loader": "^4.0.0", + "sass": "^1.25.0", + "sass-loader": "^8.0.2", + "style-loader": "^1.1.3", + "ts-loader": "^6.2.1", + "ts-node": "^8.6.2", + "typescript": "^3.7.5", + "webpack": "^4.41.6", + "webpack-cli": "^3.3.11", + "webpack-dev-server": "^3.10.3" } } diff --git a/yarn.lock b/yarn.lock index d804293..10662e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,7 +160,7 @@ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== -"@types/classnames@^2.2.8": +"@types/classnames@^2.2.9": version "2.2.9" resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.9.tgz#d868b6febb02666330410fe7f58f3c4b8258be7b" integrity sha512-MNl+rT5UmZeilaPxAVs6YaPC2m6aA8rofviZbhbxpPpl61uKodfdQVsBtgJGTqGizEf02oW3tsVe7FYB8kK14A== @@ -197,10 +197,10 @@ "@types/node" "*" "@types/range-parser" "*" -"@types/express@^4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287" - integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== +"@types/express@^4.17.2": + version "4.17.2" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.2.tgz#a0fb7a23d8855bac31bc01d5a58cadd9b2173e6c" + integrity sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" @@ -248,11 +248,16 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/node@*", "@types/node@^12.0.7", "@types/node@^12.6.8": +"@types/node@*", "@types/node@^12.0.7": version "12.6.8" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== +"@types/node@^13.7.1": + version "13.7.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz#238eb34a66431b71d2aaddeaa7db166f25971a0d" + integrity sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA== + "@types/node@^8.0.7": version "8.10.51" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.51.tgz#80600857c0a47a8e8bafc2dae6daed6db58e3627" @@ -268,10 +273,10 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== -"@types/react-dom@^16.8.4": - version "16.8.5" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.8.5.tgz#3e3f4d99199391a7fb40aa3a155c8dd99b899cbd" - integrity sha512-idCEjROZ2cqh29+trmTmZhsBAUNQuYrF92JHKzZ5+aiFM1mlSk3bb23CK7HhYuOY75Apgap5y2jTyHzaM2AJGA== +"@types/react-dom@^16.9.5": + version "16.9.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.5.tgz#5de610b04a35d07ffd8f44edad93a71032d9aaa7" + integrity sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg== dependencies: "@types/react" "*" @@ -289,7 +294,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.8.21": +"@types/react@*": version "16.8.23" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2" integrity sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA== @@ -297,12 +302,20 @@ "@types/prop-types" "*" csstype "^2.2.0" +"@types/react@^16.9.19": + version "16.9.19" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.19.tgz#c842aa83ea490007d29938146ff2e4d9e4360c40" + integrity sha512-LJV97//H+zqKWMms0kvxaKYJDG05U2TtQB3chRLF8MPNs+MQh/H1aGlyDUxjaHvu08EAGerdX2z4LTBc7ns77A== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/relateurl@*": version "0.2.28" resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.28.tgz#6bda7db8653fa62643f5ee69e9f69c11a392e3a6" integrity sha1-a9p9uGU/piZD9e5p6facEaOS46Y= -"@types/serve-static@*", "@types/serve-static@^1.13.2": +"@types/serve-static@*": version "1.13.2" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" integrity sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q== @@ -310,6 +323,14 @@ "@types/express-serve-static-core" "*" "@types/mime" "*" +"@types/serve-static@^1.13.3": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" + integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + "@types/sinon@^7.0.10": version "7.0.13" resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.13.tgz#ca039c23a9e27ebea53e0901ef928ea2a1a6d313" @@ -332,12 +353,12 @@ dependencies: source-map "^0.6.1" -"@types/vscode@1.35.0": - version "1.35.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.35.0.tgz#b17526ef1e9df5cbf7253be6765a33fd518a2304" - integrity sha512-Iyliuu8Hv4qy4TEaevQzChh9UsTEcuaKdcHXBbvJnoJSF5Td2yNENOrPK+vuOaXJJBhQZb4BNJKOxt6caaQR8A== +"@types/vscode@1.42.0": + version "1.42.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.42.0.tgz#0ad891a9487e91e34be7c56985058a179031eb76" + integrity sha512-ds6TceMsh77Fs0Mq0Vap6Y72JbGWB8Bay4DrnJlf5d9ui2RSe1wis13oQm+XhguOeH1HUfLGzaDAoupTUtgabw== -"@types/webpack@*", "@types/webpack@^4.32.1", "@types/webpack@^4.4.19", "@types/webpack@^4.4.31": +"@types/webpack@*", "@types/webpack@^4.32.1", "@types/webpack@^4.4.31": version "4.32.1" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.32.1.tgz#6e95010e806f808abd6551c112097ac09035aacf" integrity sha512-9n38CBx9uga1FEAdTipnt0EkbKpsCJFh7xJb1LE65FFb/A6OOLFX022vYsGC1IyVCZ/GroNg9u/RMmlDxGcLIw== @@ -525,17 +546,17 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" - integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== +acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== @@ -550,6 +571,16 @@ ajv@^6.1.0, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.10.2: + version "6.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.11.0.tgz#c3607cbc8ae392d8a5a536f25b21f8e5f3f87fe9" + integrity sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -751,10 +782,17 @@ async-limiter@^1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== -async@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" @@ -1034,16 +1072,17 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^11.3.2: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -1157,7 +1196,7 @@ check-error@^1.0.2: optionalDependencies: fsevents "^2.0.6" -chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.6: +chokidar@^2.0.2: version "2.1.6" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== @@ -1176,6 +1215,25 @@ chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.6: optionalDependencies: fsevents "^1.2.7" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" @@ -1192,7 +1250,7 @@ chrome-launcher@^0.11.2: mkdirp "0.5.1" rimraf "^2.6.1" -chrome-trace-event@^1.0.0: +chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== @@ -1264,15 +1322,14 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-deep@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" - integrity sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ== +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - for-own "^1.0.0" is-plain-object "^2.0.4" - kind-of "^6.0.0" - shallow-clone "^1.0.0" + kind-of "^6.0.2" + shallow-clone "^3.0.0" code-point-at@^1.0.0: version "1.1.0" @@ -1519,23 +1576,23 @@ crypto-random-string@^3.1.0: dependencies: type-fest "^0.8.1" -css-loader@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.1.0.tgz#6f008b993b8ce812e6bab57f3cbfdc7a7cf28685" - integrity sha512-MuL8WsF/KSrHCBCYaozBKlx+r7vIfUaDTEreo7wR7Vv3J6N0z6fqWjRk3e/6wjneitXN1r/Y9FTK1psYNOBdJQ== +css-loader@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" + integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.17" + postcss "^7.0.23" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.0" + postcss-modules-scope "^2.1.1" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.0" - schema-utils "^2.0.0" + postcss-value-parser "^4.0.2" + schema-utils "^2.6.0" css-select@^1.1.0: version "1.2.0" @@ -1600,7 +1657,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.2.5, debug@^3.2.6: +debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -1734,7 +1791,7 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== -diff@^3.2.0, diff@^3.5.0: +diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -1957,7 +2014,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-scope@^4.0.0: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -2135,6 +2192,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2172,13 +2234,13 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== -file-loader@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.1.0.tgz#3a763391bc9502da7c59612fe348e38fc1980336" - integrity sha512-ajDk1nlByoalZAGR4b0H6oD+EGlWnyW1qbSxzaUc7RFiqmn+RbXQQRbTc72jsiUIlVusJ4Et58ltds8ZwTfnAw== +file-loader@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-5.0.2.tgz#7f3d8b4ac85a5e8df61338cfec95d7405f971caa" + integrity sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg== dependencies: loader-utils "^1.2.3" - schema-utils "^2.0.0" + schema-utils "^2.5.0" fill-range@^4.0.0: version "4.0.0" @@ -2210,7 +2272,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.0.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -2259,36 +2321,23 @@ follow-redirects@^1.0.0: dependencies: debug "^3.2.6" -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.4.3.tgz#2252c1f8ad1b25313e056835d939b423ea240cd6" - integrity sha512-srf43Z3B1hCJNrwCG78DbHmWgKQUqHKsvFbLP182gank28j9s05KJbSZaMKBA0b6Pqi0LBLpAFWeB0JPbc1iLQ== +fork-ts-checker-webpack-plugin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.0.3.tgz#958f4e4ec3e7fd9d4ad5a50a4442abce77dca19a" + integrity sha512-5hGeMYKg817Hp6rvdc2EOS/T/Cq0JW9LLJDZtVUPlNIojIuP7YbOAdrHEk4Irw1097YQUr56kWIiYhqNPzfNzQ== dependencies: babel-code-frame "^6.22.0" chalk "^2.4.1" - chokidar "^2.0.4" micromatch "^3.1.10" minimatch "^3.0.4" semver "^5.6.0" @@ -2765,7 +2814,7 @@ http-errors@~1.7.2: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= -http-proxy-middleware@^0.19.1: +http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== @@ -2859,6 +2908,11 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2937,6 +2991,11 @@ ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -3344,12 +3403,12 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-runner@^2.3.0: +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -3376,20 +3435,15 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash.tail@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" - integrity sha1-0jM6NtnncXyK0vfKyv7HwytERmQ= - -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.3, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -loglevel@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.3.tgz#77f2eb64be55a404c9fd04ad16d57c1d6d6b1280" - integrity sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA== +loglevel@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56" + integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A== lolex@^4.0.1, lolex@^4.1.0: version "4.1.0" @@ -3501,7 +3555,7 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -3540,7 +3594,7 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -3592,7 +3646,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.2: +mime@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== @@ -3668,15 +3722,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -3700,12 +3746,12 @@ mobx@^5.10.0, mobx@^5.10.1: resolved "https://registry.yarnpkg.com/mobx/-/mobx-5.13.0.tgz#0fd68f10aa5ff2d146a4ed9e145b53337cfbca59" integrity sha512-eSAntMSMNj0PFL705rgv+aB/z1RjNqDnFEpBe18yQVreXTWiVgIrmBUXzjnJfuba+eo4eAk6zi+/gXQkSUea8A== -monaco-editor-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.7.0.tgz#920cbeecca25f15d70d568a7e11b0ba4daf1ae83" - integrity sha512-oItymcnlL14Sjd7EF7q+CMhucfwR/2BxsqrXIBrWL6LQplFfAfV+grLEQRmVHeGSBZ/Gk9ptzfueXnWcoEcFuA== +monaco-editor-webpack-plugin@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.8.2.tgz#3721b8d9a3e2e41b154cf2a2955a7d7246c03714" + integrity sha512-g9G7A/lxQtpPsYaZFBqm73dwVkOziGUXExIR6iW7ksZUaiMkpvdTiE9O8edgdJGo+XtCmjycmIKB1Lt8VKbSTQ== dependencies: - "@types/webpack" "^4.4.19" + loader-utils "^1.2.3" monaco-editor@^0.17.1: version "0.17.1" @@ -3788,7 +3834,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0: +neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -3824,10 +3870,10 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" - integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ== +node-forge@0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" + integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== node-gyp@^3.8.0: version "3.8.0" @@ -3847,7 +3893,7 @@ node-gyp@^3.8.0: tar "^2.0.0" which "1" -node-libs-browser@^2.0.0: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -3892,10 +3938,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-sass@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== +node-sass@^4.13.1: + version "4.13.1" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" + integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -3904,7 +3950,7 @@ node-sass@^4.12.0: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" @@ -4324,11 +4370,6 @@ pify@^2.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -4358,14 +4399,14 @@ popper.js@^1.14.1, popper.js@^1.14.4, popper.js@^1.15.0: resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== -portfinder@^1.0.20: - version "1.0.21" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.21.tgz#60e1397b95ac170749db70034ece306b9a27e324" - integrity sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA== +portfinder@^1.0.25: + version "1.0.25" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" + integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== dependencies: - async "^1.5.2" - debug "^2.2.0" - mkdirp "0.5.x" + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.1" posix-character-classes@^0.1.0: version "0.1.1" @@ -4389,10 +4430,10 @@ postcss-modules-local-by-default@^3.0.2: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.0" -postcss-modules-scope@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" - integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== +postcss-modules-scope@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz#33d4fc946602eb5e9355c4165d68a10727689dba" + integrity sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ== dependencies: postcss "^7.0.6" postcss-selector-parser "^6.0.0" @@ -4419,7 +4460,12 @@ postcss-value-parser@^4.0.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz#99a983d365f7b2ad8d0f9b8c3094926eab4b936d" integrity sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ== -postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0.6: +postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.5, postcss@^7.0.6: version "7.0.17" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== @@ -4428,6 +4474,15 @@ postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0. source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.23: + version "7.0.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" + integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -4602,13 +4657,13 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== +raw-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.0.tgz#d639c40fb9d72b5c7f8abc1fb2ddb25b29d3d540" + integrity sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q== dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" + loader-utils "^1.2.3" + schema-utils "^2.5.0" rc@^1.2.7: version "1.2.8" @@ -4951,22 +5006,21 @@ sass-graph@^2.2.4: scss-tokenizer "^0.2.3" yargs "^7.0.0" -sass-loader@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d" - integrity sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w== +sass-loader@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== dependencies: - clone-deep "^2.0.1" - loader-utils "^1.0.1" - lodash.tail "^4.1.1" - neo-async "^2.5.0" - pify "^3.0.0" - semver "^5.5.0" + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" -sass@^1.20.1: - version "1.22.7" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.22.7.tgz#5a1a77dc11aa659db4e782d238bf9f3d44a60546" - integrity sha512-ahREi0AdG7RTovSv14+yd1prQSfIvFcrDpOsth5EQf1+RM7SvOxsSttzNQaFmK1aa/k/3vyYwlYF5l0Xl+6c+g== +sass@^1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.25.0.tgz#f8bd7dfbb39d6b0305e27704a8ebe637820693f3" + integrity sha512-uQMjye0Y70SEDGO56n0j91tauqS9E1BmpKHtiYNQScXDHeaE9uHwNEqQNFf4Bes/3DHMNinB6u79JsG10XWNyw== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -4992,13 +5046,13 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.0.1.tgz#1eec2e059556af841b7f3a83b61af13d7a3f9196" - integrity sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A== +schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53" + integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ== dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" + ajv "^6.10.2" + ajv-keywords "^3.4.1" scss-tokenizer@^0.2.3: version "0.2.3" @@ -5013,19 +5067,19 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd" - integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw== +selfsigned@^1.10.7: + version "1.10.7" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" + integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== dependencies: - node-forge "0.7.5" + node-forge "0.9.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.0.0, semver@^6.1.1: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -5054,10 +5108,10 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" - integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== serve-index@^1.9.1: version "1.9.1" @@ -5120,14 +5174,12 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" - integrity sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - is-extendable "^0.1.1" - kind-of "^5.0.0" - mixin-object "^2.0.1" + kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" @@ -5189,10 +5241,10 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sockjs-client@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177" - integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg== +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== dependencies: debug "^3.2.5" eventsource "^1.0.7" @@ -5293,10 +5345,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.0.tgz#81f222b5a743a329aa12cea6a390e60e9b613c52" - integrity sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q== +spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -5488,13 +5540,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^0.23.1: - version "0.23.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== +style-loader@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" + integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw== dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" + loader-utils "^1.2.3" + schema-utils "^2.6.4" supports-color@6.1.0, supports-color@^6.1.0: version "6.1.0" @@ -5515,7 +5567,7 @@ supports-color@^5.3.0, supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== @@ -5542,26 +5594,25 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" - integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== dependencies: - cacache "^11.3.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" is-wsl "^1.1.0" - loader-utils "^1.2.3" schema-utils "^1.0.0" - serialize-javascript "^1.7.0" + serialize-javascript "^2.1.2" source-map "^0.6.1" - terser "^4.0.0" - webpack-sources "^1.3.0" + terser "^4.1.2" + webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" - integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== +terser@^4.1.2: + version "4.6.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.3.tgz#e33aa42461ced5238d352d2df2a67f21921f8d87" + integrity sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -5659,10 +5710,10 @@ trim-newlines@^1.0.0: dependencies: glob "^7.1.2" -ts-loader@^6.0.3: - version "6.0.4" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.0.4.tgz#bc331ad91a887a60632d94c9f79448666f2c4b63" - integrity sha512-p2zJYe7OtwR+49kv4gs7v4dMrfYD1IPpOtqiSPCbe8oR+4zEBtdHwzM7A7M91F+suReqgzZrlClk4LRSSp882g== +ts-loader@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" + integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -5670,39 +5721,39 @@ ts-loader@^6.0.3: micromatch "^4.0.0" semver "^6.0.0" -ts-node@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" - integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== +ts-node@^8.6.2: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35" + integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg== dependencies: arg "^4.1.0" diff "^4.0.1" make-error "^1.1.1" source-map-support "^0.5.6" - yn "^3.0.0" + yn "3.1.1" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslint@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== +tslint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.0.0.tgz#1c0148beac4779924216302f192cdaa153618310" + integrity sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA== dependencies: "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" - diff "^3.2.0" + diff "^4.0.1" glob "^7.1.1" js-yaml "^3.13.1" minimatch "^3.0.4" mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" - tslib "^1.8.0" + tslib "^1.10.0" tsutils "^2.29.0" tsutils@^2.29.0: @@ -5757,10 +5808,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.5.2, typescript@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" - integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== +typescript@^3.7.5: + version "3.7.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae" + integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw== ua-parser-js@^0.7.18: version "0.7.20" @@ -5969,7 +6020,7 @@ warning@^4.0.2: dependencies: loose-envify "^1.0.0" -watchpack@^1.5.0: +watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== @@ -5985,10 +6036,10 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webpack-cli@^3.3.4, webpack-cli@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.6.tgz#2c8c399a2642133f8d736a359007a052e060032c" - integrity sha512-0vEa83M7kJtxK/jUhlpZ27WHIOndz5mghWL2O53kiDoA9DIxSKnfqB92LoqEn77cT4f3H2cZm1BMEat/6AZz3A== +webpack-cli@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -6002,51 +6053,54 @@ webpack-cli@^3.3.4, webpack-cli@^3.3.6: v8-compile-cache "2.0.3" yargs "13.2.4" -webpack-dev-middleware@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz#ef751d25f4e9a5c8a35da600c5fda3582b5c6cff" - integrity sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA== +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== dependencies: memory-fs "^0.4.1" - mime "^2.4.2" + mime "^2.4.4" + mkdirp "^0.5.1" range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.7.2.tgz#f79caa5974b7f8b63268ef5421222a8486d792f5" - integrity sha512-mjWtrKJW2T9SsjJ4/dxDC2fkFVUw8jlpemDERqV0ZJIkjjjamR2AbQlr3oz+j4JLhYCHImHnXZK5H06P2wvUew== +webpack-dev-server@^3.10.3: + version "3.10.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" - chokidar "^2.1.6" + chokidar "^2.1.8" compression "^1.7.4" connect-history-api-fallback "^1.6.0" debug "^4.1.1" del "^4.1.1" express "^4.17.1" html-entities "^1.2.1" - http-proxy-middleware "^0.19.1" + http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" + is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.3" + loglevel "^1.6.6" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.20" + portfinder "^1.0.25" schema-utils "^1.0.0" - selfsigned "^1.10.4" - semver "^6.1.1" + selfsigned "^1.10.7" + semver "^6.3.0" serve-index "^1.9.1" sockjs "0.3.19" - sockjs-client "1.3.0" - spdy "^4.0.0" + sockjs-client "1.4.0" + spdy "^4.0.1" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" - webpack-dev-middleware "^3.7.0" + webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" + ws "^6.2.1" yargs "12.0.5" webpack-log@^2.0.0: @@ -6057,42 +6111,42 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.35.0, webpack@^4.38.0: - version "4.38.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.38.0.tgz#6d77108404b08883c78f4e7e45a43c4e5c47c931" - integrity sha512-lbuFsVOq8PZY+1Ytz/mYOvYOo+d4IJ31hHk/7iyoeWtwN33V+5HYotSH+UIb9tq914ey0Hot7z6HugD+je3sWw== +webpack@^4.41.6: + version "4.41.6" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.6.tgz#12f2f804bf6542ef166755050d4afbc8f66ba7e1" + integrity sha512-yxXfV0Zv9WMGRD+QexkZzmGIh54bsvEs+9aRWxnN8erLWEOehAKUTeNBoUbA6HPEZPlRo7KDi2ZcNveoZgK9MA== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" "@webassemblyjs/wasm-edit" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" websocket-driver@>=0.5.1: version "0.7.3" @@ -6173,6 +6227,13 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + ws@^7.0.0, ws@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/ws/-/ws-7.1.1.tgz#f9942dc868b6dffb72c14fd8f2ba05f77a4d5983" @@ -6282,7 +6343,7 @@ yargs@^7.0.0: y18n "^3.2.1" yargs-parser "^5.0.0" -yn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.0.tgz#fcbe2db63610361afcc5eb9e0ac91e976d046114" - integrity sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==