From be038f26a96f22609fe6da887b6de23ab1d0a860 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 4 Jan 2021 22:06:15 +0530 Subject: [PATCH 001/176] Create Abstract Syntax Tree (AST) prototype --- src/.prototype/@types/AST.d.ts | 64 ++++++++ src/.prototype/AST.ts | 258 +++++++++++++++++++++++++++++++++ 2 files changed, 322 insertions(+) create mode 100644 src/.prototype/@types/AST.d.ts create mode 100644 src/.prototype/AST.ts diff --git a/src/.prototype/@types/AST.d.ts b/src/.prototype/@types/AST.d.ts new file mode 100644 index 0000000..885f542 --- /dev/null +++ b/src/.prototype/@types/AST.d.ts @@ -0,0 +1,64 @@ +// ---- Argument Element --------------------------------------------------------------------------- + +/** Whether argument element is simply a value or maps values to another, i.e. a function */ +export type TArgType = "value" | "function"; +/** Type of value returned by argument element in string */ +export type TArgReturn = "string" | "number" | "boolean"; +/** Type of value returned by argument element value */ +export type TArgValue = string | number | boolean; + +/** Argument element properties */ +export interface IArgProps { + /** What the argument element represents */ + argName: string; + /** valid if argument element is of type "function" */ + args?: IArgElement[]; + /** valid if argument element is of type "value" */ + value?: string | number | boolean; +} + +/** Argument element */ +export interface IArgElement { + argType: TArgType; + returnType: TArgReturn; + props: IArgProps; +} + +// ---- Syntax Element - instruction --------------------------------------------------------------- + +/** AST instruction category */ +export type TInstructionType = + | "start" + | "action" + | "flow" + | "flow-no-args" + | "clamp" + | "clamp-no-args"; + +/** AST instruction properties */ +export interface IInstructionProps { + /** name of the instruction represented */ + instruction: string; + /** list of arguments; valid if element takes arguments */ + args?: IArgElement[]; + /** linked-list of blocks; valid if element is a clamp (or action/start) type */ + childStack?: ISyntaxElement[]; +} + +/** AST syntax element - instruction */ +export interface ISyntaxElement { + type: TInstructionType; + props: IInstructionProps; +} + +// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- + +export interface IStack { + name: string; + stack: ISyntaxElement[]; +} + +export interface IAST { + startStacks: IStack[]; + actionStacks: IStack[]; +} diff --git a/src/.prototype/AST.ts b/src/.prototype/AST.ts new file mode 100644 index 0000000..481cb1d --- /dev/null +++ b/src/.prototype/AST.ts @@ -0,0 +1,258 @@ +import * as TS from './@types/AST'; + +// ---- Argument Element --------------------------------------------------------------------------- + +export class ArgElement implements TS.IArgElement { + private _argType: TS.TArgType; + private _returnType: TS.TArgReturn; + private _argName: string; + private _args: TS.IArgElement[] | null; + private _value: TS.TArgValue | null; + + constructor(argType: TS.TArgType, returnType: TS.TArgReturn, props: TS.IArgProps) { + const { argName, args, value } = { ...props }; + + switch (argType) { + case 'function': + if (!this._validateArgType('function', argName)) { + throw Error(`Invalid argument type: "${argName}" is not a function`); + } + if (args === undefined) { + throw Error(`Invalid arguments: "${argName}" requires arguments`); + } else { + try { + this._args = this._validateArgs(argName, args); + } catch (e) { + throw e; + } + } + if (value !== undefined) { + console.warn(`"${argName}" is a function and doesn't store a value`); + } + this._value = null; + break; + case 'value': + if (!this._validateArgType('value', argName)) { + throw Error(`Invalid argument type: "${argName}" is not a value`); + } + if (args !== undefined) { + console.warn(`"${argName}" is a value and doesn't take arguments`); + } + this._args = null; + if (value === undefined) { + throw Error('Invalid argument value: value is required'); + } + this._value = value; + break; + default: + throw Error(`Invalid argument type: "${argType}" type doesn't exist`); + } + + this._argType = argType; + this._returnType = returnType; + this._argName = argName; + } + + private _validateArgType(type: TS.TArgType, argName: string): boolean { + return true; + } + + private _validateArgs(argName: string, args: TS.IArgElement[]): TS.IArgElement[] { + // throw Error(`Invalid arguments: .....`); + return args; + } + + /** Returns the argument element type - function or value. */ + get argType() { + return this._argType; + } + + /** Returns the return type of the argument element. */ + get returnType() { + return this._returnType; + } + + /** Returns the state properties of the argument element. */ + get props() { + const propObj: TS.IArgProps = { argName: this._argName }; + if (this._args) { + propObj['args'] = this._args; + } + if (this._value) { + propObj['value'] = this._value; + } + return propObj; + } +} + +// ---- Syntax Element - instruction --------------------------------------------------------------- + +export class SyntaxElement implements TS.ISyntaxElement { + private _type: TS.TInstructionType; + private _instruction: string; + private _args: TS.IArgElement[] | null; + private _childStack: TS.ISyntaxElement[] | null; + + constructor(type: TS.TInstructionType, props: TS.IInstructionProps) { + const { instruction, args, childStack } = { ...props }; + this._instruction = instruction; + + switch (type) { + case 'start': + if (instruction !== 'start') { + console.warn('instruction for "start" should be "start"'); + } + this._instruction = 'start'; + if (args !== undefined) { + console.warn('"start" takes no arguments'); + } + this._args = null; + if (childStack === undefined) { + console.warn('"start" takes a child flow'); + this._childStack = []; + } else { + this._childStack = childStack; + } + break; + case 'action': + if (instruction !== 'action') { + console.warn('instruction for "action" should be "action"'); + } + this._instruction = 'action'; + if (args === undefined) { + throw Error('Invalid arguments: "action" requires an argument'); + } + this._args = args; + if (childStack === undefined) { + console.warn('"action" takes a child flow'); + this._childStack = []; + } else { + this._childStack = childStack; + } + break; + case 'flow': + if (!this._validateInstructionType('flow', instruction)) { + throw Error(`Invalid instruction category: "${instruction}" is not a flow`); + } + if (args === undefined) { + throw Error(`Invalid arguments: "${instruction}" requires arguments`); + } else { + try { + this._args = this._validateArgs(instruction, args); + } catch (e) { + throw e; + } + } + if (childStack !== undefined) { + console.warn(`"${instruction}" takes no child flow`); + } + this._childStack = null; + break; + case 'flow-no-args': + if (!this._validateInstructionType('flow', instruction)) { + throw Error(`Invalid instruction category: "${instruction}" is not a flow`); + } + if (args !== undefined || childStack !== undefined) { + console.warn(`"${instruction}" takes no arguments or child flow`); + } + this._args = this._childStack = null; + break; + case 'clamp': + if (!this._validateInstructionType('clamp', instruction)) { + throw Error(`Invalid instruction category: "${instruction}" is not a clamp`); + } + if (args === undefined) { + throw Error(`Invalid arguments: "${instruction}" requires arguments`); + } else { + try { + this._args = this._validateArgs(instruction, args); + } catch (e) { + throw e; + } + } + if (childStack === undefined) { + console.warn(`"${instruction}" takes a child flow`); + this._childStack = []; + } else { + this._childStack = childStack; + } + break; + case 'clamp-no-args': + if (!this._validateInstructionType('clamp', instruction)) { + throw Error(`Invalid instruction category: "${instruction}" is not a clamp`); + } + if (args !== undefined) { + console.warn(`"${instruction}" takes no arguments`); + } + this._args = null; + if (childStack === undefined) { + console.warn(`"${instruction}" takes a child flow`); + this._childStack = []; + } else { + this._childStack = childStack; + } + break; + default: + throw Error(`Invalid instruction type: "${type}" instruction doesn't exist`); + } + + this._type = type; + } + + private _validateInstructionType(type: TS.TInstructionType, instruction: string): boolean { + return true; + } + + private _validateArgs(instruction: string, args: TS.IArgElement[]): TS.IArgElement[] { + // throw Error(`Invalid arguments: .....`); + return args; + } + + /** Returns the instruction category. */ + get type() { + return this._type; + } + + /** Returns the state properties of the instruction. */ + get props() { + const propObj: TS.IInstructionProps = { instruction: this._instruction }; + if (this._args) { + propObj['args'] = this._args; + } + if (this._childStack) { + propObj['childStack'] = this._childStack; + } + return propObj; + } +} + +// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- + +export class AST implements TS.IAST { + /** Stores the singleton instance (once instantiated). */ + private static _instance: AST | undefined; + + private _startStacks: TS.IStack[] = []; + private _actionStacks: TS.IStack[] = []; + + /** Creates and returns a new instance of the class if one doesn't exist, else returns the existing one. */ + constructor() { + if (AST._instance) { + return AST._instance; + } + AST._instance = this; + } + + /** Getter that returns the singleton instance. */ + static get instance() { + return AST._instance; + } + + get startStacks() { + return this._startStacks; + } + + get actionStacks() { + return this._actionStacks; + } +} From ebdc512300431b0a38943f87ae499cef03337272 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 4 Jan 2021 23:53:48 +0530 Subject: [PATCH 002/176] Create primitive value (data type classes) elements --- .../syntaxElems/@types/syntaxElems.d.ts | 3 + src/.prototype/syntaxElems/valueElems.test.ts | 57 ++++++++++++++++++ src/.prototype/syntaxElems/valueElems.ts | 58 +++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 src/.prototype/syntaxElems/@types/syntaxElems.d.ts create mode 100644 src/.prototype/syntaxElems/valueElems.test.ts create mode 100644 src/.prototype/syntaxElems/valueElems.ts diff --git a/src/.prototype/syntaxElems/@types/syntaxElems.d.ts b/src/.prototype/syntaxElems/@types/syntaxElems.d.ts new file mode 100644 index 0000000..0e78a94 --- /dev/null +++ b/src/.prototype/syntaxElems/@types/syntaxElems.d.ts @@ -0,0 +1,3 @@ +export interface IValueElement { + value: T; +} diff --git a/src/.prototype/syntaxElems/valueElems.test.ts b/src/.prototype/syntaxElems/valueElems.test.ts new file mode 100644 index 0000000..123aeb3 --- /dev/null +++ b/src/.prototype/syntaxElems/valueElems.test.ts @@ -0,0 +1,57 @@ +import { TInt, TFloat, TChar, TString, TBoolean } from './valueElems'; + +test('assign 5 to TInt to equal 5', () => { + const typeObj = new TInt(5); + expect(typeObj.value).toBe(5); +}); + +test('assign Math.PI (3.1415..) to TInt to equal 3', () => { + const typeObj = new TInt(Math.PI); + expect(typeObj.value).toBe(3); +}); + +test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { + const typeObj = new TFloat(Math.E); + expect(typeObj.value).toBe(Math.E); +}); + +test('assign "mystring" to TChar to equal "m"', () => { + const typeObj = new TChar('mystring'); + expect(typeObj.value).toBe('m'); +}); + +test('assign "" to TChar to equal ASCII 0 character', () => { + const typeObj = new TChar(''); + expect(typeObj.value).toBe(String.fromCharCode(0)); +}); + +test('assign 65 to TChar to equal "A"', () => { + const typeObj = new TChar(65); + expect(typeObj.value).toBe('A'); +}); + +test('assign 500 to TChar to equal ASCII 255 character', () => { + const typeObj = new TChar(500); + expect(typeObj.value).toBe(String.fromCharCode(255)); +}); + +test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { + const typeObj = new TChar(65); + typeObj.addOffset(-500); + expect(typeObj.value).toBe(String.fromCharCode(0)); +}); + +test('assign "mystring" to TString to equal "mystring"', () => { + const typeObj = new TString('mystring'); + expect(typeObj.value).toBe('mystring'); +}); + +test('assign true to TBoolean to equal true', () => { + const typeObj = new TBoolean(true); + expect(typeObj.value).toBe(true); +}); + +test('assign false to TBoolean to equal false', () => { + const typeObj = new TBoolean(false); + expect(typeObj.value).toBe(false); +}); diff --git a/src/.prototype/syntaxElems/valueElems.ts b/src/.prototype/syntaxElems/valueElems.ts new file mode 100644 index 0000000..836bbfa --- /dev/null +++ b/src/.prototype/syntaxElems/valueElems.ts @@ -0,0 +1,58 @@ +import { IValueElement } from './@types/syntaxElems'; + +class ValueElement implements IValueElement { + private _value: T; + + constructor(value: T) { + this._value = value; + } + + get value() { + return this._value; + } + + update(value: T) { + this._value = value; + } +} + +export class TInt extends ValueElement { + constructor(value: number) { + super(Math.floor(value)); + } +} + +export class TFloat extends ValueElement { + constructor(value: number) { + super(value); + } +} + +export class TChar extends ValueElement { + constructor(value: string | number) { + super( + typeof value === 'string' + ? value.length === 0 + ? String.fromCharCode(0) + : value.charAt(0) + : String.fromCharCode(Math.min(Math.max(value, 0), 255)) + ); + } + + addOffset(offset: number) { + const asciiValue = this.value.charCodeAt(0); + this.update(String.fromCharCode(Math.min(Math.max(asciiValue + offset, 0), 255))); + } +} + +export class TString extends ValueElement { + constructor(value: string) { + super(value); + } +} + +export class TBoolean extends ValueElement { + constructor(value: boolean) { + super(value); + } +} From e4db9319a0faa52955cdc075d3c7e1d64409f4b7 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 5 Jan 2021 01:25:21 +0530 Subject: [PATCH 003/176] Rename value to data --- .../syntaxElems/@types/syntaxElems.d.ts | 4 +- .../{valueElems.test.ts => dataElems.test.ts} | 24 ++++---- src/.prototype/syntaxElems/dataElems.ts | 58 +++++++++++++++++++ src/.prototype/syntaxElems/valueElems.ts | 58 ------------------- 4 files changed, 72 insertions(+), 72 deletions(-) rename src/.prototype/syntaxElems/{valueElems.test.ts => dataElems.test.ts} (68%) create mode 100644 src/.prototype/syntaxElems/dataElems.ts delete mode 100644 src/.prototype/syntaxElems/valueElems.ts diff --git a/src/.prototype/syntaxElems/@types/syntaxElems.d.ts b/src/.prototype/syntaxElems/@types/syntaxElems.d.ts index 0e78a94..24a8ba8 100644 --- a/src/.prototype/syntaxElems/@types/syntaxElems.d.ts +++ b/src/.prototype/syntaxElems/@types/syntaxElems.d.ts @@ -1,3 +1,3 @@ -export interface IValueElement { - value: T; +export interface IDataElement { + data: T; } diff --git a/src/.prototype/syntaxElems/valueElems.test.ts b/src/.prototype/syntaxElems/dataElems.test.ts similarity index 68% rename from src/.prototype/syntaxElems/valueElems.test.ts rename to src/.prototype/syntaxElems/dataElems.test.ts index 123aeb3..702a53f 100644 --- a/src/.prototype/syntaxElems/valueElems.test.ts +++ b/src/.prototype/syntaxElems/dataElems.test.ts @@ -1,57 +1,57 @@ -import { TInt, TFloat, TChar, TString, TBoolean } from './valueElems'; +import { TInt, TFloat, TChar, TString, TBoolean } from './dataElems'; test('assign 5 to TInt to equal 5', () => { const typeObj = new TInt(5); - expect(typeObj.value).toBe(5); + expect(typeObj.data).toBe(5); }); test('assign Math.PI (3.1415..) to TInt to equal 3', () => { const typeObj = new TInt(Math.PI); - expect(typeObj.value).toBe(3); + expect(typeObj.data).toBe(3); }); test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { const typeObj = new TFloat(Math.E); - expect(typeObj.value).toBe(Math.E); + expect(typeObj.data).toBe(Math.E); }); test('assign "mystring" to TChar to equal "m"', () => { const typeObj = new TChar('mystring'); - expect(typeObj.value).toBe('m'); + expect(typeObj.data).toBe('m'); }); test('assign "" to TChar to equal ASCII 0 character', () => { const typeObj = new TChar(''); - expect(typeObj.value).toBe(String.fromCharCode(0)); + expect(typeObj.data).toBe(String.fromCharCode(0)); }); test('assign 65 to TChar to equal "A"', () => { const typeObj = new TChar(65); - expect(typeObj.value).toBe('A'); + expect(typeObj.data).toBe('A'); }); test('assign 500 to TChar to equal ASCII 255 character', () => { const typeObj = new TChar(500); - expect(typeObj.value).toBe(String.fromCharCode(255)); + expect(typeObj.data).toBe(String.fromCharCode(255)); }); test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { const typeObj = new TChar(65); typeObj.addOffset(-500); - expect(typeObj.value).toBe(String.fromCharCode(0)); + expect(typeObj.data).toBe(String.fromCharCode(0)); }); test('assign "mystring" to TString to equal "mystring"', () => { const typeObj = new TString('mystring'); - expect(typeObj.value).toBe('mystring'); + expect(typeObj.data).toBe('mystring'); }); test('assign true to TBoolean to equal true', () => { const typeObj = new TBoolean(true); - expect(typeObj.value).toBe(true); + expect(typeObj.data).toBe(true); }); test('assign false to TBoolean to equal false', () => { const typeObj = new TBoolean(false); - expect(typeObj.value).toBe(false); + expect(typeObj.data).toBe(false); }); diff --git a/src/.prototype/syntaxElems/dataElems.ts b/src/.prototype/syntaxElems/dataElems.ts new file mode 100644 index 0000000..d17498a --- /dev/null +++ b/src/.prototype/syntaxElems/dataElems.ts @@ -0,0 +1,58 @@ +import { IDataElement } from './@types/syntaxElems'; + +class DataElement implements IDataElement { + private _data: T; + + constructor(data: T) { + this._data = data; + } + + get data() { + return this._data; + } + + update(data: T) { + this._data = data; + } +} + +export class TInt extends DataElement { + constructor(data: number) { + super(Math.floor(data)); + } +} + +export class TFloat extends DataElement { + constructor(data: number) { + super(data); + } +} + +export class TChar extends DataElement { + constructor(data: string | number) { + super( + typeof data === 'string' + ? data.length === 0 + ? String.fromCharCode(0) + : data.charAt(0) + : String.fromCharCode(Math.min(Math.max(data, 0), 255)) + ); + } + + addOffset(offset: number) { + const asciiValue = this.data.charCodeAt(0); + this.update(String.fromCharCode(Math.min(Math.max(asciiValue + offset, 0), 255))); + } +} + +export class TString extends DataElement { + constructor(data: string) { + super(data); + } +} + +export class TBoolean extends DataElement { + constructor(data: boolean) { + super(data); + } +} diff --git a/src/.prototype/syntaxElems/valueElems.ts b/src/.prototype/syntaxElems/valueElems.ts deleted file mode 100644 index 836bbfa..0000000 --- a/src/.prototype/syntaxElems/valueElems.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { IValueElement } from './@types/syntaxElems'; - -class ValueElement implements IValueElement { - private _value: T; - - constructor(value: T) { - this._value = value; - } - - get value() { - return this._value; - } - - update(value: T) { - this._value = value; - } -} - -export class TInt extends ValueElement { - constructor(value: number) { - super(Math.floor(value)); - } -} - -export class TFloat extends ValueElement { - constructor(value: number) { - super(value); - } -} - -export class TChar extends ValueElement { - constructor(value: string | number) { - super( - typeof value === 'string' - ? value.length === 0 - ? String.fromCharCode(0) - : value.charAt(0) - : String.fromCharCode(Math.min(Math.max(value, 0), 255)) - ); - } - - addOffset(offset: number) { - const asciiValue = this.value.charCodeAt(0); - this.update(String.fromCharCode(Math.min(Math.max(asciiValue + offset, 0), 255))); - } -} - -export class TString extends ValueElement { - constructor(value: string) { - super(value); - } -} - -export class TBoolean extends ValueElement { - constructor(value: boolean) { - super(value); - } -} From 0fb41b882b7e3b144013602fce7fff32b7afc609 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 5 Jan 2021 14:43:39 +0530 Subject: [PATCH 004/176] Rename DataElement to PrimitiveElement --- .../syntaxElements/@types/primitiveTypes.d.ts | 17 +++++++++++++++++ .../primitiveElements.test.ts} | 2 +- .../primitiveElements.ts} | 14 +++++++------- .../syntaxElems/@types/syntaxElems.d.ts | 3 --- 4 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 src/.prototype/syntaxElements/@types/primitiveTypes.d.ts rename src/.prototype/{syntaxElems/dataElems.test.ts => syntaxElements/primitiveElements.test.ts} (95%) rename src/.prototype/{syntaxElems/dataElems.ts => syntaxElements/primitiveElements.ts} (70%) delete mode 100644 src/.prototype/syntaxElems/@types/syntaxElems.d.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts new file mode 100644 index 0000000..40f9160 --- /dev/null +++ b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts @@ -0,0 +1,17 @@ +import { + TInt as Int, + TFloat as Float, + TChar as Char, + TString as String, + TBoolean as Boolean +} from '../primitiveElements'; + +export interface IPrimitiveElement { + data: T; +} + +export type TInt = Int; +export type TFloat = Float; +export type TChar = Char; +export type TString = String; +export type TBoolean = Boolean; diff --git a/src/.prototype/syntaxElems/dataElems.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts similarity index 95% rename from src/.prototype/syntaxElems/dataElems.test.ts rename to src/.prototype/syntaxElements/primitiveElements.test.ts index 702a53f..8a230af 100644 --- a/src/.prototype/syntaxElems/dataElems.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -1,4 +1,4 @@ -import { TInt, TFloat, TChar, TString, TBoolean } from './dataElems'; +import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; test('assign 5 to TInt to equal 5', () => { const typeObj = new TInt(5); diff --git a/src/.prototype/syntaxElems/dataElems.ts b/src/.prototype/syntaxElements/primitiveElements.ts similarity index 70% rename from src/.prototype/syntaxElems/dataElems.ts rename to src/.prototype/syntaxElements/primitiveElements.ts index d17498a..176ff47 100644 --- a/src/.prototype/syntaxElems/dataElems.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -1,6 +1,6 @@ -import { IDataElement } from './@types/syntaxElems'; +import { IPrimitiveElement } from './@types/primitiveTypes'; -class DataElement implements IDataElement { +class PrimitiveElement implements IPrimitiveElement { private _data: T; constructor(data: T) { @@ -16,19 +16,19 @@ class DataElement implements IDataElement { } } -export class TInt extends DataElement { +export class TInt extends PrimitiveElement { constructor(data: number) { super(Math.floor(data)); } } -export class TFloat extends DataElement { +export class TFloat extends PrimitiveElement { constructor(data: number) { super(data); } } -export class TChar extends DataElement { +export class TChar extends PrimitiveElement { constructor(data: string | number) { super( typeof data === 'string' @@ -45,13 +45,13 @@ export class TChar extends DataElement { } } -export class TString extends DataElement { +export class TString extends PrimitiveElement { constructor(data: string) { super(data); } } -export class TBoolean extends DataElement { +export class TBoolean extends PrimitiveElement { constructor(data: boolean) { super(data); } diff --git a/src/.prototype/syntaxElems/@types/syntaxElems.d.ts b/src/.prototype/syntaxElems/@types/syntaxElems.d.ts deleted file mode 100644 index 24a8ba8..0000000 --- a/src/.prototype/syntaxElems/@types/syntaxElems.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IDataElement { - data: T; -} From 7bcc3edfdd6fd11dedb0bc7a5f18be7219bdc086 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 5 Jan 2021 15:34:46 +0530 Subject: [PATCH 005/176] Separate IPrimitiveElement interface --- src/.prototype/syntaxElements/@types/primitiveElements.d.ts | 3 +++ src/.prototype/syntaxElements/@types/primitiveTypes.d.ts | 4 ---- src/.prototype/syntaxElements/primitiveElements.ts | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 src/.prototype/syntaxElements/@types/primitiveElements.d.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts new file mode 100644 index 0000000..d42d1d9 --- /dev/null +++ b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts @@ -0,0 +1,3 @@ +export interface IPrimitiveElement { + data: T; +} diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts index 40f9160..01efae3 100644 --- a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts +++ b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts @@ -6,10 +6,6 @@ import { TBoolean as Boolean } from '../primitiveElements'; -export interface IPrimitiveElement { - data: T; -} - export type TInt = Int; export type TFloat = Float; export type TChar = Char; diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index 176ff47..7001954 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -1,4 +1,4 @@ -import { IPrimitiveElement } from './@types/primitiveTypes'; +import { IPrimitiveElement } from './@types/primitiveElements'; class PrimitiveElement implements IPrimitiveElement { private _data: T; From 4933b53e5e53ffafa6620fbafb4902e25b4943a0 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 8 Jan 2021 18:45:37 +0530 Subject: [PATCH 006/176] Create syntax elements --- .../@types/primitiveElements.d.ts | 5 +- .../syntaxElements/@types/primitiveTypes.d.ts | 23 ++- .../@types/structureElements.d.ts | 40 ++++ .../syntaxElements/primitiveElements.test.ts | 22 +-- .../syntaxElements/primitiveElements.ts | 50 +++-- .../syntaxElements/structureElements.test.ts | 187 ++++++++++++++++++ .../syntaxElements/structureElements.ts | 178 +++++++++++++++++ 7 files changed, 460 insertions(+), 45 deletions(-) create mode 100644 src/.prototype/syntaxElements/@types/structureElements.d.ts create mode 100644 src/.prototype/syntaxElements/structureElements.test.ts create mode 100644 src/.prototype/syntaxElements/structureElements.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts index d42d1d9..1ca16d0 100644 --- a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts +++ b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts @@ -1,3 +1,6 @@ +import { TPrimitiveName } from './primitiveTypes'; + export interface IPrimitiveElement { - data: T; + value: T; + type: TPrimitiveName; } diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts index 01efae3..c23b6e9 100644 --- a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts +++ b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts @@ -1,13 +1,12 @@ -import { - TInt as Int, - TFloat as Float, - TChar as Char, - TString as String, - TBoolean as Boolean -} from '../primitiveElements'; +type TNInt = 'TInt'; +type TNFloat = 'TFloat'; +type TNChar = 'TChar'; +type TNString = 'TString'; +type TNBoolean = 'TBoolean'; +export type TPrimitiveName = TNInt | TNFloat | TNChar | TNString | TNBoolean; -export type TInt = Int; -export type TFloat = Float; -export type TChar = Char; -export type TString = String; -export type TBoolean = Boolean; +import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; + +// These should be imported from this module, hence exported again from here. +export { TInt, TFloat, TChar, TString, TBoolean }; +export type TPrimitive = TInt | TFloat | TChar | TString | TBoolean; diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts new file mode 100644 index 0000000..3045be7 --- /dev/null +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -0,0 +1,40 @@ +import { TPrimitive, TPrimitiveName } from './primitiveTypes'; + +/** An object whose class implements this will be tied to the corresponding UI element. */ +export interface ISyntaxElement { + identifier: string; +} + +export interface IDataElement { + data: TPrimitive; +} + +export interface IExpressionElement {} + +export interface IArgumentElement extends ISyntaxElement { + type: 'data' | 'expression'; + returnType: TPrimitiveName; + data: TPrimitive; +} + +export interface IArgumentDataElement extends ISyntaxElement, IDataElement {} + +export interface IArgumentExpressionElement extends ISyntaxElement, IExpressionElement {} + +export interface IInstructionArgs { + argNames: string[]; + setArg: Function; + getArg: Function; +} + +interface IInstructionElement extends ISyntaxElement { + args?: Object; + next: IInstructionElement | null; +} + +export interface IStatementElement extends IInstructionElement {} + +export interface IBlockElement extends IInstructionElement { + // childHeadFirst: IInstructionElement | null; + // childHeadSecond?: IInstructionElement | null; +} diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts index 8a230af..4f5aee8 100644 --- a/src/.prototype/syntaxElements/primitiveElements.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -2,56 +2,56 @@ import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; test('assign 5 to TInt to equal 5', () => { const typeObj = new TInt(5); - expect(typeObj.data).toBe(5); + expect(typeObj.value).toBe(5); }); test('assign Math.PI (3.1415..) to TInt to equal 3', () => { const typeObj = new TInt(Math.PI); - expect(typeObj.data).toBe(3); + expect(typeObj.value).toBe(3); }); test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { const typeObj = new TFloat(Math.E); - expect(typeObj.data).toBe(Math.E); + expect(typeObj.value).toBe(Math.E); }); test('assign "mystring" to TChar to equal "m"', () => { const typeObj = new TChar('mystring'); - expect(typeObj.data).toBe('m'); + expect(typeObj.value).toBe('m'); }); test('assign "" to TChar to equal ASCII 0 character', () => { const typeObj = new TChar(''); - expect(typeObj.data).toBe(String.fromCharCode(0)); + expect(typeObj.value).toBe(String.fromCharCode(0)); }); test('assign 65 to TChar to equal "A"', () => { const typeObj = new TChar(65); - expect(typeObj.data).toBe('A'); + expect(typeObj.value).toBe('A'); }); test('assign 500 to TChar to equal ASCII 255 character', () => { const typeObj = new TChar(500); - expect(typeObj.data).toBe(String.fromCharCode(255)); + expect(typeObj.value).toBe(String.fromCharCode(255)); }); test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { const typeObj = new TChar(65); typeObj.addOffset(-500); - expect(typeObj.data).toBe(String.fromCharCode(0)); + expect(typeObj.value).toBe(String.fromCharCode(0)); }); test('assign "mystring" to TString to equal "mystring"', () => { const typeObj = new TString('mystring'); - expect(typeObj.data).toBe('mystring'); + expect(typeObj.value).toBe('mystring'); }); test('assign true to TBoolean to equal true', () => { const typeObj = new TBoolean(true); - expect(typeObj.data).toBe(true); + expect(typeObj.value).toBe(true); }); test('assign false to TBoolean to equal false', () => { const typeObj = new TBoolean(false); - expect(typeObj.data).toBe(false); + expect(typeObj.value).toBe(false); }); diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index 7001954..9abf456 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -1,58 +1,66 @@ import { IPrimitiveElement } from './@types/primitiveElements'; +import { TPrimitiveName } from './@types/primitiveTypes'; class PrimitiveElement implements IPrimitiveElement { - private _data: T; + private _value: T; + private _type: TPrimitiveName; - constructor(data: T) { - this._data = data; + constructor(type: TPrimitiveName, data: T) { + this._type = type; + this._value = data; } - get data() { - return this._data; + get type() { + return this._type; } - update(data: T) { - this._data = data; + get value() { + return this._value; + } + + protected update(value: T) { + this._value = value; } } export class TInt extends PrimitiveElement { - constructor(data: number) { - super(Math.floor(data)); + constructor(value: number) { + super('TInt', Math.floor(value)); } } export class TFloat extends PrimitiveElement { - constructor(data: number) { - super(data); + constructor(value: number) { + super('TFloat', value); } } export class TChar extends PrimitiveElement { - constructor(data: string | number) { + constructor(value: string | number) { super( - typeof data === 'string' - ? data.length === 0 + 'TChar', + typeof value === 'string' + ? value.length === 0 ? String.fromCharCode(0) - : data.charAt(0) - : String.fromCharCode(Math.min(Math.max(data, 0), 255)) + : value.charAt(0) + : String.fromCharCode(Math.min(Math.max(value, 0), 255)) ); } addOffset(offset: number) { - const asciiValue = this.data.charCodeAt(0); + const asciiValue = this.value.charCodeAt(0); this.update(String.fromCharCode(Math.min(Math.max(asciiValue + offset, 0), 255))); } } export class TString extends PrimitiveElement { - constructor(data: string) { - super(data); + constructor(value: string) { + super('TString', value); } } export class TBoolean extends PrimitiveElement { - constructor(data: boolean) { - super(data); + constructor(value: boolean) { + super('TBoolean', value); } } diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts new file mode 100644 index 0000000..f04b015 --- /dev/null +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -0,0 +1,187 @@ +import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; +import { + ArgumentDataElement, + ArgumentExpressionElement, + StatementElement, + BlockElement +} from './structureElements'; + +/** Dummy class to extend abstract class ArgumentDataElement. */ +class CArgumentDataElement extends ArgumentDataElement {} +/** Dummy class to extend abstract class ArgumentExpressionElement. */ +class CArgumentExpressionElement extends ArgumentExpressionElement { + /** Dummy implementation of abstract member data. */ + get data() { + return new TInt(5); + } +} +/** Dummy class to extend abstract class StatementElement. */ +class CStatementElement extends StatementElement {} +/** Dummy class to extend abstract class BlockElement. */ +class CBlockElement extends BlockElement {} + +let argData_int: ArgumentDataElement; +let argData_float: ArgumentDataElement; +let argData_char: ArgumentDataElement; +let argData_string: ArgumentDataElement; +let argData_boolean: ArgumentDataElement; +let argExpr: ArgumentExpressionElement; + +describe('class ArgumentDataElement', () => { + test('intialize object with a TInt(5) and verify contents', () => { + argData_int = new CArgumentDataElement('myArgData', new TInt(5)); + expect(argData_int.identifier).toBe('myArgData'); + expect(argData_int.type).toBe('data'); + expect(argData_int.data.value).toBe(5); + }); + + test('intialize object with a TFloat(3.14) and verify contents', () => { + argData_float = new CArgumentDataElement('myArgData', new TFloat(3.14)); + expect(argData_float.identifier).toBe('myArgData'); + expect(argData_float.type).toBe('data'); + expect(argData_float.data.value).toBe(3.14); + }); + + test('intialize object with a TChar(65) and verify contents', () => { + argData_char = new CArgumentDataElement('myArgData', new TChar(65)); + expect(argData_char.identifier).toBe('myArgData'); + expect(argData_char.type).toBe('data'); + expect(argData_char.data.value).toBe('A'); + }); + + test('intialize object with a TString("str") and verify contents', () => { + argData_string = new CArgumentDataElement('myArgData', new TString('str')); + expect(argData_string.identifier).toBe('myArgData'); + expect(argData_string.type).toBe('data'); + expect(argData_string.data.value).toBe('str'); + }); + + test('intialize object with a TBoolean(false) and verify contents', () => { + argData_boolean = new CArgumentDataElement('myArgData', new TBoolean(false)); + expect(argData_boolean.identifier).toBe('myArgData'); + expect(argData_boolean.type).toBe('data'); + expect(argData_boolean.data.value).toBe(false); + }); +}); + +describe('class ArgumentExpressionElement', () => { + test('initialize object with valid arbitrary arguments and verify contents', () => { + argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); + expect(argExpr.identifier).toBe('myArgExpression'); + expect(argExpr.returnType).toBe('TInt'); + expect(argExpr.type).toBe('expression'); + }); +}); + +let stmntElem: StatementElement; + +describe('class StatementElement', () => { + test('initialize object with argument constraints and verify initial contents', () => { + stmntElem = new CStatementElement('myStatement', { + arg_1: ['TInt', 'TChar'], + arg_2: ['TString'] + }); + expect(stmntElem.next).toBe(null); + if (stmntElem.args !== null) { + expect(stmntElem.args.argNames).toEqual(['arg_1', 'arg_2']); + } else { + throw Error('object should not be null'); + } + }); + + test('assign valid argument for valid argument label and verify', () => { + if (stmntElem.args !== null) { + stmntElem.args.setArg('arg_1', argData_char); + expect(stmntElem.args.getArg('arg_1')).not.toBe(null); + const argElem = stmntElem.args.getArg('arg_1'); + if (argElem !== null) { + expect(argElem.data.value).toEqual('A'); + } else { + throw Error('object should not be null'); + } + } + }); + + test('reset previous argument label with null and verify', () => { + if (stmntElem.args !== null) { + stmntElem.args.setArg('arg_1', null); + expect(stmntElem.args.getArg('arg_1')).toBe(null); + } else { + throw Error('object should not be null'); + } + }); + + test('try to fetch argument for invalid argument label and expect error', () => { + expect(() => { + if (stmntElem.args !== null) { + stmntElem.args.getArg('arg_3'); + } else { + throw Error('object should not be null'); + } + }).toThrowError('Invalid argument: "arg_3" does not exist for instruction "myStatement"'); + }); + + test('try to assign argument for invalid argument label and expect error', () => { + expect(() => { + if (stmntElem.args !== null) { + stmntElem.args.setArg('arg_3', null); + } else { + throw Error('object should not be null'); + } + }).toThrowError('Invalid argument: "arg_3" does not exist for instruction "myStatement"'); + }); + + test('try to assign invalid return-type argument for valid argument label and expect error', () => { + expect(() => { + if (stmntElem.args !== null) { + stmntElem.args.setArg('arg_2', argData_int); + } else { + throw Error('object should not be null'); + } + }).toThrowError('Invalid argument: "TInt" is not a valid type for "arg_2"'); + }); +}); + +describe('class BlockElement', () => { + let blockElem: BlockElement; + + test('initialize object with argument constraints and verify initial contents', () => { + blockElem = new CBlockElement('myBlock', { arg_1: ['TBoolean'] }); + expect(blockElem.next).toBe(null); + if (blockElem.args !== null) { + expect(blockElem.args.argNames).toEqual(['arg_1']); + } else { + throw Error('object should not be null'); + } + }); + + // Rest are same as (above) StatementElement tests, therefore redundant to add. + + test('assign a non-null instruction to childHeadFirst and verify', () => { + blockElem.childHeadFirst = stmntElem; + if (blockElem.childHeadFirst !== null) { + expect(blockElem.childHeadFirst.identifier).toBe('myStatement'); + } else { + throw Error('object should not be null'); + } + }); + + test('assign null to childHeadFirst and verify', () => { + blockElem.childHeadFirst = null; + expect(blockElem.childHeadFirst).toBe(null); + }); + + test('assign a non-null instruction to childHeadSecond and verify', () => { + blockElem.childHeadSecond = stmntElem; + if (blockElem.childHeadSecond !== null) { + expect(blockElem.childHeadSecond.identifier).toBe('myStatement'); + } else { + throw Error('object should not be null'); + } + }); + + test('assign null to childHeadSecond and verify', () => { + blockElem.childHeadSecond = null; + expect(blockElem.childHeadSecond).toBe(null); + }); +}); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts new file mode 100644 index 0000000..7e99e33 --- /dev/null +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -0,0 +1,178 @@ +import { TPrimitiveName, TPrimitive } from './@types/primitiveTypes'; +import * as TS from './@types/structureElements'; + +// ---- Syntax Element ----------------------------------------------------------------------------- + +abstract class SyntaxElement implements TS.ISyntaxElement { + private _identifier: string; + + constructor(identifier: string) { + this._identifier = identifier; + } + + get identifier() { + return this._identifier; + } +} + +// ---- Argument Element --------------------------------------------------------------------------- + +abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { + private _type: 'data' | 'expression'; + private _returnType: TPrimitiveName; + + constructor(identifier: string, type: 'data' | 'expression', returnType: TPrimitiveName) { + super(identifier); + this._type = type; + this._returnType = returnType; + } + + get type() { + return this._type; + } + + get returnType() { + return this._returnType; + } + + abstract get data(): TPrimitive; +} + +/** @todo: This should be an abstract class. Currently, not abstract as sub-classes not created. */ +export abstract class ArgumentDataElement + extends ArgumentElement + implements TS.IArgumentDataElement { + private _dataElement: TPrimitive; + + constructor(identifier: string, dataElement: TPrimitive) { + super(identifier, 'data', dataElement.type); + this._dataElement = dataElement; + } + + get data() { + return this._dataElement; + } +} + +/** @todo: This should be an abstract class. Currently, not abstract as sub-classes not created. */ +export abstract class ArgumentExpressionElement + extends ArgumentElement + implements TS.IArgumentExpressionElement { + constructor(identifier: string, type: TPrimitiveName) { + super(identifier, 'expression', type); + } + + abstract get data(): TPrimitive; +} + +// ---- Instruction Element ------------------------------------------------------------------------ + +class InstructionArgs implements TS.IInstructionArgs { + private _instruction: string; + private _argMap: { [key: string]: ArgumentElement | null }; + private _argTypeMap: { [key: string]: TPrimitiveName[] }; + + constructor(instruction: string, constraints: { [key: string]: TPrimitiveName[] }) { + this._instruction = instruction; + this._argTypeMap = constraints; + this._argMap = {}; + Object.keys(this._argTypeMap).forEach((argName) => (this._argMap[argName] = null)); + } + + private _validateArgName(argName: string): void { + if (Object.keys(this._argTypeMap).indexOf(argName) === -1) { + throw Error( + `Invalid argument: "${argName}" does not exist for instruction "${this._instruction}"` + ); + } + } + + private _validateArg(argName: string, arg: ArgumentElement | null): void { + try { + this._validateArgName(argName); + if (arg !== null && this._argTypeMap[argName].indexOf(arg.returnType) === -1) { + throw Error( + `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` + ); + } + } catch (e) { + throw e; + } + } + + setArg(argName: string, argElement: ArgumentElement | null): void { + try { + this._validateArg(argName, argElement); + } catch (e) { + throw e; + } + this._argMap[argName] = argElement; + } + + getArg(argName: string): ArgumentElement | null { + try { + this._validateArgName(argName); + } catch (e) { + throw e; + } + return this._argMap[argName]; + } + + get argNames(): string[] { + return Object.keys(this._argTypeMap); + } +} + +abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { + private _next: InstructionElement | null; + private _args: InstructionArgs | null; + + constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(identifier); + this._next = null; + this._args = !constraints ? null : new InstructionArgs(identifier, constraints); + } + + set next(next: InstructionElement | null) { + this._next = next; + } + + get next() { + return this._next; + } + + get args() { + return this._args; + } +} + +export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { + constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(identifier, constraints); + } +} + +export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { + private _childHeadFirst: InstructionElement | null; + private _childHeadSecond: InstructionElement | null; + + constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(identifier, constraints); + } + + set childHeadFirst(childHeadFirst: InstructionElement | null) { + this._childHeadFirst = childHeadFirst; + } + + get childHeadFirst() { + return this._childHeadFirst; + } + + set childHeadSecond(childHeadSecond: InstructionElement | null) { + this._childHeadSecond = childHeadSecond; + } + + get childHeadSecond() { + return this._childHeadSecond; + } +} From b793de7945d4d7e73e03e2eea7a506725a1d08d4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 8 Jan 2021 19:16:31 +0530 Subject: [PATCH 007/176] Fix type errors --- .../syntaxElements/@types/structureElements.d.ts | 8 ++++---- src/.prototype/syntaxElements/structureElements.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index 3045be7..0fe0f0f 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -28,13 +28,13 @@ export interface IInstructionArgs { } interface IInstructionElement extends ISyntaxElement { - args?: Object; - next: IInstructionElement | null; + args: Object | null; + next: Object | null; } export interface IStatementElement extends IInstructionElement {} export interface IBlockElement extends IInstructionElement { - // childHeadFirst: IInstructionElement | null; - // childHeadSecond?: IInstructionElement | null; + childHeadFirst: IInstructionElement | null; + childHeadSecond?: IInstructionElement | null; } diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 7e99e33..5664b94 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -153,8 +153,8 @@ export abstract class StatementElement extends InstructionElement implements TS. } export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { - private _childHeadFirst: InstructionElement | null; - private _childHeadSecond: InstructionElement | null; + private _childHeadFirst: InstructionElement | null = null; + private _childHeadSecond: InstructionElement | null = null; constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(identifier, constraints); From e0419d1b08c97f16d6d24a8a665d96af22a99a96 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 8 Jan 2021 23:31:43 +0530 Subject: [PATCH 008/176] Update shape of BlockElement --- .../@types/structureElements.d.ts | 3 +- .../syntaxElements/structureElements.test.ts | 29 +++---------------- .../syntaxElements/structureElements.ts | 19 ++++-------- 3 files changed, 10 insertions(+), 41 deletions(-) diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index 0fe0f0f..f8ff2d9 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -35,6 +35,5 @@ interface IInstructionElement extends ISyntaxElement { export interface IStatementElement extends IInstructionElement {} export interface IBlockElement extends IInstructionElement { - childHeadFirst: IInstructionElement | null; - childHeadSecond?: IInstructionElement | null; + innerHeads: IInstructionElement[]; } diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index f04b015..d79d26c 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -157,31 +157,10 @@ describe('class BlockElement', () => { // Rest are same as (above) StatementElement tests, therefore redundant to add. - test('assign a non-null instruction to childHeadFirst and verify', () => { - blockElem.childHeadFirst = stmntElem; - if (blockElem.childHeadFirst !== null) { - expect(blockElem.childHeadFirst.identifier).toBe('myStatement'); - } else { - throw Error('object should not be null'); + test('assign an instruction to innerHeads and verify', () => { + blockElem.innerHeads = [stmntElem]; + if (blockElem.innerHeads.length !== 0) { + expect(blockElem.innerHeads[0].identifier).toBe('myStatement'); } }); - - test('assign null to childHeadFirst and verify', () => { - blockElem.childHeadFirst = null; - expect(blockElem.childHeadFirst).toBe(null); - }); - - test('assign a non-null instruction to childHeadSecond and verify', () => { - blockElem.childHeadSecond = stmntElem; - if (blockElem.childHeadSecond !== null) { - expect(blockElem.childHeadSecond.identifier).toBe('myStatement'); - } else { - throw Error('object should not be null'); - } - }); - - test('assign null to childHeadSecond and verify', () => { - blockElem.childHeadSecond = null; - expect(blockElem.childHeadSecond).toBe(null); - }); }); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 5664b94..4534703 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -153,26 +153,17 @@ export abstract class StatementElement extends InstructionElement implements TS. } export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { - private _childHeadFirst: InstructionElement | null = null; - private _childHeadSecond: InstructionElement | null = null; + private _innerHeads: InstructionElement[] = []; constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(identifier, constraints); } - set childHeadFirst(childHeadFirst: InstructionElement | null) { - this._childHeadFirst = childHeadFirst; + set innerHeads(innerHeads: InstructionElement[]) { + this._innerHeads = innerHeads; } - get childHeadFirst() { - return this._childHeadFirst; - } - - set childHeadSecond(childHeadSecond: InstructionElement | null) { - this._childHeadSecond = childHeadSecond; - } - - get childHeadSecond() { - return this._childHeadSecond; + get innerHeads() { + return this._innerHeads; } } From 6d1a2229a5f2620cc686fdf7ffb70d894ac3d720 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 8 Jan 2021 23:39:34 +0530 Subject: [PATCH 009/176] Create value elements --- .../syntaxElements/@types/primitiveTypes.d.ts | 3 -- .../syntaxElements/valueElements.test.ts | 22 +++++++++ .../syntaxElements/valueElements.ts | 49 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/.prototype/syntaxElements/valueElements.test.ts create mode 100644 src/.prototype/syntaxElements/valueElements.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts index c23b6e9..82d85ac 100644 --- a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts +++ b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts @@ -6,7 +6,4 @@ type TNBoolean = 'TBoolean'; export type TPrimitiveName = TNInt | TNFloat | TNChar | TNString | TNBoolean; import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; - -// These should be imported from this module, hence exported again from here. -export { TInt, TFloat, TChar, TString, TBoolean }; export type TPrimitive = TInt | TFloat | TChar | TString | TBoolean; diff --git a/src/.prototype/syntaxElements/valueElements.test.ts b/src/.prototype/syntaxElements/valueElements.test.ts new file mode 100644 index 0000000..259f62e --- /dev/null +++ b/src/.prototype/syntaxElements/valueElements.test.ts @@ -0,0 +1,22 @@ +import { ValueElements } from './valueElements'; + +describe('namespace ValueElements', () => { + test('instantiate a IntElement with 5 and expect 5 to be data', () => { + expect(new ValueElements.IntElement(5).data.value).toBe(5); + }); + test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { + expect(new ValueElements.FloatElement(2.71828).data.value).toBe(2.71828); + }); + test('instantiate a CharElement with 97 and expect "a" to be data', () => { + expect(new ValueElements.CharElement(97).data.value).toBe('a'); + }); + test('instantiate a StringElement with "string" and expect "string" to be data', () => { + expect(new ValueElements.StringElement('string').data.value).toBe('string'); + }); + test('instantiate a TrueElement and expect true to be data', () => { + expect(new ValueElements.TrueElement().data.value).toBe(true); + }); + test('instantiate a FalseElement and expect false to be data', () => { + expect(new ValueElements.FalseElement().data.value).toBe(false); + }); +}); diff --git a/src/.prototype/syntaxElements/valueElements.ts b/src/.prototype/syntaxElements/valueElements.ts new file mode 100644 index 0000000..51663ae --- /dev/null +++ b/src/.prototype/syntaxElements/valueElements.ts @@ -0,0 +1,49 @@ +import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; +import { ArgumentDataElement } from './structureElements'; + +/** + * @abstract All ValueElements are ArgumentDataElements. + */ +export namespace ValueElements { + /** ArgumentDataElement wrapper for primitive TInt type. */ + export class IntElement extends ArgumentDataElement { + constructor(value: number) { + super('int', new TInt(value)); + } + } + + /** ArgumentDataElement wrapper for primitive TFloat type. */ + export class FloatElement extends ArgumentDataElement { + constructor(value: number) { + super('float', new TFloat(value)); + } + } + + /** ArgumentDataElement wrapper for primitive TChar type. */ + export class CharElement extends ArgumentDataElement { + constructor(value: string | number) { + super('char', new TChar(value)); + } + } + + /** ArgumentDataElement wrapper for primitive TString type. */ + export class StringElement extends ArgumentDataElement { + constructor(value: string) { + super('string', new TString(value)); + } + } + + /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ + export class TrueElement extends ArgumentDataElement { + constructor() { + super('true', new TBoolean(true)); + } + } + + /** ArgumentDataElement wrapper for primitive TBoolean(false) type. */ + export class FalseElement extends ArgumentDataElement { + constructor() { + super('false', new TBoolean(false)); + } + } +} From 8f5ceddc21603b697ae519d469af3b2fc71a9faf Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 02:14:56 +0530 Subject: [PATCH 010/176] Create box elements --- package.json | 2 +- .../@types/structureElements.d.ts | 3 +- .../syntaxElements/dataElements.test.ts | 130 ++++++++++++++++++ src/.prototype/syntaxElements/dataElements.ts | 85 ++++++++++++ .../syntaxElements/structureElements.test.ts | 84 +++++------ .../syntaxElements/structureElements.ts | 87 +++++++----- .../syntaxElements/valueElements.test.ts | 16 +-- .../syntaxElements/valueElements.ts | 2 +- 8 files changed, 323 insertions(+), 86 deletions(-) create mode 100644 src/.prototype/syntaxElements/dataElements.test.ts create mode 100644 src/.prototype/syntaxElements/dataElements.ts diff --git a/package.json b/package.json index e398b3a..e3d5ae6 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "build": "webpack", "lint": "eslint src/**/*.ts", "start": "webpack serve --host 0.0.0.0 --open", - "test": "jest --passWithNoTests", + "test": "jest --passWithNoTests --watch", "watch": "webpack --watch" } } diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index f8ff2d9..31dbcd3 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -35,5 +35,6 @@ interface IInstructionElement extends ISyntaxElement { export interface IStatementElement extends IInstructionElement {} export interface IBlockElement extends IInstructionElement { - innerHeads: IInstructionElement[]; + childHeads: (IInstructionElement | null)[]; + childHead: IInstructionElement | null; } diff --git a/src/.prototype/syntaxElements/dataElements.test.ts b/src/.prototype/syntaxElements/dataElements.test.ts new file mode 100644 index 0000000..d5bb600 --- /dev/null +++ b/src/.prototype/syntaxElements/dataElements.test.ts @@ -0,0 +1,130 @@ +import { BoxElement } from './dataElements'; +import { StatementElement } from './structureElements'; +import { ValueElement } from './valueElements'; + +describe('namespace BoxElement', () => { + let boxElem: StatementElement; + + test('inititalize IntBoxElement with IntElement object and verify', () => { + boxElem = new BoxElement.IntBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.IntElement(5) + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(5); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize IntBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + boxElem = new BoxElement.IntBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.TrueElement() + }); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('inititalize FloatBoxElement with FloatElement object and verify', () => { + boxElem = new BoxElement.FloatBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.FloatElement(5.234) + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(5.234); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize FloatBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + boxElem = new BoxElement.FloatBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.TrueElement() + }); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('inititalize CharBoxElement with CharElement object and verify', () => { + boxElem = new BoxElement.CharBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.CharElement(97) + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('a'); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize CharBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + boxElem = new BoxElement.CharBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.TrueElement() + }); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('inititalize StringBoxElement with StringElement object and verify', () => { + boxElem = new BoxElement.StringBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.StringElement('string') + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('string'); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize StringBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + boxElem = new BoxElement.StringBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.TrueElement() + }); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('inititalize BooleanBoxElement with BooleanElement object and verify', () => { + boxElem = new BoxElement.BooleanBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.TrueElement() + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(true); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize BooleanBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + boxElem = new BoxElement.BooleanBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.IntElement(5) + }); + }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); + }); + + test('inititalize AnyBoxElement with StringElement object and verify', () => { + boxElem = new BoxElement.AnyBoxElement({ + identifier: new ValueElement.StringElement('myBox'), + value: new ValueElement.StringElement('any') + }); + const arg = boxElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('any'); + } else { + throw Error('Object should not be null'); + } + }); +}); diff --git a/src/.prototype/syntaxElements/dataElements.ts b/src/.prototype/syntaxElements/dataElements.ts new file mode 100644 index 0000000..05673b9 --- /dev/null +++ b/src/.prototype/syntaxElements/dataElements.ts @@ -0,0 +1,85 @@ +import { TPrimitiveName } from './@types/primitiveTypes'; +import { ArgumentElement, StatementElement } from './structureElements'; + +type argType = ArgumentElement | null; + +export namespace BoxElement { + class BoxElement extends StatementElement { + /** @throws Invalid argument */ + constructor( + identifier: string, + valueConstraints: TPrimitiveName[], + arg: { identifier: argType; value: argType } + ) { + super(identifier, { + identifier: ['TString'], + value: valueConstraints + }); + this.args.setArg('identifier', arg.identifier); + this.args.setArg('value', arg.value); + } + + /** @throws Invalid argument */ + set argIdentifier(identifier: argType) { + this.args.setArg('identifier', identifier); + } + + get argIdentifier() { + return this.args.getArg('identifier'); + } + + /** @throws Invalid argument */ + set argValue(value: argType) { + this.args.setArg('value', value); + } + + get argValue() { + return this.args.getArg('value'); + } + + /** @todo: Implement this after creating Synbol Table. */ + onVisit() {} + } + + export class IntBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-int', ['TInt'], arg); + } + } + + export class FloatBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-float', ['TFloat'], arg); + } + } + + export class CharBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-char', ['TChar'], arg); + } + } + + export class StringBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-string', ['TString'], arg); + } + } + + export class BooleanBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-boolean', ['TBoolean'], arg); + } + } + + export class AnyBoxElement extends BoxElement { + /** @throws Invalid argument */ + constructor(arg: { identifier: argType; value: argType }) { + super('box-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'], arg); + } + } +} diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index d79d26c..124f479 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -10,15 +10,19 @@ import { class CArgumentDataElement extends ArgumentDataElement {} /** Dummy class to extend abstract class ArgumentExpressionElement. */ class CArgumentExpressionElement extends ArgumentExpressionElement { - /** Dummy implementation of abstract member data. */ get data() { return new TInt(5); } } /** Dummy class to extend abstract class StatementElement. */ -class CStatementElement extends StatementElement {} +class CStatementElement extends StatementElement { + onVisit() {} +} /** Dummy class to extend abstract class BlockElement. */ -class CBlockElement extends BlockElement {} +class CBlockElement extends BlockElement { + onVisit() {} + onExit() {} +} let argData_int: ArgumentDataElement; let argData_float: ArgumentDataElement; @@ -76,69 +80,62 @@ describe('class ArgumentExpressionElement', () => { let stmntElem: StatementElement; describe('class StatementElement', () => { + test('initialize object with no argument constraints and expect error on fetching argument labels', () => { + stmntElem = new CStatementElement('yourStatement'); + expect(() => stmntElem.args.argNames).toThrowError( + `Invalid access: instruction "yourStatement" does not take arguments` + ); + }); + test('initialize object with argument constraints and verify initial contents', () => { stmntElem = new CStatementElement('myStatement', { arg_1: ['TInt', 'TChar'], arg_2: ['TString'] }); - expect(stmntElem.next).toBe(null); - if (stmntElem.args !== null) { + try { expect(stmntElem.args.argNames).toEqual(['arg_1', 'arg_2']); - } else { - throw Error('object should not be null'); + } catch (e) { + console.error(e); } }); test('assign valid argument for valid argument label and verify', () => { - if (stmntElem.args !== null) { + try { stmntElem.args.setArg('arg_1', argData_char); - expect(stmntElem.args.getArg('arg_1')).not.toBe(null); - const argElem = stmntElem.args.getArg('arg_1'); - if (argElem !== null) { - expect(argElem.data.value).toEqual('A'); - } else { - throw Error('object should not be null'); + const arg = stmntElem.args.getArg('arg_1'); + if (arg !== null) { + expect(arg.data.value).toEqual('A'); } + } catch (e) { + console.error(e); } }); test('reset previous argument label with null and verify', () => { - if (stmntElem.args !== null) { + try { stmntElem.args.setArg('arg_1', null); expect(stmntElem.args.getArg('arg_1')).toBe(null); - } else { - throw Error('object should not be null'); + } catch (e) { + console.error(e); } }); test('try to fetch argument for invalid argument label and expect error', () => { - expect(() => { - if (stmntElem.args !== null) { - stmntElem.args.getArg('arg_3'); - } else { - throw Error('object should not be null'); - } - }).toThrowError('Invalid argument: "arg_3" does not exist for instruction "myStatement"'); + expect(() => stmntElem.args.getArg('arg_3')).toThrowError( + 'Invalid argument: "arg_3" does not exist for instruction "myStatement"' + ); }); test('try to assign argument for invalid argument label and expect error', () => { - expect(() => { - if (stmntElem.args !== null) { - stmntElem.args.setArg('arg_3', null); - } else { - throw Error('object should not be null'); - } - }).toThrowError('Invalid argument: "arg_3" does not exist for instruction "myStatement"'); + expect(() => stmntElem.args.setArg('arg_3', null)).toThrowError( + 'Invalid argument: "arg_3" does not exist for instruction "myStatement"' + ); }); test('try to assign invalid return-type argument for valid argument label and expect error', () => { - expect(() => { - if (stmntElem.args !== null) { - stmntElem.args.setArg('arg_2', argData_int); - } else { - throw Error('object should not be null'); - } - }).toThrowError('Invalid argument: "TInt" is not a valid type for "arg_2"'); + expect(() => stmntElem.args.setArg('arg_2', argData_int)).toThrowError( + 'Invalid argument: "TInt" is not a valid type for "arg_2"' + ); }); }); @@ -158,9 +155,14 @@ describe('class BlockElement', () => { // Rest are same as (above) StatementElement tests, therefore redundant to add. test('assign an instruction to innerHeads and verify', () => { - blockElem.innerHeads = [stmntElem]; - if (blockElem.innerHeads.length !== 0) { - expect(blockElem.innerHeads[0].identifier).toBe('myStatement'); + blockElem.childHeads = [stmntElem]; + const head = blockElem.childHeads[0]; + if (head !== null) { + expect(head.identifier).toBe('myStatement'); } }); + + test('fetch childHead and expect to be null', () => { + expect(blockElem.childHead).toBe(null); + }); }); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 4534703..8e7c5bb 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -17,7 +17,7 @@ abstract class SyntaxElement implements TS.ISyntaxElement { // ---- Argument Element --------------------------------------------------------------------------- -abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { +export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { private _type: 'data' | 'expression'; private _returnType: TPrimitiveName; @@ -69,17 +69,26 @@ export abstract class ArgumentExpressionElement class InstructionArgs implements TS.IInstructionArgs { private _instruction: string; - private _argMap: { [key: string]: ArgumentElement | null }; - private _argTypeMap: { [key: string]: TPrimitiveName[] }; + private _argMap: { [key: string]: ArgumentElement | null } = {}; + private _argTypeMap: { [key: string]: TPrimitiveName[] } | null = null; - constructor(instruction: string, constraints: { [key: string]: TPrimitiveName[] }) { + constructor(instruction: string, constraints: { [key: string]: TPrimitiveName[] } | null) { this._instruction = instruction; - this._argTypeMap = constraints; - this._argMap = {}; - Object.keys(this._argTypeMap).forEach((argName) => (this._argMap[argName] = null)); + if (constraints === null) { + return this; + } else { + this._argTypeMap = constraints; + Object.keys(this._argTypeMap).forEach((argName) => (this._argMap[argName] = null)); + } } + /** @throws Invalid argument, Invalid access */ private _validateArgName(argName: string): void { + if (this._argTypeMap === null) { + throw Error( + `Invalid access: instruction "${this._instruction}" does not take arguments` + ); + } if (Object.keys(this._argTypeMap).indexOf(argName) === -1) { throw Error( `Invalid argument: "${argName}" does not exist for instruction "${this._instruction}"` @@ -87,50 +96,47 @@ class InstructionArgs implements TS.IInstructionArgs { } } + /** @throws Invalid argument, Invalid access */ private _validateArg(argName: string, arg: ArgumentElement | null): void { - try { - this._validateArgName(argName); - if (arg !== null && this._argTypeMap[argName].indexOf(arg.returnType) === -1) { - throw Error( - `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` - ); - } - } catch (e) { - throw e; + this._validateArgName(argName); + if (arg !== null && this._argTypeMap[argName].indexOf(arg.returnType) === -1) { + throw Error( + `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` + ); } } + /** @throws Invalid argument, Invalid access */ setArg(argName: string, argElement: ArgumentElement | null): void { - try { - this._validateArg(argName, argElement); - } catch (e) { - throw e; - } + this._validateArg(argName, argElement); this._argMap[argName] = argElement; } + /** @throws Invalid argument, Invalid access */ getArg(argName: string): ArgumentElement | null { - try { - this._validateArgName(argName); - } catch (e) { - throw e; - } + this._validateArgName(argName); return this._argMap[argName]; } + /** @throws Invalid argument, Invalid access */ get argNames(): string[] { + if (this._argTypeMap === null) { + throw Error( + `Invalid access: instruction "${this._instruction}" does not take arguments` + ); + } return Object.keys(this._argTypeMap); } } -abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { +export abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { private _next: InstructionElement | null; - private _args: InstructionArgs | null; + private _args: InstructionArgs; constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(identifier); this._next = null; - this._args = !constraints ? null : new InstructionArgs(identifier, constraints); + this._args = new InstructionArgs(identifier, !constraints ? null : constraints); } set next(next: InstructionElement | null) { @@ -144,6 +150,8 @@ abstract class InstructionElement extends SyntaxElement implements TS.IInstructi get args() { return this._args; } + + abstract onVisit(): void; } export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { @@ -153,17 +161,28 @@ export abstract class StatementElement extends InstructionElement implements TS. } export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { - private _innerHeads: InstructionElement[] = []; + private _childHeads: (InstructionElement | null)[] = [null]; + private _childHead: InstructionElement | null = null; constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(identifier, constraints); } - set innerHeads(innerHeads: InstructionElement[]) { - this._innerHeads = innerHeads; + set childHeads(innerHeads: (InstructionElement | null)[]) { + this._childHeads = innerHeads; + } + + get childHeads() { + return this._childHeads; + } + + set childHead(childHead: InstructionElement | null) { + this._childHead = childHead; } - get innerHeads() { - return this._innerHeads; + get childHead() { + return this._childHead; } + + abstract onExit(): void; } diff --git a/src/.prototype/syntaxElements/valueElements.test.ts b/src/.prototype/syntaxElements/valueElements.test.ts index 259f62e..aebcfba 100644 --- a/src/.prototype/syntaxElements/valueElements.test.ts +++ b/src/.prototype/syntaxElements/valueElements.test.ts @@ -1,22 +1,22 @@ -import { ValueElements } from './valueElements'; +import { ValueElement } from './ValueElements'; -describe('namespace ValueElements', () => { +describe('namespace ValueElement', () => { test('instantiate a IntElement with 5 and expect 5 to be data', () => { - expect(new ValueElements.IntElement(5).data.value).toBe(5); + expect(new ValueElement.IntElement(5).data.value).toBe(5); }); test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { - expect(new ValueElements.FloatElement(2.71828).data.value).toBe(2.71828); + expect(new ValueElement.FloatElement(2.71828).data.value).toBe(2.71828); }); test('instantiate a CharElement with 97 and expect "a" to be data', () => { - expect(new ValueElements.CharElement(97).data.value).toBe('a'); + expect(new ValueElement.CharElement(97).data.value).toBe('a'); }); test('instantiate a StringElement with "string" and expect "string" to be data', () => { - expect(new ValueElements.StringElement('string').data.value).toBe('string'); + expect(new ValueElement.StringElement('string').data.value).toBe('string'); }); test('instantiate a TrueElement and expect true to be data', () => { - expect(new ValueElements.TrueElement().data.value).toBe(true); + expect(new ValueElement.TrueElement().data.value).toBe(true); }); test('instantiate a FalseElement and expect false to be data', () => { - expect(new ValueElements.FalseElement().data.value).toBe(false); + expect(new ValueElement.FalseElement().data.value).toBe(false); }); }); diff --git a/src/.prototype/syntaxElements/valueElements.ts b/src/.prototype/syntaxElements/valueElements.ts index 51663ae..0ab3e3c 100644 --- a/src/.prototype/syntaxElements/valueElements.ts +++ b/src/.prototype/syntaxElements/valueElements.ts @@ -4,7 +4,7 @@ import { ArgumentDataElement } from './structureElements'; /** * @abstract All ValueElements are ArgumentDataElements. */ -export namespace ValueElements { +export namespace ValueElement { /** ArgumentDataElement wrapper for primitive TInt type. */ export class IntElement extends ArgumentDataElement { constructor(value: number) { From d6853a4b0597527c4b21311d5258c6a5c0c42e59 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 21:48:43 +0530 Subject: [PATCH 011/176] Add type-casting to primitives --- .../@types/primitiveElements.d.ts | 6 - .../syntaxElements/primitiveElements.test.ts | 206 ++++++++++++++---- .../syntaxElements/primitiveElements.ts | 115 ++++++++-- 3 files changed, 257 insertions(+), 70 deletions(-) delete mode 100644 src/.prototype/syntaxElements/@types/primitiveElements.d.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts deleted file mode 100644 index 1ca16d0..0000000 --- a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { TPrimitiveName } from './primitiveTypes'; - -export interface IPrimitiveElement { - value: T; - type: TPrimitiveName; -} diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts index 4f5aee8..6442193 100644 --- a/src/.prototype/syntaxElements/primitiveElements.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -1,57 +1,177 @@ import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; -test('assign 5 to TInt to equal 5', () => { - const typeObj = new TInt(5); - expect(typeObj.value).toBe(5); -}); +describe('initialization and value verification', () => { + test('assign 5 to TInt to equal 5', () => { + const typeObj = new TInt(5); + expect(typeObj.value).toBe(5); + }); -test('assign Math.PI (3.1415..) to TInt to equal 3', () => { - const typeObj = new TInt(Math.PI); - expect(typeObj.value).toBe(3); -}); + test('assign Math.PI (3.1415..) to TInt to equal 3', () => { + const typeObj = new TInt(Math.PI); + expect(typeObj.value).toBe(3); + }); -test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { - const typeObj = new TFloat(Math.E); - expect(typeObj.value).toBe(Math.E); -}); + test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { + const typeObj = new TFloat(Math.E); + expect(typeObj.value).toBe(Math.E); + }); -test('assign "mystring" to TChar to equal "m"', () => { - const typeObj = new TChar('mystring'); - expect(typeObj.value).toBe('m'); -}); + test('assign "mystring" to TChar to equal "m"', () => { + const typeObj = new TChar('mystring'); + expect(typeObj.value).toBe('m'); + }); -test('assign "" to TChar to equal ASCII 0 character', () => { - const typeObj = new TChar(''); - expect(typeObj.value).toBe(String.fromCharCode(0)); -}); + test('assign "" to TChar to equal ASCII 0 character', () => { + const typeObj = new TChar(''); + expect(typeObj.value).toBe(String.fromCharCode(0)); + }); -test('assign 65 to TChar to equal "A"', () => { - const typeObj = new TChar(65); - expect(typeObj.value).toBe('A'); -}); + test('assign 65 to TChar to equal "A"', () => { + const typeObj = new TChar(65); + expect(typeObj.value).toBe('A'); + }); -test('assign 500 to TChar to equal ASCII 255 character', () => { - const typeObj = new TChar(500); - expect(typeObj.value).toBe(String.fromCharCode(255)); -}); + test('assign 500 to TChar to equal ASCII 255 character', () => { + const typeObj = new TChar(500); + expect(typeObj.value).toBe(String.fromCharCode(255)); + }); -test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { - const typeObj = new TChar(65); - typeObj.addOffset(-500); - expect(typeObj.value).toBe(String.fromCharCode(0)); -}); + test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { + const typeObj = new TChar(65); + typeObj.addOffset(-500); + expect(typeObj.value).toBe(String.fromCharCode(0)); + }); -test('assign "mystring" to TString to equal "mystring"', () => { - const typeObj = new TString('mystring'); - expect(typeObj.value).toBe('mystring'); -}); + test('assign "mystring" to TString to equal "mystring"', () => { + const typeObj = new TString('mystring'); + expect(typeObj.value).toBe('mystring'); + }); + + test('assign true to TBoolean to equal true', () => { + const typeObj = new TBoolean(true); + expect(typeObj.value).toBe(true); + }); -test('assign true to TBoolean to equal true', () => { - const typeObj = new TBoolean(true); - expect(typeObj.value).toBe(true); + test('assign false to TBoolean to equal false', () => { + const typeObj = new TBoolean(false); + expect(typeObj.value).toBe(false); + }); }); -test('assign false to TBoolean to equal false', () => { - const typeObj = new TBoolean(false); - expect(typeObj.value).toBe(false); +describe('type conversions', () => { + const intType = new TInt(65); + const floatType = new TFloat(3.1415); + const charType = new TChar(97); + const stringType = new TString('2.71828'); + + describe('conversion to TInt', () => { + test('convert TInt type to TInt and verify', () => { + const newType = TInt.TInt(intType); + expect(newType instanceof TInt).toBe(true); + expect(newType.type).toBe('TInt'); + expect(newType.value).toBe(65); + }); + + test('convert TFloat type to TInt and verify', () => { + const newType = TInt.TInt(floatType); + expect(newType instanceof TInt).toBe(true); + expect(newType.type).toBe('TInt'); + expect(newType.value).toBe(3); + }); + + test('convert TChar type to TInt and verify', () => { + const newType = TInt.TInt(charType); + expect(newType instanceof TInt).toBe(true); + expect(newType.type).toBe('TInt'); + expect(newType.value).toBe(97); + }); + + test('convert number-convertible TString type to TInt and verify', () => { + const newType = TInt.TInt(stringType); + expect(newType instanceof TInt).toBe(true); + expect(newType.type).toBe('TInt'); + expect(newType.value).toBe(2); + }); + + test('convert number-inconvertible TString type to TInt and expect error', () => { + expect(() => TInt.TInt(new TString('string'))).toThrowError( + 'Invalid format: TString object does not represent a number' + ); + }); + }); + + describe('conversion to TFloat', () => { + test('convert TFloat type to TFloat and verify', () => { + const newType = TFloat.TFloat(floatType); + expect(newType instanceof TFloat).toBe(true); + expect(newType.type).toBe('TFloat'); + expect(newType.value).toBe(3.1415); + }); + + test('convert TInt type to TFloat and verify', () => { + const newType = TFloat.TFloat(intType); + expect(newType instanceof TFloat).toBe(true); + expect(newType.type).toBe('TFloat'); + expect(newType.value).toBe(65); + }); + + test('convert number-convertible TString type to TFloat and verify', () => { + const newType = TFloat.TFloat(stringType); + expect(newType instanceof TFloat).toBe(true); + expect(newType.type).toBe('TFloat'); + expect(newType.value).toBe(2.71828); + }); + + test('convert number-inconvertible TString type to TFloat and expect error', () => { + expect(() => TFloat.TFloat(new TString('string'))).toThrowError( + 'Invalid format: TString object does not represent a number' + ); + }); + }); + + describe('conversion to TChar', () => { + test('convert TChar type to TChar and verify', () => { + const newType = TChar.TChar(charType); + expect(newType instanceof TChar).toBe(true); + expect(newType.type).toBe('TChar'); + expect(newType.value).toBe('a'); + }); + + test('convert TInt type to TChar and verify', () => { + const newType = TChar.TChar(intType); + expect(newType instanceof TChar).toBe(true); + expect(newType.type).toBe('TChar'); + expect(newType.value).toBe('A'); + }); + }); + + describe('conversion to TString', () => { + test('convert TString type to TString and verify', () => { + const newType = TString.TString(stringType); + expect(newType instanceof TString).toBe(true); + expect(newType.type).toBe('TString'); + expect(newType.value).toBe('2.71828'); + }); + + test('convert TInt type to TString and verify', () => { + const newType = TString.TString(intType); + expect(newType instanceof TString).toBe(true); + expect(newType.type).toBe('TString'); + expect(newType.value).toBe('65'); + }); + + test('convert TFloat type to TString and verify', () => { + const newType = TString.TString(floatType); + expect(newType instanceof TString).toBe(true); + expect(newType.type).toBe('TString'); + expect(newType.value).toBe('3.1415'); + }); + + test('convert TChar type to TString and verify', () => { + const newType = TString.TString(charType); + expect(newType instanceof TString).toBe(true); + expect(newType.type).toBe('TString'); + expect(newType.value).toBe('a'); + }); + }); }); diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index 9abf456..ae25cc0 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -1,59 +1,132 @@ -import { IPrimitiveElement } from './@types/primitiveElements'; import { TPrimitiveName } from './@types/primitiveTypes'; -class PrimitiveElement implements IPrimitiveElement { - private _value: T; +interface IPrimitiveElement { + type: TPrimitiveName; + value: T; +} + +abstract class PrimitiveElement implements IPrimitiveElement { + protected _value: T; private _type: TPrimitiveName; - constructor(type: TPrimitiveName, data: T) { + constructor(type: TPrimitiveName, value: T) { this._type = type; - this._value = data; + this._value = value; } get type() { return this._type; } - get value() { - return this._value; + set value(value: T) { + this._value = value; } - protected update(value: T) { - this._value = value; + get value() { + return this._value; } } export class TInt extends PrimitiveElement { + static toInt(value: number) { + return Math.floor(value); + } + + /** @throws Invalid format */ + static TInt(primitive: TInt | TFloat | TChar | TString) { + if (primitive instanceof TFloat) { + return new TInt(primitive.value); + } else if (primitive instanceof TChar) { + return new TInt((primitive.value as string).charCodeAt(0)); + } else if (primitive instanceof TString) { + const num = Number(primitive.value); + if (isNaN(num)) { + throw Error(`Invalid format: TString object does not represent a number`); + } + return new TInt(num); + } else { + return primitive; + } + } + constructor(value: number) { - super('TInt', Math.floor(value)); + super('TInt', value); + this.value = value; + } + + set value(value: number) { + this._value = TInt.toInt(value); + } + + get value() { + return this._value; } } export class TFloat extends PrimitiveElement { + /** @throws Invalid format */ + static TFloat(primitive: TFloat | TInt | TString) { + if (primitive instanceof TInt) { + return new TFloat(primitive.value); + } else if (primitive instanceof TString) { + const num = Number(primitive.value); + if (isNaN(num)) { + throw Error(`Invalid format: TString object does not represent a number`); + } + return new TFloat(num); + } else { + return primitive; + } + } + constructor(value: number) { super('TFloat', value); } } -export class TChar extends PrimitiveElement { +export class TChar extends PrimitiveElement { + static toChar(value: number) { + return String.fromCharCode(Math.min(Math.max(TInt.toInt(value), 0), 255)); + } + + static TChar(primitive: TChar | TInt) { + if (primitive instanceof TInt) { + return new TChar(TChar.toChar(primitive.value)); + } else { + return primitive; + } + } + constructor(value: string | number) { - super( - 'TChar', - typeof value === 'string' - ? value.length === 0 - ? String.fromCharCode(0) - : value.charAt(0) - : String.fromCharCode(Math.min(Math.max(value, 0), 255)) - ); + super('TChar', value); + this.value = value; + } + + set value(value: string | number) { + if (typeof value === 'number') { + value = TChar.toChar(value); + } + this._value = value.length === 0 ? String.fromCharCode(0) : value.charAt(0); + } + + get value() { + return this._value; } addOffset(offset: number) { - const asciiValue = this.value.charCodeAt(0); - this.update(String.fromCharCode(Math.min(Math.max(asciiValue + offset, 0), 255))); + this._value = TChar.toChar(this._value.toString().charCodeAt(0) + TInt.toInt(offset)); } } export class TString extends PrimitiveElement { + static TString(primitive: TString | TInt | TFloat | TChar) { + if (primitive instanceof TString) { + return primitive; + } else { + return new TString(primitive.value.toString()); + } + } + constructor(value: string) { super('TString', value); } From ae8e8e2a8107ccf637ff216f96a7dc8c693a0941 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 21:57:19 +0530 Subject: [PATCH 012/176] Reorganize directories --- .../syntaxElements/{ => programElements}/dataElements.test.ts | 2 +- .../syntaxElements/{ => programElements}/dataElements.ts | 4 ++-- .../{ => programElements}/valueElements.test.ts | 0 .../syntaxElements/{ => programElements}/valueElements.ts | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) rename src/.prototype/syntaxElements/{ => programElements}/dataElements.test.ts (98%) rename src/.prototype/syntaxElements/{ => programElements}/dataElements.ts (95%) rename src/.prototype/syntaxElements/{ => programElements}/valueElements.test.ts (100%) rename src/.prototype/syntaxElements/{ => programElements}/valueElements.ts (91%) diff --git a/src/.prototype/syntaxElements/dataElements.test.ts b/src/.prototype/syntaxElements/programElements/dataElements.test.ts similarity index 98% rename from src/.prototype/syntaxElements/dataElements.test.ts rename to src/.prototype/syntaxElements/programElements/dataElements.test.ts index d5bb600..c97953b 100644 --- a/src/.prototype/syntaxElements/dataElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.test.ts @@ -1,5 +1,5 @@ +import { StatementElement } from '../structureElements'; import { BoxElement } from './dataElements'; -import { StatementElement } from './structureElements'; import { ValueElement } from './valueElements'; describe('namespace BoxElement', () => { diff --git a/src/.prototype/syntaxElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts similarity index 95% rename from src/.prototype/syntaxElements/dataElements.ts rename to src/.prototype/syntaxElements/programElements/dataElements.ts index 05673b9..fbd2a01 100644 --- a/src/.prototype/syntaxElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -1,5 +1,5 @@ -import { TPrimitiveName } from './@types/primitiveTypes'; -import { ArgumentElement, StatementElement } from './structureElements'; +import { TPrimitiveName } from '../@types/primitiveTypes'; +import { ArgumentElement, StatementElement } from '../structureElements'; type argType = ArgumentElement | null; diff --git a/src/.prototype/syntaxElements/valueElements.test.ts b/src/.prototype/syntaxElements/programElements/valueElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/valueElements.test.ts rename to src/.prototype/syntaxElements/programElements/valueElements.test.ts diff --git a/src/.prototype/syntaxElements/valueElements.ts b/src/.prototype/syntaxElements/programElements/valueElements.ts similarity index 91% rename from src/.prototype/syntaxElements/valueElements.ts rename to src/.prototype/syntaxElements/programElements/valueElements.ts index 0ab3e3c..9435d47 100644 --- a/src/.prototype/syntaxElements/valueElements.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.ts @@ -1,5 +1,5 @@ -import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; -import { ArgumentDataElement } from './structureElements'; +import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; +import { ArgumentDataElement } from '../structureElements'; /** * @abstract All ValueElements are ArgumentDataElements. From c0b40e5f02fbb7a106cb772a1842900e2880b227 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 22:21:28 +0530 Subject: [PATCH 013/176] Repair shape of structure elements --- .../@types/structureElements.d.ts | 10 ++++---- .../syntaxElements/structureElements.ts | 23 +++++++++++++++---- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index 31dbcd3..a1b9507 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -19,17 +19,19 @@ export interface IArgumentElement extends ISyntaxElement { export interface IArgumentDataElement extends ISyntaxElement, IDataElement {} -export interface IArgumentExpressionElement extends ISyntaxElement, IExpressionElement {} +export interface IArgumentExpressionElement extends ISyntaxElement, IExpressionElement { + args: Object; +} -export interface IInstructionArgs { +export interface IArgumentMap { argNames: string[]; setArg: Function; getArg: Function; } interface IInstructionElement extends ISyntaxElement { - args: Object | null; - next: Object | null; + args: IArgumentMap; + next: IInstructionElement | null; } export interface IStatementElement extends IInstructionElement {} diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 8e7c5bb..97e9702 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -58,16 +58,27 @@ export abstract class ArgumentDataElement export abstract class ArgumentExpressionElement extends ArgumentElement implements TS.IArgumentExpressionElement { - constructor(identifier: string, type: TPrimitiveName) { + private _args: ArgumentMap; + + constructor( + identifier: string, + type: TPrimitiveName, + constraints?: { [key: string]: TPrimitiveName[] } + ) { super(identifier, 'expression', type); + this._args = new ArgumentMap(identifier, !constraints ? null : constraints); + } + + get args() { + return this._args; } abstract get data(): TPrimitive; } -// ---- Instruction Element ------------------------------------------------------------------------ +// ---- Argument Map ------------------------------------------------------------------------------- -class InstructionArgs implements TS.IInstructionArgs { +class ArgumentMap implements TS.IArgumentMap { private _instruction: string; private _argMap: { [key: string]: ArgumentElement | null } = {}; private _argTypeMap: { [key: string]: TPrimitiveName[] } | null = null; @@ -129,14 +140,16 @@ class InstructionArgs implements TS.IInstructionArgs { } } +// ---- Instruction Element ------------------------------------------------------------------------ + export abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { private _next: InstructionElement | null; - private _args: InstructionArgs; + private _args: ArgumentMap; constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(identifier); this._next = null; - this._args = new InstructionArgs(identifier, !constraints ? null : constraints); + this._args = new ArgumentMap(identifier, !constraints ? null : constraints); } set next(next: InstructionElement | null) { From b635c6fe4e8cc42f41fecbc7f427db8d821851fa Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 22:47:08 +0530 Subject: [PATCH 014/176] Add some operations on primitive types --- .../syntaxElements/primitiveElements.test.ts | 65 +++++++++++++++++-- .../syntaxElements/primitiveElements.ts | 40 ++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts index 6442193..d5f9c9c 100644 --- a/src/.prototype/syntaxElements/primitiveElements.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -36,12 +36,6 @@ describe('initialization and value verification', () => { expect(typeObj.value).toBe(String.fromCharCode(255)); }); - test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { - const typeObj = new TChar(65); - typeObj.addOffset(-500); - expect(typeObj.value).toBe(String.fromCharCode(0)); - }); - test('assign "mystring" to TString to equal "mystring"', () => { const typeObj = new TString('mystring'); expect(typeObj.value).toBe('mystring'); @@ -175,3 +169,62 @@ describe('type conversions', () => { }); }); }); + +describe('operations on type elements', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + + describe('class TInt', () => { + test('add TInt(15) and TInt(4) and expect new element value to be 19', () => { + expect(TInt.add(operand_1, operand_2).value).toBe(19); + }); + + test('subtract TInt(15) and TInt(4) and expect new element value to be 11', () => { + expect(TInt.subtract(operand_1, operand_2).value).toBe(11); + }); + + test('multiply TInt(15) and TInt(4) and expect new element value to be 60', () => { + expect(TInt.multiply(operand_1, operand_2).value).toBe(60); + }); + + test('divide TInt(15) and TInt(4) and expect new element value to be 3', () => { + expect(TInt.divide(operand_1, operand_2).value).toBe(3); + }); + + test('mod TInt(15) and TInt(4) and expect new element value to be 3', () => { + expect(TInt.mod(operand_1, operand_2).value).toBe(3); + }); + }); + + const operand_3 = new TFloat(15.5); + + describe('class TFloat', () => { + test('add TFloat(15.5) and TInt(4) and expect new element value to be 19.5', () => { + expect(TFloat.add(operand_3, operand_2).value).toBe(19.5); + }); + + test('subtract TFloat(15.5) and TInt(4) and expect new element value to be 11.5', () => { + expect(TFloat.subtract(operand_3, operand_2).value).toBe(11.5); + }); + + test('multiply TFloat(15.5) and TInt(4) and expect new element value to be 62', () => { + expect(TFloat.multiply(operand_3, operand_2).value).toBe(62); + }); + + test('divide TFloat(15.5) and TInt(4) and expect new element value to be 3.875', () => { + expect(TFloat.divide(operand_3, operand_2).value).toBe(3.875); + }); + + test('mod TFloat(15.5) and TInt(4) and expect new element value to be 3.5', () => { + expect(TFloat.mod(operand_3, operand_2).value).toBe(3.5); + }); + }); + + describe('class TChar', () => { + test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { + const typeObj = new TChar(65); + typeObj.addOffset(-500); + expect(typeObj.value).toBe(String.fromCharCode(0)); + }); + }); +}); diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index ae25cc0..8337de6 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -61,6 +61,26 @@ export class TInt extends PrimitiveElement { get value() { return this._value; } + + static add(operand_1: TInt, operand_2: TInt) { + return new TInt(operand_1.value + operand_2.value); + } + + static subtract(operand_1: TInt, operand_2: TInt) { + return new TInt(operand_1.value - operand_2.value); + } + + static multiply(operand_1: TInt, operand_2: TInt) { + return new TInt(operand_1.value * operand_2.value); + } + + static divide(operand_1: TInt, operand_2: TInt) { + return new TInt(operand_1.value / operand_2.value); + } + + static mod(operand_1: TInt, operand_2: TInt) { + return new TInt(operand_1.value % operand_2.value); + } } export class TFloat extends PrimitiveElement { @@ -82,6 +102,26 @@ export class TFloat extends PrimitiveElement { constructor(value: number) { super('TFloat', value); } + + static add(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TFloat(operand_1.value + operand_2.value); + } + + static subtract(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TFloat(operand_1.value - operand_2.value); + } + + static multiply(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TFloat(operand_1.value * operand_2.value); + } + + static divide(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TFloat(operand_1.value / operand_2.value); + } + + static mod(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TFloat(operand_1.value % operand_2.value); + } } export class TChar extends PrimitiveElement { From 0a1b7bfd28214931d925e2220eec078618b882a2 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 22:50:45 +0530 Subject: [PATCH 015/176] Remove watch flag for jest --- .github/workflows/CI.yml | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 6b9f31d..8993e9f 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -57,4 +57,5 @@ jobs: # - run: npm run build --if-present - run: npm test --if-present env: + CI: true DEFAULT_BRANCH: develop diff --git a/package.json b/package.json index e3d5ae6..e398b3a 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "build": "webpack", "lint": "eslint src/**/*.ts", "start": "webpack serve --host 0.0.0.0 --open", - "test": "jest --passWithNoTests --watch", + "test": "jest --passWithNoTests", "watch": "webpack --watch" } } From 067bb50b4aab263390e53672b81cc8eb5cd00a6c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 22:57:02 +0530 Subject: [PATCH 016/176] Fix typo --- .../syntaxElements/programElements/valueElements.test.ts | 2 +- src/.prototype/syntaxElements/structureElements.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/valueElements.test.ts b/src/.prototype/syntaxElements/programElements/valueElements.test.ts index aebcfba..d2ea6b8 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.test.ts @@ -1,4 +1,4 @@ -import { ValueElement } from './ValueElements'; +import { ValueElement } from './valueElements'; describe('namespace ValueElement', () => { test('instantiate a IntElement with 5 and expect 5 to be data', () => { diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 97e9702..086acfc 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -110,7 +110,11 @@ class ArgumentMap implements TS.IArgumentMap { /** @throws Invalid argument, Invalid access */ private _validateArg(argName: string, arg: ArgumentElement | null): void { this._validateArgName(argName); - if (arg !== null && this._argTypeMap[argName].indexOf(arg.returnType) === -1) { + if ( + arg !== null && + this._argTypeMap !== null && + this._argTypeMap[argName].indexOf(arg.returnType) === -1 + ) { throw Error( `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` ); From 7fcfd908740b368fba21f0365cd3778660a978b6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 23:06:11 +0530 Subject: [PATCH 017/176] Rename element name variable from identifier to elementName --- .../@types/structureElements.d.ts | 2 +- .../syntaxElements/structureElements.test.ts | 14 +++---- .../syntaxElements/structureElements.ts | 38 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index a1b9507..5adbafc 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -2,7 +2,7 @@ import { TPrimitive, TPrimitiveName } from './primitiveTypes'; /** An object whose class implements this will be tied to the corresponding UI element. */ export interface ISyntaxElement { - identifier: string; + elementName: string; } export interface IDataElement { diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index 124f479..5788d89 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -34,35 +34,35 @@ let argExpr: ArgumentExpressionElement; describe('class ArgumentDataElement', () => { test('intialize object with a TInt(5) and verify contents', () => { argData_int = new CArgumentDataElement('myArgData', new TInt(5)); - expect(argData_int.identifier).toBe('myArgData'); + expect(argData_int.elementName).toBe('myArgData'); expect(argData_int.type).toBe('data'); expect(argData_int.data.value).toBe(5); }); test('intialize object with a TFloat(3.14) and verify contents', () => { argData_float = new CArgumentDataElement('myArgData', new TFloat(3.14)); - expect(argData_float.identifier).toBe('myArgData'); + expect(argData_float.elementName).toBe('myArgData'); expect(argData_float.type).toBe('data'); expect(argData_float.data.value).toBe(3.14); }); test('intialize object with a TChar(65) and verify contents', () => { argData_char = new CArgumentDataElement('myArgData', new TChar(65)); - expect(argData_char.identifier).toBe('myArgData'); + expect(argData_char.elementName).toBe('myArgData'); expect(argData_char.type).toBe('data'); expect(argData_char.data.value).toBe('A'); }); test('intialize object with a TString("str") and verify contents', () => { argData_string = new CArgumentDataElement('myArgData', new TString('str')); - expect(argData_string.identifier).toBe('myArgData'); + expect(argData_string.elementName).toBe('myArgData'); expect(argData_string.type).toBe('data'); expect(argData_string.data.value).toBe('str'); }); test('intialize object with a TBoolean(false) and verify contents', () => { argData_boolean = new CArgumentDataElement('myArgData', new TBoolean(false)); - expect(argData_boolean.identifier).toBe('myArgData'); + expect(argData_boolean.elementName).toBe('myArgData'); expect(argData_boolean.type).toBe('data'); expect(argData_boolean.data.value).toBe(false); }); @@ -71,7 +71,7 @@ describe('class ArgumentDataElement', () => { describe('class ArgumentExpressionElement', () => { test('initialize object with valid arbitrary arguments and verify contents', () => { argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); - expect(argExpr.identifier).toBe('myArgExpression'); + expect(argExpr.elementName).toBe('myArgExpression'); expect(argExpr.returnType).toBe('TInt'); expect(argExpr.type).toBe('expression'); }); @@ -158,7 +158,7 @@ describe('class BlockElement', () => { blockElem.childHeads = [stmntElem]; const head = blockElem.childHeads[0]; if (head !== null) { - expect(head.identifier).toBe('myStatement'); + expect(head.elementName).toBe('myStatement'); } }); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 086acfc..38d723e 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -4,14 +4,14 @@ import * as TS from './@types/structureElements'; // ---- Syntax Element ----------------------------------------------------------------------------- abstract class SyntaxElement implements TS.ISyntaxElement { - private _identifier: string; + private _elementName: string; - constructor(identifier: string) { - this._identifier = identifier; + constructor(elementName: string) { + this._elementName = elementName; } - get identifier() { - return this._identifier; + get elementName() { + return this._elementName; } } @@ -21,8 +21,8 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum private _type: 'data' | 'expression'; private _returnType: TPrimitiveName; - constructor(identifier: string, type: 'data' | 'expression', returnType: TPrimitiveName) { - super(identifier); + constructor(elementName: string, type: 'data' | 'expression', returnType: TPrimitiveName) { + super(elementName); this._type = type; this._returnType = returnType; } @@ -44,8 +44,8 @@ export abstract class ArgumentDataElement implements TS.IArgumentDataElement { private _dataElement: TPrimitive; - constructor(identifier: string, dataElement: TPrimitive) { - super(identifier, 'data', dataElement.type); + constructor(elementName: string, dataElement: TPrimitive) { + super(elementName, 'data', dataElement.type); this._dataElement = dataElement; } @@ -61,12 +61,12 @@ export abstract class ArgumentExpressionElement private _args: ArgumentMap; constructor( - identifier: string, + elementName: string, type: TPrimitiveName, constraints?: { [key: string]: TPrimitiveName[] } ) { - super(identifier, 'expression', type); - this._args = new ArgumentMap(identifier, !constraints ? null : constraints); + super(elementName, 'expression', type); + this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } get args() { @@ -150,10 +150,10 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn private _next: InstructionElement | null; private _args: ArgumentMap; - constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(identifier); + constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(elementName); this._next = null; - this._args = new ArgumentMap(identifier, !constraints ? null : constraints); + this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } set next(next: InstructionElement | null) { @@ -172,8 +172,8 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn } export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { - constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(identifier, constraints); + constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(elementName, constraints); } } @@ -181,8 +181,8 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo private _childHeads: (InstructionElement | null)[] = [null]; private _childHead: InstructionElement | null = null; - constructor(identifier: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(identifier, constraints); + constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(elementName, constraints); } set childHeads(innerHeads: (InstructionElement | null)[]) { From 325ba39ec07d27b9985b7466b0d9965b439ebbe3 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 23:43:04 +0530 Subject: [PATCH 018/176] Create arithmetic operation expression elements --- .../syntaxElements/primitiveElements.ts | 19 ++-- .../programElements/operationElements.test.ts | 65 +++++++++++++ .../programElements/operationElements.ts | 95 +++++++++++++++++++ .../syntaxElements/structureElements.ts | 2 - 4 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 src/.prototype/syntaxElements/programElements/operationElements.test.ts create mode 100644 src/.prototype/syntaxElements/programElements/operationElements.ts diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index 8337de6..cffb899 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -124,7 +124,7 @@ export class TFloat extends PrimitiveElement { } } -export class TChar extends PrimitiveElement { +export class TChar extends PrimitiveElement { static toChar(value: number) { return String.fromCharCode(Math.min(Math.max(TInt.toInt(value), 0), 255)); } @@ -138,17 +138,22 @@ export class TChar extends PrimitiveElement { } constructor(value: string | number) { - super('TChar', value); - this.value = value; + super('TChar', ''); + if (typeof value === 'string') { + this.value = value; + } else { + this.valueInt = value; + } } - set value(value: string | number) { - if (typeof value === 'number') { - value = TChar.toChar(value); - } + set value(value: string) { this._value = value.length === 0 ? String.fromCharCode(0) : value.charAt(0); } + set valueInt(value: number) { + this._value = TChar.toChar(value); + } + get value() { return this._value; } diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntaxElements/programElements/operationElements.test.ts new file mode 100644 index 0000000..86f5260 --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/operationElements.test.ts @@ -0,0 +1,65 @@ +import { OperationElement } from './operationElements'; +import { ArgumentExpressionElement } from '../structureElements'; +import { ValueElement } from './valueElements'; + +describe('arithmetic operations', () => { + let operElem: ArgumentExpressionElement; + + test('supply two valid ArgumentElements to AddExpressionElement and verify', () => { + operElem = new OperationElement.AddExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(19.5); + }); + + test('supply one valid ArgumentElement and a null to AddExpressionElement and verify', () => { + operElem = new OperationElement.AddExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: null + }); + expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + }); + + test('supply two valid ArgumentElements to SubtractExpressionElement and verify', () => { + operElem = new OperationElement.SubtractExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(11.5); + }); + + test('supply two valid ArgumentElements to MultiplyExpressionElement and verify', () => { + operElem = new OperationElement.MultiplyExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(62); + }); + + test('supply two valid ArgumentElements to DivideExpressionElement and verify', () => { + operElem = new OperationElement.DivideExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(3.875); + }); + + test('supply two valid ArgumentElements to ModExpressionElement and verify', () => { + operElem = new OperationElement.ModExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(3.5); + }); +}); diff --git a/src/.prototype/syntaxElements/programElements/operationElements.ts b/src/.prototype/syntaxElements/programElements/operationElements.ts new file mode 100644 index 0000000..8c044af --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/operationElements.ts @@ -0,0 +1,95 @@ +import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; +import { TFloat, TInt } from '../primitiveElements'; +import { ArgumentElement, ArgumentExpressionElement } from '../structureElements'; + +type TOp = '+' | '-' | '*' | '/' | '%'; +type TArg = ArgumentElement | null; + +export namespace OperationElement { + abstract class ArithmeticOperationElement extends ArgumentExpressionElement { + private _operator: TOp; + private operand_1: TArg; + private operand_2: TArg; + + constructor( + elementName: string, + returnType: TPrimitiveName, + operator: TOp, + arg: { + operand_1: TArg; + operand_2: TArg; + } + ) { + super(elementName, returnType, { + operand_1: ['TFloat'], + operand_2: ['TFloat'] + }); + this._operator = operator; + + this.args.setArg('operand_1', arg.operand_1); + this.args.setArg('operand_2', arg.operand_2); + + this.operand_1 = arg.operand_1; + this.operand_2 = arg.operand_2; + } + + get data(): TPrimitive { + if (this.operand_1 === null) { + throw Error(`Invalid argument: "operand_1" cannot be null`); + } + if (this.operand_2 === null) { + throw Error(`Invalid argument: "operand_2" cannot be null`); + } + if (!(this.operand_1.data instanceof TInt || this.operand_1.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_1" cannot be of type TInt or TFloat`); + } + if (!(this.operand_2.data instanceof TInt || this.operand_2.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_2" cannot be of type TInt or TFloat`); + } + switch (this._operator) { + case '+': + return TFloat.add(this.operand_1.data, this.operand_2.data); + case '-': + return TFloat.subtract(this.operand_1.data, this.operand_2.data); + case '*': + return TFloat.multiply(this.operand_1.data, this.operand_2.data); + case '/': + return TFloat.divide(this.operand_1.data, this.operand_2.data); + case '%': + return TFloat.mod(this.operand_1.data, this.operand_2.data); + default: + throw Error(`Invalid access: this should not be reachable`); + } + } + } + + export class AddExpressionElement extends ArithmeticOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('add', 'TFloat', '+', arg); + } + } + + export class SubtractExpressionElement extends ArithmeticOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('add', 'TFloat', '-', arg); + } + } + + export class MultiplyExpressionElement extends ArithmeticOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('add', 'TFloat', '*', arg); + } + } + + export class DivideExpressionElement extends ArithmeticOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('add', 'TFloat', '/', arg); + } + } + + export class ModExpressionElement extends ArithmeticOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('add', 'TFloat', '%', arg); + } + } +} diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 38d723e..fd8e3df 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -38,7 +38,6 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum abstract get data(): TPrimitive; } -/** @todo: This should be an abstract class. Currently, not abstract as sub-classes not created. */ export abstract class ArgumentDataElement extends ArgumentElement implements TS.IArgumentDataElement { @@ -54,7 +53,6 @@ export abstract class ArgumentDataElement } } -/** @todo: This should be an abstract class. Currently, not abstract as sub-classes not created. */ export abstract class ArgumentExpressionElement extends ArgumentElement implements TS.IArgumentExpressionElement { From d795938885b9e0ea2f9506b6c451775205fd3e3e Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 9 Jan 2021 23:54:01 +0530 Subject: [PATCH 019/176] Allow higher type-casting --- .../programElements/operationElements.test.ts | 10 ++++++++++ .../syntaxElements/structureElements.ts | 16 +++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntaxElements/programElements/operationElements.test.ts index 86f5260..a3e1a8d 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.test.ts @@ -15,6 +15,16 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(19.5); }); + test('supply one valid ArgumentElement and type-castable ArgumentElement to AddExpressionElement and verify', () => { + operElem = new OperationElement.AddExpressionElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.IntElement(4) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TFloat'); + expect(resElem.value).toBe(19.5); + }); + test('supply one valid ArgumentElement and a null to AddExpressionElement and verify', () => { operElem = new OperationElement.AddExpressionElement({ operand_1: new ValueElement.FloatElement(15.5), diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index fd8e3df..790c6c7 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -113,9 +113,19 @@ class ArgumentMap implements TS.IArgumentMap { this._argTypeMap !== null && this._argTypeMap[argName].indexOf(arg.returnType) === -1 ) { - throw Error( - `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` - ); + // Allow higher type casting. + if ( + !( + (arg.returnType === 'TInt' && + this._argTypeMap[argName].indexOf('TFloat') !== -1) || + (arg.returnType === 'TChar' && + this._argTypeMap[argName].indexOf('TString') !== -1) + ) + ) { + throw Error( + `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` + ); + } } } From c8d60928d3850043ddfcb2d4ce7f05ac067c6fa1 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 10 Jan 2021 00:14:00 +0530 Subject: [PATCH 020/176] Add relation operation logic and elements --- .../syntaxElements/primitiveElements.ts | 12 +++ .../programElements/operationElements.test.ts | 80 ++++++++++++++--- .../programElements/operationElements.ts | 89 +++++++++++++++++-- 3 files changed, 158 insertions(+), 23 deletions(-) diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index cffb899..b424b46 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -122,6 +122,18 @@ export class TFloat extends PrimitiveElement { static mod(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value % operand_2.value); } + + static equals(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TBoolean(operand_1.value == operand_2.value); + } + + static greaterThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TBoolean(operand_1.value > operand_2.value); + } + + static lessThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { + return new TBoolean(operand_1.value < operand_2.value); + } } export class TChar extends PrimitiveElement { diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntaxElements/programElements/operationElements.test.ts index a3e1a8d..3094a11 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.test.ts @@ -5,8 +5,8 @@ import { ValueElement } from './valueElements'; describe('arithmetic operations', () => { let operElem: ArgumentExpressionElement; - test('supply two valid ArgumentElements to AddExpressionElement and verify', () => { - operElem = new OperationElement.AddExpressionElement({ + test('supply two valid ArgumentElements to AddElement and verify', () => { + operElem = new OperationElement.AddElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.FloatElement(4) }); @@ -15,8 +15,8 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(19.5); }); - test('supply one valid ArgumentElement and type-castable ArgumentElement to AddExpressionElement and verify', () => { - operElem = new OperationElement.AddExpressionElement({ + test('supply one valid ArgumentElement and type-castable ArgumentElement to AddElement and verify', () => { + operElem = new OperationElement.AddElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.IntElement(4) }); @@ -25,16 +25,16 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(19.5); }); - test('supply one valid ArgumentElement and a null to AddExpressionElement and verify', () => { - operElem = new OperationElement.AddExpressionElement({ + test('supply one valid ArgumentElement and a null to AddElement and verify', () => { + operElem = new OperationElement.AddElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: null }); expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); - test('supply two valid ArgumentElements to SubtractExpressionElement and verify', () => { - operElem = new OperationElement.SubtractExpressionElement({ + test('supply two valid ArgumentElements to SubtractElement and verify', () => { + operElem = new OperationElement.SubtractElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.FloatElement(4) }); @@ -43,8 +43,8 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(11.5); }); - test('supply two valid ArgumentElements to MultiplyExpressionElement and verify', () => { - operElem = new OperationElement.MultiplyExpressionElement({ + test('supply two valid ArgumentElements to MultiplyElement and verify', () => { + operElem = new OperationElement.MultiplyElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.FloatElement(4) }); @@ -53,8 +53,8 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(62); }); - test('supply two valid ArgumentElements to DivideExpressionElement and verify', () => { - operElem = new OperationElement.DivideExpressionElement({ + test('supply two valid ArgumentElements to DivideElement and verify', () => { + operElem = new OperationElement.DivideElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.FloatElement(4) }); @@ -63,8 +63,8 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(3.875); }); - test('supply two valid ArgumentElements to ModExpressionElement and verify', () => { - operElem = new OperationElement.ModExpressionElement({ + test('supply two valid ArgumentElements to ModElement and verify', () => { + operElem = new OperationElement.ModElement({ operand_1: new ValueElement.FloatElement(15.5), operand_2: new ValueElement.FloatElement(4) }); @@ -73,3 +73,55 @@ describe('arithmetic operations', () => { expect(resElem.value).toBe(3.5); }); }); + +describe('relation operations', () => { + let operElem: ArgumentExpressionElement; + + test('supply two valid ArgumentElements to EqualsElement and verify', () => { + operElem = new OperationElement.EqualsElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(15.5) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(true); + }); + + test('supply one valid ArgumentElement and type-castable ArgumentElement to EqualsElement and verify', () => { + operElem = new OperationElement.EqualsElement({ + operand_1: new ValueElement.FloatElement(15.0), + operand_2: new ValueElement.IntElement(15) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(true); + }); + + test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { + operElem = new OperationElement.EqualsElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: null + }); + expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + }); + + test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { + operElem = new OperationElement.GreaterThanElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(11) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(true); + }); + + test('supply two valid ArgumentElements to LessThanElement and verify', () => { + operElem = new OperationElement.LessThanElement({ + operand_1: new ValueElement.FloatElement(15.5), + operand_2: new ValueElement.FloatElement(11) + }); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(false); + }); +}); diff --git a/src/.prototype/syntaxElements/programElements/operationElements.ts b/src/.prototype/syntaxElements/programElements/operationElements.ts index 8c044af..cd5c490 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.ts @@ -1,20 +1,21 @@ import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; -import { TFloat, TInt } from '../primitiveElements'; +import { TBoolean, TFloat, TInt } from '../primitiveElements'; import { ArgumentElement, ArgumentExpressionElement } from '../structureElements'; -type TOp = '+' | '-' | '*' | '/' | '%'; +type TArithOp = '+' | '-' | '*' | '/' | '%'; +type TRelnOp = '==' | '>' | '<'; type TArg = ArgumentElement | null; export namespace OperationElement { abstract class ArithmeticOperationElement extends ArgumentExpressionElement { - private _operator: TOp; + private _operator: TArithOp; private operand_1: TArg; private operand_2: TArg; constructor( elementName: string, returnType: TPrimitiveName, - operator: TOp, + operator: TArithOp, arg: { operand_1: TArg; operand_2: TArg; @@ -63,33 +64,103 @@ export namespace OperationElement { } } - export class AddExpressionElement extends ArithmeticOperationElement { + export class AddElement extends ArithmeticOperationElement { constructor(arg: { operand_1: TArg; operand_2: TArg }) { super('add', 'TFloat', '+', arg); } } - export class SubtractExpressionElement extends ArithmeticOperationElement { + export class SubtractElement extends ArithmeticOperationElement { constructor(arg: { operand_1: TArg; operand_2: TArg }) { super('add', 'TFloat', '-', arg); } } - export class MultiplyExpressionElement extends ArithmeticOperationElement { + export class MultiplyElement extends ArithmeticOperationElement { constructor(arg: { operand_1: TArg; operand_2: TArg }) { super('add', 'TFloat', '*', arg); } } - export class DivideExpressionElement extends ArithmeticOperationElement { + export class DivideElement extends ArithmeticOperationElement { constructor(arg: { operand_1: TArg; operand_2: TArg }) { super('add', 'TFloat', '/', arg); } } - export class ModExpressionElement extends ArithmeticOperationElement { + export class ModElement extends ArithmeticOperationElement { constructor(arg: { operand_1: TArg; operand_2: TArg }) { super('add', 'TFloat', '%', arg); } } + + abstract class RelationOperationElement extends ArgumentExpressionElement { + private _operator: TRelnOp; + private operand_1: TArg; + private operand_2: TArg; + + constructor( + elementName: string, + operator: TRelnOp, + arg: { + operand_1: TArg; + operand_2: TArg; + } + ) { + super(elementName, 'TBoolean', { + operand_1: ['TFloat'], + operand_2: ['TFloat'] + }); + this._operator = operator; + + this.args.setArg('operand_1', arg.operand_1); + this.args.setArg('operand_2', arg.operand_2); + + this.operand_1 = arg.operand_1; + this.operand_2 = arg.operand_2; + } + + get data(): TBoolean { + if (this.operand_1 === null) { + throw Error(`Invalid argument: "operand_1" cannot be null`); + } + if (this.operand_2 === null) { + throw Error(`Invalid argument: "operand_2" cannot be null`); + } + if (!(this.operand_1.data instanceof TInt || this.operand_1.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_1" cannot be of type TInt or TFloat`); + } + if (!(this.operand_2.data instanceof TInt || this.operand_2.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_2" cannot be of type TInt or TFloat`); + } + switch (this._operator) { + case '==': + return TFloat.equals(this.operand_1.data, this.operand_2.data); + case '>': + return TFloat.greaterThan(this.operand_1.data, this.operand_2.data); + case '<': + return TFloat.lessThan(this.operand_1.data, this.operand_2.data); + default: + throw Error(`Invalid access: this should not be reachable`); + } + } + } + + export class EqualsElement extends RelationOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('equals', '==', arg); + } + } + + export class GreaterThanElement extends RelationOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('equals', '>', arg); + } + } + + export class LessThanElement extends RelationOperationElement { + constructor(arg: { operand_1: TArg; operand_2: TArg }) { + super('equals', '<', arg); + } + } } From 8061cef71e2cfa83a19a4910720664cb2d3912a2 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 02:49:45 +0530 Subject: [PATCH 021/176] Reorganize and document files related to primitives (#5) * Reorganize and document files related to primitives * Add todo comments --- .../@types/primitiveElements.d.ts | 8 + .../syntaxElements/@types/primitiveTypes.d.ts | 8 + .../syntaxElements/primitiveElements.ts | 164 +++++++++++++----- 3 files changed, 139 insertions(+), 41 deletions(-) create mode 100644 src/.prototype/syntaxElements/@types/primitiveElements.d.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts new file mode 100644 index 0000000..cde1c17 --- /dev/null +++ b/src/.prototype/syntaxElements/@types/primitiveElements.d.ts @@ -0,0 +1,8 @@ +import { TPrimitiveName } from './primitiveTypes'; + +export interface IPrimitiveElement { + /** Primitive type string ('TInt', 'TFloat', 'TChar', 'TString', 'TBoolean') of the element. */ + type: TPrimitiveName; + /** Wrapped value. */ + value: T; +} diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts index 82d85ac..3ae1e6b 100644 --- a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts +++ b/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts @@ -5,5 +5,13 @@ type TNString = 'TString'; type TNBoolean = 'TBoolean'; export type TPrimitiveName = TNInt | TNFloat | TNChar | TNString | TNBoolean; +/* + * There is a circular dependency on files between this file and ../primitiveElements.ts. + * The ones above this comment are dependencies of ../primitiveElements.ts. + * The ones below this comment are dependent on ../primitiveElements.ts. + * This is not a bug, however, it is not a good convention. + * This particular case may be carefully exempted only for clarity. + */ + import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; export type TPrimitive = TInt | TFloat | TChar | TString | TBoolean; diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index b424b46..a0116b4 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -1,10 +1,15 @@ import { TPrimitiveName } from './@types/primitiveTypes'; - -interface IPrimitiveElement { - type: TPrimitiveName; - value: T; -} - +import { IPrimitiveElement } from './@types/primitiveElements'; + +/** + * @private + * A generic Primitive Element based on JavaScript types (number, string, boolean). The aim is to + * wrap these types to produce integer, float, character, string, boolean. Sub-classes of this shall + * be the Primitive types as far as the Music Blocks framework is concerned. The implementation of + * operations on types, however, can't be implemented trivially since JavaScript doesn't support + * operator overloading. Therefore, it is done using class methods. Not the best, but we have to + * live with that if we need the custom primitive types. + */ abstract class PrimitiveElement implements IPrimitiveElement { protected _value: T; private _type: TPrimitiveName; @@ -27,12 +32,45 @@ abstract class PrimitiveElement implements IPrimitiveElement { } } +// ---- Primitive Type Classes --------------------------------------------------------------------- + +/** + * Integer primitive type. + * @todo add remaining operators. + */ export class TInt extends PrimitiveElement { + constructor(value: number) { + super('TInt', value); + this.value = value; + } + + /** + * @override + * Setter for wrapped value. + */ + set value(value: number) { + this._value = TInt.toInt(value); + } + + /** + * @override + * Getter for wrapped value. + */ + get value() { + return this._value; + } + + // -- Utilities ------------------------------------------------------------ + + /** Trims decimal portion of a floating number. */ static toInt(value: number) { return Math.floor(value); } - /** @throws Invalid format */ + /** + * Type casts other primitives types to TInt. + * @throws Invalid format + */ static TInt(primitive: TInt | TFloat | TChar | TString) { if (primitive instanceof TFloat) { return new TInt(primitive.value); @@ -49,42 +87,49 @@ export class TInt extends PrimitiveElement { } } - constructor(value: number) { - super('TInt', value); - this.value = value; - } - - set value(value: number) { - this._value = TInt.toInt(value); - } - - get value() { - return this._value; - } + // -- Operators ------------------------------------------------------------ + /** Binary + operator. */ static add(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value + operand_2.value); } + /** Binary - operator. */ static subtract(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value - operand_2.value); } + /** Binary * operator. */ static multiply(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value * operand_2.value); } + /** Binary / operator. */ static divide(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value / operand_2.value); } + /** Binary % operator. */ static mod(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value % operand_2.value); } } +/** + * Float primitive type. + * @todo add remaining operators. + */ export class TFloat extends PrimitiveElement { - /** @throws Invalid format */ + constructor(value: number) { + super('TFloat', value); + } + + // -- Utilities ------------------------------------------------------------ + + /** + * Type casts other primitives types to TFloat. + * @throws Invalid format + */ static TFloat(primitive: TFloat | TInt | TString) { if (primitive instanceof TInt) { return new TFloat(primitive.value); @@ -99,56 +144,54 @@ export class TFloat extends PrimitiveElement { } } - constructor(value: number) { - super('TFloat', value); - } + // -- Operators ------------------------------------------------------------ + /** Binary + operator. */ static add(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value + operand_2.value); } + /** Binary - operator. */ static subtract(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value - operand_2.value); } + /** Binary * operator. */ static multiply(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value * operand_2.value); } + /** Binary / operator. */ static divide(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value / operand_2.value); } + /** Binary % operator. */ static mod(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value % operand_2.value); } + /** Binary == operator. */ static equals(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TBoolean(operand_1.value == operand_2.value); } + /** Binary > operator. */ static greaterThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TBoolean(operand_1.value > operand_2.value); } + /** Binary < operator. */ static lessThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TBoolean(operand_1.value < operand_2.value); } } +/** + * Character primitive type. + * @todo add remaining operators. + */ export class TChar extends PrimitiveElement { - static toChar(value: number) { - return String.fromCharCode(Math.min(Math.max(TInt.toInt(value), 0), 255)); - } - - static TChar(primitive: TChar | TInt) { - if (primitive instanceof TInt) { - return new TChar(TChar.toChar(primitive.value)); - } else { - return primitive; - } - } - constructor(value: string | number) { super('TChar', ''); if (typeof value === 'string') { @@ -158,24 +201,63 @@ export class TChar extends PrimitiveElement { } } + /** + * @override + * Setter for wrapped value. + */ set value(value: string) { this._value = value.length === 0 ? String.fromCharCode(0) : value.charAt(0); } + /** + * @override + * Getter for wrapped value. + */ + get value() { + return this._value; + } + + /** Setter for wrapped value (by ASCII). */ set valueInt(value: number) { this._value = TChar.toChar(value); } - get value() { - return this._value; + // -- Utilities ------------------------------------------------------------ + + /** Returns equivalent character for ASCII (trimmed to [0, 255]). */ + static toChar(value: number) { + return String.fromCharCode(Math.min(Math.max(TInt.toInt(value), 0), 255)); + } + + /** Type casts TInt or TChar types to TChar. */ + static TChar(primitive: TChar | TInt) { + if (primitive instanceof TInt) { + return new TChar(TChar.toChar(primitive.value)); + } else { + return primitive; + } } + // -- Operators ------------------------------------------------------------ + + /** Unary add ASCII operator. */ addOffset(offset: number) { this._value = TChar.toChar(this._value.toString().charCodeAt(0) + TInt.toInt(offset)); } } +/** + * String primitive type. + * @todo add remaining operators. + */ export class TString extends PrimitiveElement { + constructor(value: string) { + super('TString', value); + } + + // -- Utilities ------------------------------------------------------------ + + /** Type casts other primitive types to TString. */ static TString(primitive: TString | TInt | TFloat | TChar) { if (primitive instanceof TString) { return primitive; @@ -183,12 +265,12 @@ export class TString extends PrimitiveElement { return new TString(primitive.value.toString()); } } - - constructor(value: string) { - super('TString', value); - } } +/** + * Boolean primitive type. + * @todo add remaining operators. + */ export class TBoolean extends PrimitiveElement { constructor(value: boolean) { super('TBoolean', value); From f7c96e6b35c1f2bd93a253e8c7537aba10ee2a15 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 03:54:23 +0530 Subject: [PATCH 022/176] Reorganize and document files related to structural elements --- .../@types/structureElements.d.ts | 65 ++++++-- .../syntaxElements/structureElements.test.ts | 14 +- .../syntaxElements/structureElements.ts | 152 ++++++++++-------- 3 files changed, 145 insertions(+), 86 deletions(-) diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index 5adbafc..8f38ce0 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -1,42 +1,87 @@ import { TPrimitive, TPrimitiveName } from './primitiveTypes'; -/** An object whose class implements this will be tied to the corresponding UI element. */ +/** + * There are two categories of syntax elements: Arguments and Instructions. + * + * Arguments are of two kinds: Data (simply store a value), and Expressions (take other values as + * arguments and operate on them to return another value). + * + * Instructions are of two kinds: Statements (a single linear instruction), and Blocks (wrap around + * other instructions while performing some actions before and after executing them). + */ + +/** Objects whose classes implement this will be tied to the corresponding UI element. */ export interface ISyntaxElement { + /** Name of the supported syntax element. Different from identifiers. */ elementName: string; } export interface IDataElement { + /** A primitive element. */ data: TPrimitive; } export interface IExpressionElement {} +/** + * To be implemented by the class that handles the argument interface for classes that implement + * IArgumentExpressionElement or IInstructionElement. + */ +export interface IArgumentMap { + /** Returns the list of argument labels. */ + argNames: string[]; + /** Assigns an ArgumentElement | null corresponding to an argument label. */ + setArg: Function; + /** Returns the ArgumentElement | null corresponding to an argument label. */ + getArg: Function; +} + +/** To be implemented by the super-class of all argument elements. */ export interface IArgumentElement extends ISyntaxElement { - type: 'data' | 'expression'; - returnType: TPrimitiveName; + /** Whether data argument element or expression argument element. */ + argType: 'data' | 'expression'; + /** Return type of the argument element. */ + type: TPrimitiveName; + /** Returns the primitive element that the argument element returns. */ data: TPrimitive; } +/** + * To be implemented by sub-classes of class that implement IArgumentElement and represent data + * arguments. + */ export interface IArgumentDataElement extends ISyntaxElement, IDataElement {} +/** + * To be implemented by sub-classes of class that implement IArgumentElement and represent + * expression arguments. + */ export interface IArgumentExpressionElement extends ISyntaxElement, IExpressionElement { - args: Object; -} - -export interface IArgumentMap { - argNames: string[]; - setArg: Function; - getArg: Function; + /** Stores an object of the class that implements IArgumentMap. */ + args: IArgumentMap; } +/** To be implemented by the super-class of all instruction elements. */ interface IInstructionElement extends ISyntaxElement { + /** Stores an object of the class that implements IArgumentMap. */ args: IArgumentMap; + /** Stores the reference to the next instruction in stack. */ next: IInstructionElement | null; } +/** + * To be implemented by sub-classes of class that implement IInstructionElement and represent + * non-clamp instructions. + */ export interface IStatementElement extends IInstructionElement {} +/** + * To be implemented by sub-classes of class that implement IInstructionElement and represent clamp + * instructions. + */ export interface IBlockElement extends IInstructionElement { + /** Stores the references to the head instruction inside the logical code block/s. */ childHeads: (IInstructionElement | null)[]; + /** Initial head instruction. */ childHead: IInstructionElement | null; } diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index 5788d89..f6d8900 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -35,35 +35,35 @@ describe('class ArgumentDataElement', () => { test('intialize object with a TInt(5) and verify contents', () => { argData_int = new CArgumentDataElement('myArgData', new TInt(5)); expect(argData_int.elementName).toBe('myArgData'); - expect(argData_int.type).toBe('data'); + expect(argData_int.argType).toBe('data'); expect(argData_int.data.value).toBe(5); }); test('intialize object with a TFloat(3.14) and verify contents', () => { argData_float = new CArgumentDataElement('myArgData', new TFloat(3.14)); expect(argData_float.elementName).toBe('myArgData'); - expect(argData_float.type).toBe('data'); + expect(argData_float.argType).toBe('data'); expect(argData_float.data.value).toBe(3.14); }); test('intialize object with a TChar(65) and verify contents', () => { argData_char = new CArgumentDataElement('myArgData', new TChar(65)); expect(argData_char.elementName).toBe('myArgData'); - expect(argData_char.type).toBe('data'); + expect(argData_char.argType).toBe('data'); expect(argData_char.data.value).toBe('A'); }); test('intialize object with a TString("str") and verify contents', () => { argData_string = new CArgumentDataElement('myArgData', new TString('str')); expect(argData_string.elementName).toBe('myArgData'); - expect(argData_string.type).toBe('data'); + expect(argData_string.argType).toBe('data'); expect(argData_string.data.value).toBe('str'); }); test('intialize object with a TBoolean(false) and verify contents', () => { argData_boolean = new CArgumentDataElement('myArgData', new TBoolean(false)); expect(argData_boolean.elementName).toBe('myArgData'); - expect(argData_boolean.type).toBe('data'); + expect(argData_boolean.argType).toBe('data'); expect(argData_boolean.data.value).toBe(false); }); }); @@ -72,8 +72,8 @@ describe('class ArgumentExpressionElement', () => { test('initialize object with valid arbitrary arguments and verify contents', () => { argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); expect(argExpr.elementName).toBe('myArgExpression'); - expect(argExpr.returnType).toBe('TInt'); - expect(argExpr.type).toBe('expression'); + expect(argExpr.type).toBe('TInt'); + expect(argExpr.argType).toBe('expression'); }); }); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 790c6c7..ecc88e9 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -3,6 +3,10 @@ import * as TS from './@types/structureElements'; // ---- Syntax Element ----------------------------------------------------------------------------- +/** + * Super class for all syntax elements. Holds the element name. + * Will be tied to the corresponding UI element. + */ abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; @@ -15,67 +19,9 @@ abstract class SyntaxElement implements TS.ISyntaxElement { } } -// ---- Argument Element --------------------------------------------------------------------------- - -export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { - private _type: 'data' | 'expression'; - private _returnType: TPrimitiveName; - - constructor(elementName: string, type: 'data' | 'expression', returnType: TPrimitiveName) { - super(elementName); - this._type = type; - this._returnType = returnType; - } - - get type() { - return this._type; - } - - get returnType() { - return this._returnType; - } - - abstract get data(): TPrimitive; -} - -export abstract class ArgumentDataElement - extends ArgumentElement - implements TS.IArgumentDataElement { - private _dataElement: TPrimitive; - - constructor(elementName: string, dataElement: TPrimitive) { - super(elementName, 'data', dataElement.type); - this._dataElement = dataElement; - } - - get data() { - return this._dataElement; - } -} - -export abstract class ArgumentExpressionElement - extends ArgumentElement - implements TS.IArgumentExpressionElement { - private _args: ArgumentMap; - - constructor( - elementName: string, - type: TPrimitiveName, - constraints?: { [key: string]: TPrimitiveName[] } - ) { - super(elementName, 'expression', type); - this._args = new ArgumentMap(elementName, !constraints ? null : constraints); - } - - get args() { - return this._args; - } - - abstract get data(): TPrimitive; -} - // ---- Argument Map ------------------------------------------------------------------------------- +/** ADT that handles the mapping and interfacing of arguments to expressions/instructions. */ class ArgumentMap implements TS.IArgumentMap { private _instruction: string; private _argMap: { [key: string]: ArgumentElement | null } = {}; @@ -91,7 +37,10 @@ class ArgumentMap implements TS.IArgumentMap { } } - /** @throws Invalid argument, Invalid access */ + /** + * Checks if and argument label exists for the corresponding instruction/expression. + * @throws Invalid argument, Invalid access + */ private _validateArgName(argName: string): void { if (this._argTypeMap === null) { throw Error( @@ -105,26 +54,25 @@ class ArgumentMap implements TS.IArgumentMap { } } - /** @throws Invalid argument, Invalid access */ + /** + * Type-checks the type of the argument element with the constraints of the argument label. + * @throws Invalid argument, Invalid access + */ private _validateArg(argName: string, arg: ArgumentElement | null): void { this._validateArgName(argName); if ( arg !== null && this._argTypeMap !== null && - this._argTypeMap[argName].indexOf(arg.returnType) === -1 + this._argTypeMap[argName].indexOf(arg.type) === -1 ) { // Allow higher type casting. if ( !( - (arg.returnType === 'TInt' && - this._argTypeMap[argName].indexOf('TFloat') !== -1) || - (arg.returnType === 'TChar' && - this._argTypeMap[argName].indexOf('TString') !== -1) + (arg.type === 'TInt' && this._argTypeMap[argName].indexOf('TFloat') !== -1) || + (arg.type === 'TChar' && this._argTypeMap[argName].indexOf('TString') !== -1) ) ) { - throw Error( - `Invalid argument: "${arg.returnType}" is not a valid type for "${argName}"` - ); + throw Error(`Invalid argument: "${arg.type}" is not a valid type for "${argName}"`); } } } @@ -152,6 +100,70 @@ class ArgumentMap implements TS.IArgumentMap { } } +// ---- Argument Element --------------------------------------------------------------------------- + +export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { + private _argType: 'data' | 'expression'; + private _type: TPrimitiveName; + + constructor(elementName: string, argType: 'data' | 'expression', type: TPrimitiveName) { + super(elementName); + this._argType = argType; + this._type = type; + } + + get argType() { + return this._argType; + } + + get type() { + return this._type; + } + + abstract get data(): TPrimitive; +} + +export abstract class ArgumentDataElement + extends ArgumentElement + implements TS.IArgumentDataElement { + /** Stores the primitive element that is wrapped. */ + private _dataElement: TPrimitive; + + constructor(elementName: string, dataElement: TPrimitive) { + super(elementName, 'data', dataElement.type); + this._dataElement = dataElement; + } + + get data() { + return this._dataElement; + } +} + +export abstract class ArgumentExpressionElement + extends ArgumentElement + implements TS.IArgumentExpressionElement { + private _args: ArgumentMap; + + constructor( + elementName: string, + type: TPrimitiveName, + /** + * Certain argument expressions might not take arguments, instead could work on state + * objects exposed to the framework. + */ + constraints?: { [key: string]: TPrimitiveName[] } + ) { + super(elementName, 'expression', type); + this._args = new ArgumentMap(elementName, !constraints ? null : constraints); + } + + get args() { + return this._args; + } + + abstract get data(): TPrimitive; +} + // ---- Instruction Element ------------------------------------------------------------------------ export abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { @@ -176,6 +188,7 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn return this._args; } + /** Executes when element is encountered by MB program interpretor. */ abstract onVisit(): void; } @@ -209,5 +222,6 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo return this._childHead; } + /** Executes after instructions inside the block have been executed. */ abstract onExit(): void; } From 332045cac7ad9ce2acaab8df13bd31043a68bf3b Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 18:47:32 +0530 Subject: [PATCH 023/176] Add boolean operators --- .../syntaxElements/primitiveElements.test.ts | 29 +++++++++++++++++++ .../syntaxElements/primitiveElements.ts | 12 ++++++++ 2 files changed, 41 insertions(+) diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts index d5f9c9c..5ba4607 100644 --- a/src/.prototype/syntaxElements/primitiveElements.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -227,4 +227,33 @@ describe('operations on type elements', () => { expect(typeObj.value).toBe(String.fromCharCode(0)); }); }); + + const operand_4 = new TBoolean(true); + const operand_5 = new TBoolean(false); + + describe('class TBoolean', () => { + test('and TBoolean(true) and TBoolean(true) and expect new element value to be true', () => { + expect(TBoolean.and(operand_4, operand_4).value).toBe(true); + }); + + test('and TBoolean(true) and TBoolean(false) and expect new element value to be false', () => { + expect(TBoolean.and(operand_4, operand_5).value).toBe(false); + }); + + test('and TBoolean(false) and TBoolean(false) and expect new element value to be false', () => { + expect(TBoolean.and(operand_5, operand_5).value).toBe(false); + }); + + test('or TBoolean(true) and TBoolean(true) and expect new element value to be true', () => { + expect(TBoolean.or(operand_4, operand_4).value).toBe(true); + }); + + test('or TBoolean(true) and TBoolean(false) and expect new element value to be true', () => { + expect(TBoolean.or(operand_4, operand_5).value).toBe(true); + }); + + test('or TBoolean(false) and TBoolean(false) and expect new element value to be false', () => { + expect(TBoolean.or(operand_5, operand_5).value).toBe(false); + }); + }); }); diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index a0116b4..041ca07 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -275,4 +275,16 @@ export class TBoolean extends PrimitiveElement { constructor(value: boolean) { super('TBoolean', value); } + + // -- Operators ------------------------------------------------------------ + + /** Binary && operator. */ + static and(operand_1: TBoolean, operand_2: TBoolean) { + return new TBoolean(operand_1.value && operand_2.value); + } + + /** Binary || operator. */ + static or(operand_1: TBoolean, operand_2: TBoolean) { + return new TBoolean(operand_1.value || operand_2.value); + } } From 5c4de0cf30c576e7ec14cd729c89fc1f4c76c40b Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 18:53:02 +0530 Subject: [PATCH 024/176] Add boolean operations --- .../programElements/operationElements.test.ts | 116 ++++++----- .../programElements/operationElements.ts | 184 +++++++++++------- 2 files changed, 180 insertions(+), 120 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntaxElements/programElements/operationElements.test.ts index 3094a11..291b5d6 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.test.ts @@ -1,73 +1,63 @@ import { OperationElement } from './operationElements'; -import { ArgumentExpressionElement } from '../structureElements'; import { ValueElement } from './valueElements'; describe('arithmetic operations', () => { - let operElem: ArgumentExpressionElement; - test('supply two valid ArgumentElements to AddElement and verify', () => { - operElem = new OperationElement.AddElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(4) - }); + const operElem = new OperationElement.AddElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); test('supply one valid ArgumentElement and type-castable ArgumentElement to AddElement and verify', () => { - operElem = new OperationElement.AddElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.IntElement(4) - }); + const operElem = new OperationElement.AddElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.IntElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); test('supply one valid ArgumentElement and a null to AddElement and verify', () => { - operElem = new OperationElement.AddElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: null - }); + const operElem = new OperationElement.AddElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = null; expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); test('supply two valid ArgumentElements to SubtractElement and verify', () => { - operElem = new OperationElement.SubtractElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(4) - }); + const operElem = new OperationElement.SubtractElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(11.5); }); test('supply two valid ArgumentElements to MultiplyElement and verify', () => { - operElem = new OperationElement.MultiplyElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(4) - }); + const operElem = new OperationElement.MultiplyElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(62); }); test('supply two valid ArgumentElements to DivideElement and verify', () => { - operElem = new OperationElement.DivideElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(4) - }); + const operElem = new OperationElement.DivideElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.875); }); test('supply two valid ArgumentElements to ModElement and verify', () => { - operElem = new OperationElement.ModElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(4) - }); + const operElem = new OperationElement.ModElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.5); @@ -75,53 +65,73 @@ describe('arithmetic operations', () => { }); describe('relation operations', () => { - let operElem: ArgumentExpressionElement; - test('supply two valid ArgumentElements to EqualsElement and verify', () => { - operElem = new OperationElement.EqualsElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(15.5) - }); + const operElem = new OperationElement.EqualsElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(15.5); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); test('supply one valid ArgumentElement and type-castable ArgumentElement to EqualsElement and verify', () => { - operElem = new OperationElement.EqualsElement({ - operand_1: new ValueElement.FloatElement(15.0), - operand_2: new ValueElement.IntElement(15) - }); + const operElem = new OperationElement.EqualsElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.0); + operElem.operand_2 = new ValueElement.IntElement(15); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { - operElem = new OperationElement.EqualsElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: null - }); + const operElem = new OperationElement.EqualsElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = null; expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { - operElem = new OperationElement.GreaterThanElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(11) - }); + const operElem = new OperationElement.GreaterThanElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); test('supply two valid ArgumentElements to LessThanElement and verify', () => { - operElem = new OperationElement.LessThanElement({ - operand_1: new ValueElement.FloatElement(15.5), - operand_2: new ValueElement.FloatElement(11) - }); + const operElem = new OperationElement.LessThanElement(); + operElem.operand_1 = new ValueElement.FloatElement(15.5); + operElem.operand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(false); }); }); + +describe('boolean operations', () => { + test('supply two valid ArgumentElements to AndElement and verify', () => { + const operElem = new OperationElement.AndElement(); + operElem.operand_1 = new ValueElement.TrueElement(); + operElem.operand_2 = new ValueElement.TrueElement(); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(true); + }); + + test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { + const operElem = new OperationElement.AndElement(); + operElem.operand_1 = new ValueElement.TrueElement(); + operElem.operand_2 = null; + expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + }); + + test('supply two valid ArgumentElements to OrElement and verify', () => { + const operElem = new OperationElement.OrElement(); + operElem.operand_1 = new ValueElement.TrueElement(); + operElem.operand_2 = new ValueElement.FalseElement(); + const resElem = operElem.data; + expect(resElem.type).toBe('TBoolean'); + expect(resElem.value).toBe(true); + }); +}); diff --git a/src/.prototype/syntaxElements/programElements/operationElements.ts b/src/.prototype/syntaxElements/programElements/operationElements.ts index cd5c490..6048095 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.ts @@ -4,60 +4,80 @@ import { ArgumentElement, ArgumentExpressionElement } from '../structureElements type TArithOp = '+' | '-' | '*' | '/' | '%'; type TRelnOp = '==' | '>' | '<'; +type TBoolOp = '||' | '&&'; type TArg = ArgumentElement | null; export namespace OperationElement { - abstract class ArithmeticOperationElement extends ArgumentExpressionElement { - private _operator: TArithOp; - private operand_1: TArg; - private operand_2: TArg; + abstract class BinaryOperationElement extends ArgumentExpressionElement { + protected _operator: TArithOp | TRelnOp | TBoolOp; + protected _operand_1: TArg = null; + protected _operand_2: TArg = null; constructor( elementName: string, - returnType: TPrimitiveName, - operator: TArithOp, - arg: { - operand_1: TArg; - operand_2: TArg; - } + type: TPrimitiveName, + operator: TArithOp | TRelnOp | TBoolOp, + constraints: { operand_1: TPrimitiveName[]; operand_2: TPrimitiveName[] } ) { - super(elementName, returnType, { - operand_1: ['TFloat'], - operand_2: ['TFloat'] - }); + super(elementName, type, constraints); this._operator = operator; + } + + public set operand_1(operand_1: TArg) { + this.args.setArg('operand_1', operand_1); + this._operand_1 = operand_1; + } + + public get operand_1() { + return this._operand_1; + } + + set operand_2(operand_2: TArg) { + this.args.setArg('operand_2', operand_2); + this._operand_2 = operand_2; + } + + get operand_2() { + return this._operand_2; + } + + abstract get data(): TPrimitive; + } - this.args.setArg('operand_1', arg.operand_1); - this.args.setArg('operand_2', arg.operand_2); + // -- Arithmetic Operators --------------------------------------------------------------------- - this.operand_1 = arg.operand_1; - this.operand_2 = arg.operand_2; + abstract class ArithmeticOperationElement extends BinaryOperationElement { + constructor(elementName: string, type: TPrimitiveName, operator: TArithOp) { + super(elementName, type, operator, { + operand_1: ['TFloat'], + operand_2: ['TFloat'] + }); } get data(): TPrimitive { - if (this.operand_1 === null) { + if (this._operand_1 === null) { throw Error(`Invalid argument: "operand_1" cannot be null`); } - if (this.operand_2 === null) { + if (this._operand_2 === null) { throw Error(`Invalid argument: "operand_2" cannot be null`); } - if (!(this.operand_1.data instanceof TInt || this.operand_1.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_1" cannot be of type TInt or TFloat`); + if (!(this._operand_1.data instanceof TInt || this._operand_1.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_1" can only be of type TInt or TFloat`); } - if (!(this.operand_2.data instanceof TInt || this.operand_2.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_2" cannot be of type TInt or TFloat`); + if (!(this._operand_2.data instanceof TInt || this._operand_2.data instanceof TFloat)) { + throw Error(`Invalid argument: "operand_2" can only be of type TInt or TFloat`); } switch (this._operator) { case '+': - return TFloat.add(this.operand_1.data, this.operand_2.data); + return TFloat.add(this._operand_1.data, this._operand_2.data); case '-': - return TFloat.subtract(this.operand_1.data, this.operand_2.data); + return TFloat.subtract(this._operand_1.data, this._operand_2.data); case '*': - return TFloat.multiply(this.operand_1.data, this.operand_2.data); + return TFloat.multiply(this._operand_1.data, this._operand_2.data); case '/': - return TFloat.divide(this.operand_1.data, this.operand_2.data); + return TFloat.divide(this._operand_1.data, this._operand_2.data); case '%': - return TFloat.mod(this.operand_1.data, this.operand_2.data); + return TFloat.mod(this._operand_1.data, this._operand_2.data); default: throw Error(`Invalid access: this should not be reachable`); } @@ -65,59 +85,43 @@ export namespace OperationElement { } export class AddElement extends ArithmeticOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('add', 'TFloat', '+', arg); + constructor() { + super('add', 'TFloat', '+'); } } export class SubtractElement extends ArithmeticOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('add', 'TFloat', '-', arg); + constructor() { + super('add', 'TFloat', '-'); } } export class MultiplyElement extends ArithmeticOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('add', 'TFloat', '*', arg); + constructor() { + super('add', 'TFloat', '*'); } } export class DivideElement extends ArithmeticOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('add', 'TFloat', '/', arg); + constructor() { + super('add', 'TFloat', '/'); } } export class ModElement extends ArithmeticOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('add', 'TFloat', '%', arg); + constructor() { + super('add', 'TFloat', '%'); } } - abstract class RelationOperationElement extends ArgumentExpressionElement { - private _operator: TRelnOp; - private operand_1: TArg; - private operand_2: TArg; + // -- Relational Operators --------------------------------------------------------------------- - constructor( - elementName: string, - operator: TRelnOp, - arg: { - operand_1: TArg; - operand_2: TArg; - } - ) { - super(elementName, 'TBoolean', { + abstract class RelationOperationElement extends BinaryOperationElement { + constructor(elementName: string, operator: TRelnOp) { + super(elementName, 'TBoolean', operator, { operand_1: ['TFloat'], operand_2: ['TFloat'] }); - this._operator = operator; - - this.args.setArg('operand_1', arg.operand_1); - this.args.setArg('operand_2', arg.operand_2); - - this.operand_1 = arg.operand_1; - this.operand_2 = arg.operand_2; } get data(): TBoolean { @@ -128,10 +132,10 @@ export namespace OperationElement { throw Error(`Invalid argument: "operand_2" cannot be null`); } if (!(this.operand_1.data instanceof TInt || this.operand_1.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_1" cannot be of type TInt or TFloat`); + throw Error(`Invalid argument: "operand_1" can only be of type TInt or TFloat`); } if (!(this.operand_2.data instanceof TInt || this.operand_2.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_2" cannot be of type TInt or TFloat`); + throw Error(`Invalid argument: "operand_2" can only be of type TInt or TFloat`); } switch (this._operator) { case '==': @@ -147,20 +151,66 @@ export namespace OperationElement { } export class EqualsElement extends RelationOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('equals', '==', arg); + constructor() { + super('equals', '=='); } } export class GreaterThanElement extends RelationOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('equals', '>', arg); + constructor() { + super('equals', '>'); } } export class LessThanElement extends RelationOperationElement { - constructor(arg: { operand_1: TArg; operand_2: TArg }) { - super('equals', '<', arg); + constructor() { + super('equals', '<'); + } + } + + // -- Boolean Operators ------------------------------------------------------------------------ + + abstract class BooleanOperationElement extends BinaryOperationElement { + constructor(elementName: string, operator: TBoolOp) { + super(elementName, 'TBoolean', operator, { + operand_1: ['TBoolean'], + operand_2: ['TBoolean'] + }); + } + + get data(): TBoolean { + if (this.operand_1 === null) { + throw Error(`Invalid argument: "operand_1" cannot be null`); + } + if (this.operand_2 === null) { + throw Error(`Invalid argument: "operand_2" cannot be null`); + } + if (!(this.operand_1.data instanceof TBoolean)) { + throw Error(`Invalid argument: "operand_1" can only be of type TBoolean`); + } + if (!(this.operand_2.data instanceof TBoolean)) { + throw Error(`Invalid argument: "operand_2" can only be of type TBoolean`); + } + switch (this._operator) { + case '&&': + return TBoolean.and(this.operand_1.data, this.operand_2.data); + case '||': + return TBoolean.or(this.operand_1.data, this.operand_2.data); + default: + throw Error(`Invalid access: this should not be reachable`); + } + } + } + + export class AndElement extends BooleanOperationElement { + constructor() { + super('and', '&&'); + } + } + + export class OrElement extends BooleanOperationElement { + constructor() { + super('or', '||'); } } } From a462dfeb3b47ecca237f535317974738af657322 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 19:18:34 +0530 Subject: [PATCH 025/176] Rename argument setters and getters --- .../programElements/operationElements.test.ts | 60 +++++++++---------- .../programElements/operationElements.ts | 34 +++++------ 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntaxElements/programElements/operationElements.test.ts index 291b5d6..32b3e1a 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.test.ts @@ -4,8 +4,8 @@ import { ValueElement } from './valueElements'; describe('arithmetic operations', () => { test('supply two valid ArgumentElements to AddElement and verify', () => { const operElem = new OperationElement.AddElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); @@ -13,8 +13,8 @@ describe('arithmetic operations', () => { test('supply one valid ArgumentElement and type-castable ArgumentElement to AddElement and verify', () => { const operElem = new OperationElement.AddElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.IntElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.IntElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); @@ -22,15 +22,15 @@ describe('arithmetic operations', () => { test('supply one valid ArgumentElement and a null to AddElement and verify', () => { const operElem = new OperationElement.AddElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = null; + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = null; expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); test('supply two valid ArgumentElements to SubtractElement and verify', () => { const operElem = new OperationElement.SubtractElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(11.5); @@ -38,8 +38,8 @@ describe('arithmetic operations', () => { test('supply two valid ArgumentElements to MultiplyElement and verify', () => { const operElem = new OperationElement.MultiplyElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(62); @@ -47,8 +47,8 @@ describe('arithmetic operations', () => { test('supply two valid ArgumentElements to DivideElement and verify', () => { const operElem = new OperationElement.DivideElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.875); @@ -56,8 +56,8 @@ describe('arithmetic operations', () => { test('supply two valid ArgumentElements to ModElement and verify', () => { const operElem = new OperationElement.ModElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.5); @@ -67,8 +67,8 @@ describe('arithmetic operations', () => { describe('relation operations', () => { test('supply two valid ArgumentElements to EqualsElement and verify', () => { const operElem = new OperationElement.EqualsElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(15.5); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(15.5); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); @@ -76,8 +76,8 @@ describe('relation operations', () => { test('supply one valid ArgumentElement and type-castable ArgumentElement to EqualsElement and verify', () => { const operElem = new OperationElement.EqualsElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.0); - operElem.operand_2 = new ValueElement.IntElement(15); + operElem.argOperand_1 = new ValueElement.FloatElement(15.0); + operElem.argOperand_2 = new ValueElement.IntElement(15); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); @@ -85,15 +85,15 @@ describe('relation operations', () => { test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { const operElem = new OperationElement.EqualsElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = null; + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = null; expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { const operElem = new OperationElement.GreaterThanElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); @@ -101,8 +101,8 @@ describe('relation operations', () => { test('supply two valid ArgumentElements to LessThanElement and verify', () => { const operElem = new OperationElement.LessThanElement(); - operElem.operand_1 = new ValueElement.FloatElement(15.5); - operElem.operand_2 = new ValueElement.FloatElement(4); + operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + operElem.argOperand_2 = new ValueElement.FloatElement(4); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(false); @@ -112,8 +112,8 @@ describe('relation operations', () => { describe('boolean operations', () => { test('supply two valid ArgumentElements to AndElement and verify', () => { const operElem = new OperationElement.AndElement(); - operElem.operand_1 = new ValueElement.TrueElement(); - operElem.operand_2 = new ValueElement.TrueElement(); + operElem.argOperand_1 = new ValueElement.TrueElement(); + operElem.argOperand_2 = new ValueElement.TrueElement(); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); @@ -121,15 +121,15 @@ describe('boolean operations', () => { test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { const operElem = new OperationElement.AndElement(); - operElem.operand_1 = new ValueElement.TrueElement(); - operElem.operand_2 = null; + operElem.argOperand_1 = new ValueElement.TrueElement(); + operElem.argOperand_2 = null; expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); }); test('supply two valid ArgumentElements to OrElement and verify', () => { const operElem = new OperationElement.OrElement(); - operElem.operand_1 = new ValueElement.TrueElement(); - operElem.operand_2 = new ValueElement.FalseElement(); + operElem.argOperand_1 = new ValueElement.TrueElement(); + operElem.argOperand_2 = new ValueElement.FalseElement(); const resElem = operElem.data; expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); diff --git a/src/.prototype/syntaxElements/programElements/operationElements.ts b/src/.prototype/syntaxElements/programElements/operationElements.ts index 6048095..8c41b17 100644 --- a/src/.prototype/syntaxElements/programElements/operationElements.ts +++ b/src/.prototype/syntaxElements/programElements/operationElements.ts @@ -23,21 +23,21 @@ export namespace OperationElement { this._operator = operator; } - public set operand_1(operand_1: TArg) { + set argOperand_1(operand_1: TArg) { this.args.setArg('operand_1', operand_1); this._operand_1 = operand_1; } - public get operand_1() { + get argOperand_1() { return this._operand_1; } - set operand_2(operand_2: TArg) { + set argOperand_2(operand_2: TArg) { this.args.setArg('operand_2', operand_2); this._operand_2 = operand_2; } - get operand_2() { + get argOperand_2() { return this._operand_2; } @@ -125,25 +125,25 @@ export namespace OperationElement { } get data(): TBoolean { - if (this.operand_1 === null) { + if (this._operand_1 === null) { throw Error(`Invalid argument: "operand_1" cannot be null`); } - if (this.operand_2 === null) { + if (this._operand_2 === null) { throw Error(`Invalid argument: "operand_2" cannot be null`); } - if (!(this.operand_1.data instanceof TInt || this.operand_1.data instanceof TFloat)) { + if (!(this._operand_1.data instanceof TInt || this._operand_1.data instanceof TFloat)) { throw Error(`Invalid argument: "operand_1" can only be of type TInt or TFloat`); } - if (!(this.operand_2.data instanceof TInt || this.operand_2.data instanceof TFloat)) { + if (!(this._operand_2.data instanceof TInt || this._operand_2.data instanceof TFloat)) { throw Error(`Invalid argument: "operand_2" can only be of type TInt or TFloat`); } switch (this._operator) { case '==': - return TFloat.equals(this.operand_1.data, this.operand_2.data); + return TFloat.equals(this._operand_1.data, this._operand_2.data); case '>': - return TFloat.greaterThan(this.operand_1.data, this.operand_2.data); + return TFloat.greaterThan(this._operand_1.data, this._operand_2.data); case '<': - return TFloat.lessThan(this.operand_1.data, this.operand_2.data); + return TFloat.lessThan(this._operand_1.data, this._operand_2.data); default: throw Error(`Invalid access: this should not be reachable`); } @@ -179,23 +179,23 @@ export namespace OperationElement { } get data(): TBoolean { - if (this.operand_1 === null) { + if (this._operand_1 === null) { throw Error(`Invalid argument: "operand_1" cannot be null`); } - if (this.operand_2 === null) { + if (this._operand_2 === null) { throw Error(`Invalid argument: "operand_2" cannot be null`); } - if (!(this.operand_1.data instanceof TBoolean)) { + if (!(this._operand_1.data instanceof TBoolean)) { throw Error(`Invalid argument: "operand_1" can only be of type TBoolean`); } - if (!(this.operand_2.data instanceof TBoolean)) { + if (!(this._operand_2.data instanceof TBoolean)) { throw Error(`Invalid argument: "operand_2" can only be of type TBoolean`); } switch (this._operator) { case '&&': - return TBoolean.and(this.operand_1.data, this.operand_2.data); + return TBoolean.and(this._operand_1.data, this._operand_2.data); case '||': - return TBoolean.or(this.operand_1.data, this.operand_2.data); + return TBoolean.or(this._operand_1.data, this._operand_2.data); default: throw Error(`Invalid access: this should not be reachable`); } From b316cb2cfa74dcfa7643022de931ee259aab328d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 19:31:46 +0530 Subject: [PATCH 026/176] Rename BoxElement to DataElement --- .../programElements/dataElements.test.ts | 118 ++++++++---------- .../programElements/dataElements.ts | 55 ++++---- 2 files changed, 73 insertions(+), 100 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/dataElements.test.ts b/src/.prototype/syntaxElements/programElements/dataElements.test.ts index c97953b..a530b1e 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.test.ts @@ -1,16 +1,12 @@ -import { StatementElement } from '../structureElements'; -import { BoxElement } from './dataElements'; +import { DataElement } from './dataElements'; import { ValueElement } from './valueElements'; -describe('namespace BoxElement', () => { - let boxElem: StatementElement; - - test('inititalize IntBoxElement with IntElement object and verify', () => { - boxElem = new BoxElement.IntBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.IntElement(5) - }); - const arg = boxElem.args.getArg('value'); +describe('namespace DataElement', () => { + test('inititalize IntDataElement with IntElement object and verify', () => { + const dataElem = new DataElement.IntDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.IntElement(5); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe(5); } else { @@ -18,21 +14,19 @@ describe('namespace BoxElement', () => { } }); - test('initialize IntBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + test('initialize IntDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { - boxElem = new BoxElement.IntBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.TrueElement() - }); + const dataElem = new DataElement.IntDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); }); - test('inititalize FloatBoxElement with FloatElement object and verify', () => { - boxElem = new BoxElement.FloatBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.FloatElement(5.234) - }); - const arg = boxElem.args.getArg('value'); + test('inititalize FloatDataElement with FloatElement object and verify', () => { + const dataElem = new DataElement.FloatDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.FloatElement(5.234); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe(5.234); } else { @@ -40,21 +34,19 @@ describe('namespace BoxElement', () => { } }); - test('initialize FloatBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + test('initialize FloatDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { - boxElem = new BoxElement.FloatBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.TrueElement() - }); + const dataElem = new DataElement.FloatDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); }); - test('inititalize CharBoxElement with CharElement object and verify', () => { - boxElem = new BoxElement.CharBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.CharElement(97) - }); - const arg = boxElem.args.getArg('value'); + test('inititalize CharDataElement with CharElement object and verify', () => { + const dataElem = new DataElement.CharDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.CharElement(97); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe('a'); } else { @@ -62,21 +54,19 @@ describe('namespace BoxElement', () => { } }); - test('initialize CharBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + test('initialize CharDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { - boxElem = new BoxElement.CharBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.TrueElement() - }); + const dataElem = new DataElement.CharDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); }); - test('inititalize StringBoxElement with StringElement object and verify', () => { - boxElem = new BoxElement.StringBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.StringElement('string') - }); - const arg = boxElem.args.getArg('value'); + test('inititalize StringDataElement with StringElement object and verify', () => { + const dataElem = new DataElement.StringDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.StringElement('string'); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe('string'); } else { @@ -84,21 +74,19 @@ describe('namespace BoxElement', () => { } }); - test('initialize StringBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + test('initialize StringDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { - boxElem = new BoxElement.StringBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.TrueElement() - }); + const dataElem = new DataElement.StringDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); }); - test('inititalize BooleanBoxElement with BooleanElement object and verify', () => { - boxElem = new BoxElement.BooleanBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.TrueElement() - }); - const arg = boxElem.args.getArg('value'); + test('inititalize BooleanDataElement with BooleanElement object and verify', () => { + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe(true); } else { @@ -106,21 +94,19 @@ describe('namespace BoxElement', () => { } }); - test('initialize BooleanBoxElement with ArgumentElement object of unaccepted return-type and expect error', () => { + test('initialize BooleanDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { - boxElem = new BoxElement.BooleanBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.IntElement(5) - }); + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.IntElement(5); }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); }); - test('inititalize AnyBoxElement with StringElement object and verify', () => { - boxElem = new BoxElement.AnyBoxElement({ - identifier: new ValueElement.StringElement('myBox'), - value: new ValueElement.StringElement('any') - }); - const arg = boxElem.args.getArg('value'); + test('inititalize AnyDataElement with StringElement object and verify', () => { + const dataElem = new DataElement.AnyDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.StringElement('any'); + const arg = dataElem.args.getArg('value'); if (arg !== null) { expect(arg.data.value).toBe('any'); } else { diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts index fbd2a01..3cf52d5 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -3,20 +3,13 @@ import { ArgumentElement, StatementElement } from '../structureElements'; type argType = ArgumentElement | null; -export namespace BoxElement { - class BoxElement extends StatementElement { - /** @throws Invalid argument */ - constructor( - identifier: string, - valueConstraints: TPrimitiveName[], - arg: { identifier: argType; value: argType } - ) { +export namespace DataElement { + class DataElement extends StatementElement { + constructor(identifier: string, valueConstraints: TPrimitiveName[]) { super(identifier, { identifier: ['TString'], value: valueConstraints }); - this.args.setArg('identifier', arg.identifier); - this.args.setArg('value', arg.value); } /** @throws Invalid argument */ @@ -41,45 +34,39 @@ export namespace BoxElement { onVisit() {} } - export class IntBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-int', ['TInt'], arg); + export class IntDataElement extends DataElement { + constructor() { + super('data-int', ['TInt']); } } - export class FloatBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-float', ['TFloat'], arg); + export class FloatDataElement extends DataElement { + constructor() { + super('data-float', ['TFloat']); } } - export class CharBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-char', ['TChar'], arg); + export class CharDataElement extends DataElement { + constructor() { + super('data-char', ['TChar']); } } - export class StringBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-string', ['TString'], arg); + export class StringDataElement extends DataElement { + constructor() { + super('data-string', ['TString']); } } - export class BooleanBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-boolean', ['TBoolean'], arg); + export class BooleanDataElement extends DataElement { + constructor() { + super('data-boolean', ['TBoolean']); } } - export class AnyBoxElement extends BoxElement { - /** @throws Invalid argument */ - constructor(arg: { identifier: argType; value: argType }) { - super('box-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'], arg); + export class AnyDataElement extends DataElement { + constructor() { + super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); } } } From 4e4b072af250e814a8d196b636a199b35dcb070d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 19:50:04 +0530 Subject: [PATCH 027/176] Add update method for value elements --- .../programElements/valueElements.test.ts | 65 ++++++++++++++----- .../programElements/valueElements.ts | 16 +++++ 2 files changed, 65 insertions(+), 16 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/valueElements.test.ts b/src/.prototype/syntaxElements/programElements/valueElements.test.ts index d2ea6b8..6f6a992 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.test.ts @@ -1,22 +1,55 @@ import { ValueElement } from './valueElements'; describe('namespace ValueElement', () => { - test('instantiate a IntElement with 5 and expect 5 to be data', () => { - expect(new ValueElement.IntElement(5).data.value).toBe(5); - }); - test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { - expect(new ValueElement.FloatElement(2.71828).data.value).toBe(2.71828); - }); - test('instantiate a CharElement with 97 and expect "a" to be data', () => { - expect(new ValueElement.CharElement(97).data.value).toBe('a'); - }); - test('instantiate a StringElement with "string" and expect "string" to be data', () => { - expect(new ValueElement.StringElement('string').data.value).toBe('string'); - }); - test('instantiate a TrueElement and expect true to be data', () => { - expect(new ValueElement.TrueElement().data.value).toBe(true); + let intValElem: ValueElement.IntElement; + let floatValElem: ValueElement.FloatElement; + let charValElem: ValueElement.CharElement; + let stringValElem: ValueElement.StringElement; + + describe('instantiation and value verification', () => { + test('instantiate a IntElement with 5 and expect 5 to be data', () => { + intValElem = new ValueElement.IntElement(5); + expect(intValElem.data.value).toBe(5); + }); + test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { + floatValElem = new ValueElement.FloatElement(2.71828); + expect(floatValElem.data.value).toBe(2.71828); + }); + test('instantiate a CharElement with 97 and expect "a" to be data', () => { + charValElem = new ValueElement.CharElement(97); + expect(charValElem.data.value).toBe('a'); + }); + test('instantiate a StringElement with "string" and expect "string" to be data', () => { + stringValElem = new ValueElement.StringElement('string'); + expect(stringValElem.data.value).toBe('string'); + }); + test('instantiate a TrueElement and expect true to be data', () => { + expect(new ValueElement.TrueElement().data.value).toBe(true); + }); + test('instantiate a FalseElement and expect false to be data', () => { + expect(new ValueElement.FalseElement().data.value).toBe(false); + }); }); - test('instantiate a FalseElement and expect false to be data', () => { - expect(new ValueElement.FalseElement().data.value).toBe(false); + + describe('value updation', () => { + test('update IntElement value to 2 and expect 2 to be data', () => { + intValElem.update(2); + expect(intValElem.data.value).toBe(2); + }); + + test('update FloatElement value to 3.1415 and expect 3.1415 to be data', () => { + floatValElem.update(3.1415); + expect(floatValElem.data.value).toBe(3.1415); + }); + + test('update CharElement value to "x" and expect "x" to be data', () => { + charValElem.update('x'); + expect(charValElem.data.value).toBe('x'); + }); + + test('update StringElement value to "another" and expect "another" to be data', () => { + stringValElem.update('another'); + expect(stringValElem.data.value).toBe('another'); + }); }); }); diff --git a/src/.prototype/syntaxElements/programElements/valueElements.ts b/src/.prototype/syntaxElements/programElements/valueElements.ts index 9435d47..cec41ff 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.ts @@ -10,6 +10,10 @@ export namespace ValueElement { constructor(value: number) { super('int', new TInt(value)); } + + update(value: number) { + this.data.value = value; + } } /** ArgumentDataElement wrapper for primitive TFloat type. */ @@ -17,6 +21,10 @@ export namespace ValueElement { constructor(value: number) { super('float', new TFloat(value)); } + + update(value: number) { + this.data.value = value; + } } /** ArgumentDataElement wrapper for primitive TChar type. */ @@ -24,6 +32,10 @@ export namespace ValueElement { constructor(value: string | number) { super('char', new TChar(value)); } + + update(value: string | number) { + this.data.value = value; + } } /** ArgumentDataElement wrapper for primitive TString type. */ @@ -31,6 +43,10 @@ export namespace ValueElement { constructor(value: string) { super('string', new TString(value)); } + + update(value: string) { + this.data.value = value; + } } /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ From b0841d62f1728d4ff49da032372ccec5e59843c4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 21:55:03 +0530 Subject: [PATCH 028/176] Add conditional elements --- .../@types/structureElements.d.ts | 6 +- .../conditionalElements.test.ts | 78 +++++++++++++++++++ .../programElements/conditionalElements.ts | 28 +++++++ .../syntaxElements/structureElements.test.ts | 6 +- .../syntaxElements/structureElements.ts | 36 +++++++-- 5 files changed, 142 insertions(+), 12 deletions(-) create mode 100644 src/.prototype/syntaxElements/programElements/conditionalElements.test.ts create mode 100644 src/.prototype/syntaxElements/programElements/conditionalElements.ts diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntaxElements/@types/structureElements.d.ts index 8f38ce0..8999646 100644 --- a/src/.prototype/syntaxElements/@types/structureElements.d.ts +++ b/src/.prototype/syntaxElements/@types/structureElements.d.ts @@ -80,8 +80,10 @@ export interface IStatementElement extends IInstructionElement {} * instructions. */ export interface IBlockElement extends IInstructionElement { - /** Stores the references to the head instruction inside the logical code block/s. */ - childHeads: (IInstructionElement | null)[]; + /** Sets the reference to the ith head instruction inside the logical code block/s. */ + setChildHead: Function; + /** Returns the reference to the ith head instruction inside the logical code block/s. */ + getChildHead: (index: number) => IInstructionElement | null; /** Initial head instruction. */ childHead: IInstructionElement | null; } diff --git a/src/.prototype/syntaxElements/programElements/conditionalElements.test.ts b/src/.prototype/syntaxElements/programElements/conditionalElements.test.ts new file mode 100644 index 0000000..dbc1e4d --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/conditionalElements.test.ts @@ -0,0 +1,78 @@ +import { ConditionalElement } from './conditionalElements'; +import { StatementElement } from '../structureElements'; +import { ValueElement } from './valueElements'; + +/** Dummy class to extend abstract class StatementElement. */ +class CStatementElement extends StatementElement { + onVisit() {} +} + +describe('namespace ConditionalElement', () => { + const statement_1 = new CStatementElement('statement-1'); + const statement_2 = new CStatementElement('statement-2'); + + describe('class IfElseElement', () => { + const ifElseElem = new ConditionalElement.IfElseElement(); + ifElseElem.setChildHead(0, statement_1); + ifElseElem.setChildHead(1, statement_2); + + test("pass a valid true condition and expect childHead to be first block's head", () => { + ifElseElem.args.setArg('condition', new ValueElement.TrueElement()); + ifElseElem.onVisit(); + const childHead = ifElseElem.childHead; + if (childHead !== null) { + expect(childHead.elementName).toBe('statement-1'); + } else { + throw Error('Object should not be null'); + } + }); + + test("pass a valid false condition and expect childHead to be second block's head", () => { + ifElseElem.args.setArg('condition', new ValueElement.FalseElement()); + ifElseElem.onVisit(); + const childHead = ifElseElem.childHead; + if (childHead !== null) { + expect(childHead.elementName).toBe('statement-2'); + } else { + throw Error('Object should not be null'); + } + }); + + test('pass a null as condition and expect error', () => { + ifElseElem.args.setArg('condition', null); + expect(() => ifElseElem.onVisit()).toThrowError( + 'Invalid argument: condition cannot be null' + ); + }); + }); + + describe('class IfThenElement', () => { + const IfThenElem = new ConditionalElement.IfThenElement(); + IfThenElem.setChildHead(0, statement_1); + + test("pass a valid true condition and expect childHead to be first block's head", () => { + IfThenElem.args.setArg('condition', new ValueElement.TrueElement()); + IfThenElem.onVisit(); + const childHead = IfThenElem.childHead; + if (childHead !== null) { + expect(childHead.elementName).toBe('statement-1'); + } else { + throw Error('Object should not be null'); + } + }); + + test('pass a valid false condition and expect childHead to be null', () => { + IfThenElem.args.setArg('condition', new ValueElement.FalseElement()); + IfThenElem.onVisit(); + const childHead = IfThenElem.childHead; + expect(childHead).toBe(null); + }); + + test('pass a null as condition and expect error', () => { + IfThenElem.args.setArg('condition', null); + expect(() => IfThenElem.onVisit()).toThrowError( + 'Invalid argument: condition cannot be null' + ); + }); + }); +}); diff --git a/src/.prototype/syntaxElements/programElements/conditionalElements.ts b/src/.prototype/syntaxElements/programElements/conditionalElements.ts new file mode 100644 index 0000000..653b09e --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/conditionalElements.ts @@ -0,0 +1,28 @@ +import { BlockElement } from '../structureElements'; + +export namespace ConditionalElement { + export class IfElseElement extends BlockElement { + constructor(elementName?: 'if') { + super(elementName !== undefined ? elementName : 'if-else', 2, { + condition: ['TBoolean'] + }); + } + + /** @throws Invalid argument */ + onVisit() { + const arg = this.args.getArg('condition'); + if (arg === null) { + throw Error('Invalid argument: condition cannot be null'); + } + this.childHead = this.getChildHead(arg.data.value ? 0 : 1); + } + + onExit() {} + } + + export class IfThenElement extends IfElseElement { + constructor() { + super('if'); + } + } +} diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index f6d8900..b5a4b11 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -143,7 +143,7 @@ describe('class BlockElement', () => { let blockElem: BlockElement; test('initialize object with argument constraints and verify initial contents', () => { - blockElem = new CBlockElement('myBlock', { arg_1: ['TBoolean'] }); + blockElem = new CBlockElement('myBlock', 1, { arg_1: ['TBoolean'] }); expect(blockElem.next).toBe(null); if (blockElem.args !== null) { expect(blockElem.args.argNames).toEqual(['arg_1']); @@ -155,8 +155,8 @@ describe('class BlockElement', () => { // Rest are same as (above) StatementElement tests, therefore redundant to add. test('assign an instruction to innerHeads and verify', () => { - blockElem.childHeads = [stmntElem]; - const head = blockElem.childHeads[0]; + blockElem.setChildHead(0, stmntElem); + const head = blockElem.getChildHead(0); if (head !== null) { expect(head.elementName).toBe('myStatement'); } diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index ecc88e9..aee60e3 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -199,19 +199,41 @@ export abstract class StatementElement extends InstructionElement implements TS. } export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { - private _childHeads: (InstructionElement | null)[] = [null]; - private _childHead: InstructionElement | null = null; + private _blocksCount: number; + private _childHeads: (InstructionElement | null)[] = []; + private _childHead: InstructionElement | null; - constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { + /** @throws Invalid argument */ + constructor( + elementName: string, + blocksCount: number, + constraints?: { [key: string]: TPrimitiveName[] } + ) { super(elementName, constraints); + if (blocksCount < 1) { + throw Error('Invalid argument: number of inner blocks cannot be less than 1'); + } + this._blocksCount = blocksCount; + for (let i = 0; i < blocksCount; i++) { + this._childHeads.push(null); + } + this._childHead = this._childHeads[0]; } - set childHeads(innerHeads: (InstructionElement | null)[]) { - this._childHeads = innerHeads; + /** @throws Invalid argument */ + setChildHead(index: number, childHead: InstructionElement | null) { + if (index < 0 || index >= this._blocksCount) { + throw Error(`Invalid argument: index must lie in [0, ${this._blocksCount - 1}]`); + } + this._childHeads[index] = childHead; } - get childHeads() { - return this._childHeads; + /** @throws Invalid argument */ + getChildHead(index: number) { + if (index < 0 || index >= this._blocksCount) { + throw Error(`Invalid argument: index must lie in [0, ${this._blocksCount - 1}]`); + } + return this._childHeads[index]; } set childHead(childHead: InstructionElement | null) { From bad3f1622c7ac042f9b523ef8d51e3e59ce89c88 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 24 Jan 2021 22:35:18 +0530 Subject: [PATCH 029/176] Add loop elements --- .../programElements/loopElements.test.ts | 33 ++++++++++++++ .../programElements/loopElements.ts | 45 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/.prototype/syntaxElements/programElements/loopElements.test.ts create mode 100644 src/.prototype/syntaxElements/programElements/loopElements.ts diff --git a/src/.prototype/syntaxElements/programElements/loopElements.test.ts b/src/.prototype/syntaxElements/programElements/loopElements.test.ts new file mode 100644 index 0000000..7e51a99 --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/loopElements.test.ts @@ -0,0 +1,33 @@ +import { LoopElement } from './loopElements'; +import { ValueElement } from './valueElements'; + +describe('namespace LoopElement', () => { + describe('class RepeatLoopElement', () => { + const repeatElem = new LoopElement.RepeatLoopElement(); + + test('Repeat 3 times while expecting next instruction to be itself twice and null after 3rd iteration', () => { + repeatElem.argValue = new ValueElement.IntElement(3); + for (let i = 0; i < 2; i++) { + repeatElem.onVisit(); + repeatElem.onExit(); + expect(repeatElem.next).toEqual(repeatElem); + } + repeatElem.onVisit(); + repeatElem.onExit(); + expect(repeatElem.next).toBe(null); + }); + + test('Repeat with a null value and expect error', () => { + repeatElem.argValue = null; + expect(() => repeatElem.onVisit()).toThrowError( + 'Invalid argument: Repeat loop needs a positive value' + ); + }); + + test('Attempt to assign a negative value to repeat and expect error', () => { + expect(() => (repeatElem.argValue = new ValueElement.IntElement(-5))).toThrowError( + 'Invalid argument: Repeat loop needs a positive value' + ); + }); + }); +}); diff --git a/src/.prototype/syntaxElements/programElements/loopElements.ts b/src/.prototype/syntaxElements/programElements/loopElements.ts new file mode 100644 index 0000000..d9cbb04 --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/loopElements.ts @@ -0,0 +1,45 @@ +import { TInt } from '../primitiveElements'; +import { ArgumentElement, BlockElement, InstructionElement } from '../structureElements'; + +export namespace LoopElement { + export class RepeatLoopElement extends BlockElement { + private _nextStore: InstructionElement | null; + private _counter: number = 0; + + constructor() { + super('repeat', 1, { + value: ['TInt'] + }); + this._nextStore = this.next; + } + + set argValue(value: ArgumentElement | null) { + if (value !== null) { + const data = value.data as TInt; + if (data.value < 0) { + throw Error('Invalid argument: Repeat loop needs a positive value'); + } + this._counter = data.value; + } else { + this._counter = 0; + } + this.args.setArg('value', value); + } + + onVisit() { + const arg = this.args.getArg('value'); + if (arg === null) { + throw Error('Invalid argument: Repeat loop needs a positive value'); + } + } + + onExit() { + this._counter--; + if (this._counter > 0) { + this.next = this; + } else { + this.next = this._nextStore; + } + } + } +} From b6d9fb64ad0959e1e04695e210fa37aa33094edd Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 25 Jan 2021 01:16:03 +0530 Subject: [PATCH 030/176] Create value element on running data element and link value element --- .../programElements/dataElements.test.ts | 334 +++++++++++++----- .../programElements/dataElements.ts | 95 ++++- .../programElements/valueElements.ts | 38 +- 3 files changed, 370 insertions(+), 97 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/dataElements.test.ts b/src/.prototype/syntaxElements/programElements/dataElements.test.ts index a530b1e..3325f89 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.test.ts @@ -2,115 +2,273 @@ import { DataElement } from './dataElements'; import { ValueElement } from './valueElements'; describe('namespace DataElement', () => { - test('inititalize IntDataElement with IntElement object and verify', () => { - const dataElem = new DataElement.IntDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.IntElement(5); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe(5); - } else { - throw Error('Object should not be null'); - } - }); - - test('initialize IntDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { + describe('initialization and verification', () => { + test('initialize IntDataElement with IntElement object and verify', () => { const dataElem = new DataElement.IntDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); - }); + dataElem.argValue = new ValueElement.IntElement(5); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(5); + } else { + throw Error('Object should not be null'); + } + }); - test('inititalize FloatDataElement with FloatElement object and verify', () => { - const dataElem = new DataElement.FloatDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.FloatElement(5.234); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe(5.234); - } else { - throw Error('Object should not be null'); - } - }); + test('initialize IntDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + const dataElem = new DataElement.IntDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); - test('initialize FloatDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { + test('initialize FloatDataElement with FloatElement object and verify', () => { const dataElem = new DataElement.FloatDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); - }); + dataElem.argValue = new ValueElement.FloatElement(5.234); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(5.234); + } else { + throw Error('Object should not be null'); + } + }); - test('inititalize CharDataElement with CharElement object and verify', () => { - const dataElem = new DataElement.CharDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.CharElement(97); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe('a'); - } else { - throw Error('Object should not be null'); - } - }); + test('initialize FloatDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + const dataElem = new DataElement.FloatDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); - test('initialize CharDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { + test('initialize CharDataElement with CharElement object and verify', () => { const dataElem = new DataElement.CharDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.CharElement(97); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('a'); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize CharDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + const dataElem = new DataElement.CharDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('initialize StringDataElement with StringElement object and verify', () => { + const dataElem = new DataElement.StringDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.StringElement('string'); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('string'); + } else { + throw Error('Object should not be null'); + } + }); + + test('initialize StringDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + const dataElem = new DataElement.StringDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.TrueElement(); + }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }); + + test('initialize BooleanDataElement with BooleanElement object and verify', () => { + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); - }); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe(true); + } else { + throw Error('Object should not be null'); + } + }); - test('inititalize StringDataElement with StringElement object and verify', () => { - const dataElem = new DataElement.StringDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.StringElement('string'); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe('string'); - } else { - throw Error('Object should not be null'); - } + test('initialize BooleanDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { + expect(() => { + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.IntElement(5); + }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); + }); + + test('initialize AnyDataElement with StringElement object and verify', () => { + const dataElem = new DataElement.AnyDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.StringElement('any'); + const arg = dataElem.args.getArg('value'); + if (arg !== null) { + expect(arg.data.value).toBe('any'); + } else { + throw Error('Object should not be null'); + } + }); }); - test('initialize StringDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { + describe('value element verification', () => { + test('verify created ValueElement after executing a IntDataElement', () => { + const dataElem = new DataElement.IntDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.IntElement(5); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.IntElement).toBe(true); + expect(valueElement.data.value).toBe(5); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); + + test('attempt to execute a IntDataElement while assigning a null as value and expect error', () => { + const dataElem = new DataElement.IntDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); + + test('verify created ValueElement after executing a FloatDataElement', () => { + const dataElem = new DataElement.FloatDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.FloatElement(2.71828); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.FloatElement).toBe(true); + expect(valueElement.data.value).toBe(2.71828); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); + + test('attempt to execute a FloatDataElement while assigning a null as value and expect error', () => { + const dataElem = new DataElement.FloatDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); + + test('verify created ValueElement after executing a CharDataElement', () => { + const dataElem = new DataElement.CharDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.CharElement(97); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.CharElement).toBe(true); + expect(valueElement.data.value).toBe('a'); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); + + test('attempt to execute a CharDataElement while assigning a null as value and expect error', () => { + const dataElem = new DataElement.CharDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); + + test('verify created ValueElement after executing a StringDataElement', () => { const dataElem = new DataElement.StringDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.StringElement('string'); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.StringElement).toBe(true); + expect(valueElement.data.value).toBe('string'); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); + + test('attempt to execute a StringDataElement while assigning a null as value and expect error', () => { + const dataElem = new DataElement.StringDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); + + test('verify created ValueElement after executing a BooleanDataElement with TrueElement', () => { + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); - }); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.TrueElement).toBe(true); + expect(valueElement.data.value).toBe(true); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); - test('inititalize BooleanDataElement with BooleanElement object and verify', () => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe(true); - } else { - throw Error('Object should not be null'); - } - }); + test('verify created ValueElement after executing a BooleanDataElement with FalseElement', () => { + const dataElem = new DataElement.BooleanDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.FalseElement(); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.FalseElement).toBe(true); + expect(valueElement.data.value).toBe(false); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); - test('initialize BooleanDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { + test('attempt to execute a BooleanDataElement while assigning a null as value and expect error', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.IntElement(5); - }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); - }); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); - test('inititalize AnyDataElement with StringElement object and verify', () => { - const dataElem = new DataElement.AnyDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.StringElement('any'); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe('any'); - } else { - throw Error('Object should not be null'); - } + test('verify created ValueElement after executing a AnyDataElement', () => { + const dataElem = new DataElement.AnyDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = new ValueElement.FalseElement(); + dataElem.onVisit(); + const valueElement = dataElem.valueElement; + if (valueElement !== null) { + expect(valueElement instanceof ValueElement.FalseElement).toBe(true); + expect(valueElement.data.value).toBe(false); + const dataElement = valueElement.dataElement; + expect(dataElement).toEqual(dataElem); + } else { + throw Error('Object should not be null'); + } + }); + + test('attempt to execute a AnyDataElement while assigning a null as value and expect error', () => { + const dataElem = new DataElement.AnyDataElement(); + dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + dataElem.argValue = null; + expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + }); }); }); diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts index 3cf52d5..6006215 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -1,10 +1,21 @@ import { TPrimitiveName } from '../@types/primitiveTypes'; +import { TChar, TFloat, TInt, TString } from '../primitiveElements'; import { ArgumentElement, StatementElement } from '../structureElements'; +import { ValueElement } from './valueElements'; type argType = ArgumentElement | null; +type valueType = + | ValueElement.IntElement + | ValueElement.FloatElement + | ValueElement.CharElement + | ValueElement.StringElement + | ValueElement.TrueElement + | ValueElement.FalseElement; export namespace DataElement { - class DataElement extends StatementElement { + abstract class DataElement extends StatementElement { + protected _valueElement: valueType | null = null; + constructor(identifier: string, valueConstraints: TPrimitiveName[]) { super(identifier, { identifier: ['TString'], @@ -30,43 +41,121 @@ export namespace DataElement { return this.args.getArg('value'); } - /** @todo: Implement this after creating Synbol Table. */ - onVisit() {} + get valueElement() { + return this._valueElement; + } + + abstract onVisit(): void; } export class IntDataElement extends DataElement { constructor() { super('data-int', ['TInt']); } + + onVisit() { + const arg = this.argValue; + if (arg === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + this._valueElement = new ValueElement.IntElement((arg.data as TInt).value); + this._valueElement.dataElement = this; + } + } } export class FloatDataElement extends DataElement { constructor() { super('data-float', ['TFloat']); } + + onVisit() { + const arg = this.argValue; + if (arg === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + this._valueElement = new ValueElement.FloatElement((arg.data as TFloat).value); + this._valueElement.dataElement = this; + } + } } export class CharDataElement extends DataElement { constructor() { super('data-char', ['TChar']); } + + onVisit() { + const arg = this.argValue; + if (arg === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + this._valueElement = new ValueElement.CharElement((arg.data as TChar).value); + this._valueElement.dataElement = this; + } + } } export class StringDataElement extends DataElement { constructor() { super('data-string', ['TString']); } + + onVisit() { + const arg = this.argValue; + if (arg === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + this._valueElement = new ValueElement.StringElement((arg.data as TString).value); + this._valueElement.dataElement = this; + } + } } export class BooleanDataElement extends DataElement { constructor() { super('data-boolean', ['TBoolean']); } + + onVisit() { + const arg = this.argValue; + if (arg === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + this._valueElement = arg.data.value + ? new ValueElement.TrueElement() + : new ValueElement.FalseElement(); + this._valueElement.dataElement = this; + } + } } export class AnyDataElement extends DataElement { constructor() { super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); } + + onVisit() { + const argValue = this.argValue; + if (argValue === null) { + throw Error('Invalid argument: value cannot be null'); + } else { + const arg = argValue.data; + if (arg instanceof TInt) { + this._valueElement = new ValueElement.IntElement(arg.value); + } else if (arg instanceof TFloat) { + this._valueElement = new ValueElement.FloatElement(arg.value); + } else if (arg instanceof TChar) { + this._valueElement = new ValueElement.CharElement(arg.value); + } else if (arg instanceof TString) { + this._valueElement = new ValueElement.StringElement(arg.value); + } else { + this._valueElement = arg.value + ? new ValueElement.TrueElement() + : new ValueElement.FalseElement(); + } + this._valueElement.dataElement = this; + } + } } } diff --git a/src/.prototype/syntaxElements/programElements/valueElements.ts b/src/.prototype/syntaxElements/programElements/valueElements.ts index cec41ff..b1e16bc 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.ts @@ -1,12 +1,38 @@ +import { TPrimitive } from '../@types/primitiveTypes'; import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; import { ArgumentDataElement } from '../structureElements'; +import { DataElement } from './dataElements'; + +type dataElemType = + | DataElement.IntDataElement + | DataElement.FloatDataElement + | DataElement.CharDataElement + | DataElement.StringDataElement + | DataElement.BooleanDataElement + | DataElement.AnyDataElement; /** * @abstract All ValueElements are ArgumentDataElements. */ export namespace ValueElement { + abstract class ValueElement extends ArgumentDataElement { + private _dataElem: dataElemType | null = null; + + constructor(elementName: string, data: TPrimitive) { + super(elementName, data); + } + + set dataElement(dataElement: dataElemType | null) { + this._dataElem = dataElement; + } + + get dataElement() { + return this._dataElem; + } + } + /** ArgumentDataElement wrapper for primitive TInt type. */ - export class IntElement extends ArgumentDataElement { + export class IntElement extends ValueElement { constructor(value: number) { super('int', new TInt(value)); } @@ -17,7 +43,7 @@ export namespace ValueElement { } /** ArgumentDataElement wrapper for primitive TFloat type. */ - export class FloatElement extends ArgumentDataElement { + export class FloatElement extends ValueElement { constructor(value: number) { super('float', new TFloat(value)); } @@ -28,7 +54,7 @@ export namespace ValueElement { } /** ArgumentDataElement wrapper for primitive TChar type. */ - export class CharElement extends ArgumentDataElement { + export class CharElement extends ValueElement { constructor(value: string | number) { super('char', new TChar(value)); } @@ -39,7 +65,7 @@ export namespace ValueElement { } /** ArgumentDataElement wrapper for primitive TString type. */ - export class StringElement extends ArgumentDataElement { + export class StringElement extends ValueElement { constructor(value: string) { super('string', new TString(value)); } @@ -50,14 +76,14 @@ export namespace ValueElement { } /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ - export class TrueElement extends ArgumentDataElement { + export class TrueElement extends ValueElement { constructor() { super('true', new TBoolean(true)); } } /** ArgumentDataElement wrapper for primitive TBoolean(false) type. */ - export class FalseElement extends ArgumentDataElement { + export class FalseElement extends ValueElement { constructor() { super('false', new TBoolean(false)); } From 8df413672d498571cd7113ee0944d757bd15c610 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 13:05:30 +0530 Subject: [PATCH 031/176] Add setter and getter for argument --- .../programElements/conditionalElements.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/.prototype/syntaxElements/programElements/conditionalElements.ts b/src/.prototype/syntaxElements/programElements/conditionalElements.ts index 653b09e..83c6d6c 100644 --- a/src/.prototype/syntaxElements/programElements/conditionalElements.ts +++ b/src/.prototype/syntaxElements/programElements/conditionalElements.ts @@ -1,4 +1,4 @@ -import { BlockElement } from '../structureElements'; +import { ArgumentElement, BlockElement } from '../structureElements'; export namespace ConditionalElement { export class IfElseElement extends BlockElement { @@ -8,6 +8,14 @@ export namespace ConditionalElement { }); } + set argCondition(condition: ArgumentElement | null) { + this.args.setArg('condition', condition); + } + + get argCondition() { + return this.args.getArg('condition'); + } + /** @throws Invalid argument */ onVisit() { const arg = this.args.getArg('condition'); From a36f276ceb8252099efe29392f3ce56c7e4a5903 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 13:06:10 +0530 Subject: [PATCH 032/176] Add dummy print element for demonstration --- .../programElements/miscellaneousElements.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/.prototype/syntaxElements/programElements/miscellaneousElements.ts diff --git a/src/.prototype/syntaxElements/programElements/miscellaneousElements.ts b/src/.prototype/syntaxElements/programElements/miscellaneousElements.ts new file mode 100644 index 0000000..bb4e4be --- /dev/null +++ b/src/.prototype/syntaxElements/programElements/miscellaneousElements.ts @@ -0,0 +1,25 @@ +import { ArgumentElement, StatementElement } from '../structureElements'; + +export namespace MiscellaneousElement { + export class PrintElement extends StatementElement { + constructor() { + super('print', { + message: ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'] + }); + } + + set argMessage(message: ArgumentElement | null) { + this.args.setArg('message', message); + } + + /** @todo logic to be implemented after UI is created. Currently just for demonstration. */ + onVisit() { + const arg = this.args.getArg('message'); + if (arg !== null) { + console.log(`" ${arg.data.value} "`); + } else { + console.log(`" ${null} "`); + } + } + } +} From fb28ff08297506c8ad8c7803c321d090df57d99d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 13:15:39 +0530 Subject: [PATCH 033/176] Patch repeat loop element --- .../programElements/loopElements.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/loopElements.ts b/src/.prototype/syntaxElements/programElements/loopElements.ts index d9cbb04..6186d6a 100644 --- a/src/.prototype/syntaxElements/programElements/loopElements.ts +++ b/src/.prototype/syntaxElements/programElements/loopElements.ts @@ -1,24 +1,20 @@ -import { TInt } from '../primitiveElements'; +import { TFloat, TInt } from '../primitiveElements'; import { ArgumentElement, BlockElement, InstructionElement } from '../structureElements'; export namespace LoopElement { export class RepeatLoopElement extends BlockElement { - private _nextStore: InstructionElement | null; + private _nextStore: InstructionElement | null = null; private _counter: number = 0; constructor() { super('repeat', 1, { - value: ['TInt'] + value: ['TInt', 'TFloat'] }); - this._nextStore = this.next; } set argValue(value: ArgumentElement | null) { if (value !== null) { - const data = value.data as TInt; - if (data.value < 0) { - throw Error('Invalid argument: Repeat loop needs a positive value'); - } + const data = TInt.TInt(value.data as TInt | TFloat); this._counter = data.value; } else { this._counter = 0; @@ -28,9 +24,13 @@ export namespace LoopElement { onVisit() { const arg = this.args.getArg('value'); - if (arg === null) { + if (arg === null || arg.data.value < 0) { throw Error('Invalid argument: Repeat loop needs a positive value'); } + if (this._nextStore === null) { + this._nextStore = this.next; + } + this.childHead = this.getChildHead(0); } onExit() { @@ -39,6 +39,7 @@ export namespace LoopElement { this.next = this; } else { this.next = this._nextStore; + this._nextStore = null; } } } From 1e9ec252bad46307a2628a750724338e9228cd52 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 13:35:18 +0530 Subject: [PATCH 034/176] Add data value elements --- .../programElements/valueElements.ts | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/valueElements.ts b/src/.prototype/syntaxElements/programElements/valueElements.ts index b1e16bc..0018242 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.ts @@ -1,34 +1,15 @@ import { TPrimitive } from '../@types/primitiveTypes'; import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; import { ArgumentDataElement } from '../structureElements'; -import { DataElement } from './dataElements'; - -type dataElemType = - | DataElement.IntDataElement - | DataElement.FloatDataElement - | DataElement.CharDataElement - | DataElement.StringDataElement - | DataElement.BooleanDataElement - | DataElement.AnyDataElement; /** * @abstract All ValueElements are ArgumentDataElements. */ export namespace ValueElement { abstract class ValueElement extends ArgumentDataElement { - private _dataElem: dataElemType | null = null; - constructor(elementName: string, data: TPrimitive) { super(elementName, data); } - - set dataElement(dataElement: dataElemType | null) { - this._dataElem = dataElement; - } - - get dataElement() { - return this._dataElem; - } } /** ArgumentDataElement wrapper for primitive TInt type. */ @@ -42,6 +23,13 @@ export namespace ValueElement { } } + /** Maybe merged into IntElement. */ + export class IntDataValueElement extends ValueElement { + constructor(data: TInt) { + super('data-value-int', data); + } + } + /** ArgumentDataElement wrapper for primitive TFloat type. */ export class FloatElement extends ValueElement { constructor(value: number) { @@ -53,6 +41,13 @@ export namespace ValueElement { } } + /** Maybe merged into FloatElement. */ + export class FloatDataValueElement extends ValueElement { + constructor(data: TFloat) { + super('data-value-float', data); + } + } + /** ArgumentDataElement wrapper for primitive TChar type. */ export class CharElement extends ValueElement { constructor(value: string | number) { @@ -64,6 +59,13 @@ export namespace ValueElement { } } + /** Maybe merged into CharElement. */ + export class CharDataValueElement extends ValueElement { + constructor(data: TChar) { + super('data-value-char', data); + } + } + /** ArgumentDataElement wrapper for primitive TString type. */ export class StringElement extends ValueElement { constructor(value: string) { @@ -75,6 +77,13 @@ export namespace ValueElement { } } + /** Maybe merged into StringElement. */ + export class StringDataValueElement extends ValueElement { + constructor(data: TString) { + super('data-value-string', data); + } + } + /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ export class TrueElement extends ValueElement { constructor() { @@ -88,4 +97,10 @@ export namespace ValueElement { super('false', new TBoolean(false)); } } + + export class BooleanDataValueElement extends ValueElement { + constructor(data: TBoolean) { + super('data-value-boolean', data); + } + } } From 0e016dbe02fdb2162bec88e38547186eea2b44d1 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 13:35:46 +0530 Subject: [PATCH 035/176] Add getters for data value elements and add update elements --- .../programElements/dataElements.ts | 156 +++++++++++++----- 1 file changed, 117 insertions(+), 39 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts index 6006215..0dbdc38 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -1,21 +1,18 @@ import { TPrimitiveName } from '../@types/primitiveTypes'; -import { TChar, TFloat, TInt, TString } from '../primitiveElements'; +import { TBoolean, TChar, TFloat, TInt, TString } from '../primitiveElements'; import { ArgumentElement, StatementElement } from '../structureElements'; import { ValueElement } from './valueElements'; type argType = ArgumentElement | null; -type valueType = - | ValueElement.IntElement - | ValueElement.FloatElement - | ValueElement.CharElement - | ValueElement.StringElement - | ValueElement.TrueElement - | ValueElement.FalseElement; +type dataValueType = + | ValueElement.IntDataValueElement + | ValueElement.FloatDataValueElement + | ValueElement.CharDataValueElement + | ValueElement.StringDataValueElement + | ValueElement.BooleanDataValueElement; export namespace DataElement { abstract class DataElement extends StatementElement { - protected _valueElement: valueType | null = null; - constructor(identifier: string, valueConstraints: TPrimitiveName[]) { super(identifier, { identifier: ['TString'], @@ -41,9 +38,7 @@ export namespace DataElement { return this.args.getArg('value'); } - get valueElement() { - return this._valueElement; - } + abstract get valueElement(): dataValueType | null; abstract onVisit(): void; } @@ -53,15 +48,16 @@ export namespace DataElement { super('data-int', ['TInt']); } - onVisit() { + get valueElement() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - this._valueElement = new ValueElement.IntElement((arg.data as TInt).value); - this._valueElement.dataElement = this; + return new ValueElement.IntDataValueElement(arg.data as TInt); } } + + onVisit() {} } export class FloatDataElement extends DataElement { @@ -69,15 +65,16 @@ export namespace DataElement { super('data-float', ['TFloat']); } - onVisit() { + get valueElement() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - this._valueElement = new ValueElement.FloatElement((arg.data as TFloat).value); - this._valueElement.dataElement = this; + return new ValueElement.FloatDataValueElement(arg.data as TFloat); } } + + onVisit() {} } export class CharDataElement extends DataElement { @@ -85,15 +82,16 @@ export namespace DataElement { super('data-char', ['TChar']); } - onVisit() { + get valueElement() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - this._valueElement = new ValueElement.CharElement((arg.data as TChar).value); - this._valueElement.dataElement = this; + return new ValueElement.CharDataValueElement(arg.data as TChar); } } + + onVisit() {} } export class StringDataElement extends DataElement { @@ -101,15 +99,16 @@ export namespace DataElement { super('data-string', ['TString']); } - onVisit() { + get valueElement() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - this._valueElement = new ValueElement.StringElement((arg.data as TString).value); - this._valueElement.dataElement = this; + return new ValueElement.StringDataValueElement(arg.data as TString); } } + + onVisit() {} } export class BooleanDataElement extends DataElement { @@ -117,17 +116,16 @@ export namespace DataElement { super('data-boolean', ['TBoolean']); } - onVisit() { + get valueElement() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - this._valueElement = arg.data.value - ? new ValueElement.TrueElement() - : new ValueElement.FalseElement(); - this._valueElement.dataElement = this; + return new ValueElement.BooleanDataValueElement(arg.data as TBoolean); } } + + onVisit() {} } export class AnyDataElement extends DataElement { @@ -135,27 +133,107 @@ export namespace DataElement { super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); } - onVisit() { + get valueElement() { const argValue = this.argValue; if (argValue === null) { throw Error('Invalid argument: value cannot be null'); } else { const arg = argValue.data; if (arg instanceof TInt) { - this._valueElement = new ValueElement.IntElement(arg.value); + return new ValueElement.IntDataValueElement(arg as TInt); } else if (arg instanceof TFloat) { - this._valueElement = new ValueElement.FloatElement(arg.value); + return new ValueElement.FloatDataValueElement(arg as TFloat); } else if (arg instanceof TChar) { - this._valueElement = new ValueElement.CharElement(arg.value); + return new ValueElement.CharDataValueElement(arg as TChar); } else if (arg instanceof TString) { - this._valueElement = new ValueElement.StringElement(arg.value); + return new ValueElement.StringDataValueElement(arg as TString); } else { - this._valueElement = arg.value - ? new ValueElement.TrueElement() - : new ValueElement.FalseElement(); + return new ValueElement.BooleanDataValueElement(arg as TBoolean); } - this._valueElement.dataElement = this; } } + + onVisit() {} + } + + abstract class UpdateDataElement extends StatementElement { + constructor( + elementName: string, + constraints: { + currValue: [TPrimitiveName]; + newValue: [TPrimitiveName]; + } + ) { + super(elementName, constraints); + } + + set argCurrValue(value: dataValueType | null) { + this.args.setArg('currValue', value); + } + + get argCurrValue() { + return this.args.getArg('currValue') as dataValueType; + } + + set argNewValue(value: dataValueType | null) { + this.args.setArg('newValue', value); + } + + get argNewValue() { + return this.args.getArg('newValue') as dataValueType; + } + + onVisit() { + const argCurr = this.argCurrValue; + const argNew = this.argNewValue; + if (argCurr !== null && argNew !== null) { + argCurr.data.value = argNew.data.value; + } + } + } + + export class UpdateIntDataElement extends UpdateDataElement { + constructor() { + super('update-data-int', { + currValue: ['TInt'], + newValue: ['TInt'] + }); + } + } + + export class UpdateFloatDataElement extends UpdateDataElement { + constructor() { + super('update-data-int', { + currValue: ['TFloat'], + newValue: ['TFloat'] + }); + } + } + + export class UpdateCharDataElement extends UpdateDataElement { + constructor() { + super('update-data-int', { + currValue: ['TChar'], + newValue: ['TChar'] + }); + } + } + + export class UpdateStringDataElement extends UpdateDataElement { + constructor() { + super('update-data-int', { + currValue: ['TString'], + newValue: ['TString'] + }); + } + } + + export class UpdateBooleanDataElement extends UpdateDataElement { + constructor() { + super('update-data-int', { + currValue: ['TBoolean'], + newValue: ['TBoolean'] + }); + } } } From c64cad30f17a5c1f1a1964adac268f34d17782f5 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 14:18:39 +0530 Subject: [PATCH 036/176] Make ArgumentDataElement's data getter abstract --- .../syntaxElements/structureElements.test.ts | 60 ++++++------------- .../syntaxElements/structureElements.ts | 12 +--- 2 files changed, 20 insertions(+), 52 deletions(-) diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntaxElements/structureElements.test.ts index b5a4b11..67c537b 100644 --- a/src/.prototype/syntaxElements/structureElements.test.ts +++ b/src/.prototype/syntaxElements/structureElements.test.ts @@ -7,7 +7,11 @@ import { } from './structureElements'; /** Dummy class to extend abstract class ArgumentDataElement. */ -class CArgumentDataElement extends ArgumentDataElement {} +class CArgumentDataElement extends ArgumentDataElement { + get data() { + return new TInt(5); + } +} /** Dummy class to extend abstract class ArgumentExpressionElement. */ class CArgumentExpressionElement extends ArgumentExpressionElement { get data() { @@ -24,56 +28,26 @@ class CBlockElement extends BlockElement { onExit() {} } -let argData_int: ArgumentDataElement; -let argData_float: ArgumentDataElement; -let argData_char: ArgumentDataElement; -let argData_string: ArgumentDataElement; -let argData_boolean: ArgumentDataElement; +let argData: ArgumentDataElement; let argExpr: ArgumentExpressionElement; describe('class ArgumentDataElement', () => { - test('intialize object with a TInt(5) and verify contents', () => { - argData_int = new CArgumentDataElement('myArgData', new TInt(5)); - expect(argData_int.elementName).toBe('myArgData'); - expect(argData_int.argType).toBe('data'); - expect(argData_int.data.value).toBe(5); - }); - - test('intialize object with a TFloat(3.14) and verify contents', () => { - argData_float = new CArgumentDataElement('myArgData', new TFloat(3.14)); - expect(argData_float.elementName).toBe('myArgData'); - expect(argData_float.argType).toBe('data'); - expect(argData_float.data.value).toBe(3.14); - }); - - test('intialize object with a TChar(65) and verify contents', () => { - argData_char = new CArgumentDataElement('myArgData', new TChar(65)); - expect(argData_char.elementName).toBe('myArgData'); - expect(argData_char.argType).toBe('data'); - expect(argData_char.data.value).toBe('A'); - }); - - test('intialize object with a TString("str") and verify contents', () => { - argData_string = new CArgumentDataElement('myArgData', new TString('str')); - expect(argData_string.elementName).toBe('myArgData'); - expect(argData_string.argType).toBe('data'); - expect(argData_string.data.value).toBe('str'); - }); - - test('intialize object with a TBoolean(false) and verify contents', () => { - argData_boolean = new CArgumentDataElement('myArgData', new TBoolean(false)); - expect(argData_boolean.elementName).toBe('myArgData'); - expect(argData_boolean.argType).toBe('data'); - expect(argData_boolean.data.value).toBe(false); + test("intialize dummy ArgumentDataElement's subclass with valid arbitrary arguments and verify contents", () => { + argData = new CArgumentDataElement('myArgData', 'TInt'); + expect(argData.elementName).toBe('myArgData'); + expect(argData.type).toBe('TInt'); + expect(argData.argType).toBe('data'); + expect(argData.data.value).toBe(5); }); }); describe('class ArgumentExpressionElement', () => { - test('initialize object with valid arbitrary arguments and verify contents', () => { + test("initialize dummy ArgumentExpressionElement's subclass with valid arbitrary arguments and verify contents", () => { argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); expect(argExpr.elementName).toBe('myArgExpression'); expect(argExpr.type).toBe('TInt'); expect(argExpr.argType).toBe('expression'); + expect(argExpr.data.value).toBe(5); }); }); @@ -101,10 +75,10 @@ describe('class StatementElement', () => { test('assign valid argument for valid argument label and verify', () => { try { - stmntElem.args.setArg('arg_1', argData_char); + stmntElem.args.setArg('arg_1', argData); const arg = stmntElem.args.getArg('arg_1'); if (arg !== null) { - expect(arg.data.value).toEqual('A'); + expect(arg.data.value).toEqual(5); } } catch (e) { console.error(e); @@ -133,7 +107,7 @@ describe('class StatementElement', () => { }); test('try to assign invalid return-type argument for valid argument label and expect error', () => { - expect(() => stmntElem.args.setArg('arg_2', argData_int)).toThrowError( + expect(() => stmntElem.args.setArg('arg_2', argData)).toThrowError( 'Invalid argument: "TInt" is not a valid type for "arg_2"' ); }); diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index aee60e3..7b5f873 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -126,17 +126,11 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum export abstract class ArgumentDataElement extends ArgumentElement implements TS.IArgumentDataElement { - /** Stores the primitive element that is wrapped. */ - private _dataElement: TPrimitive; - - constructor(elementName: string, dataElement: TPrimitive) { - super(elementName, 'data', dataElement.type); - this._dataElement = dataElement; + constructor(elementName: string, type: TPrimitiveName) { + super(elementName, 'data', type); } - get data() { - return this._dataElement; - } + abstract get data(): TPrimitive; } export abstract class ArgumentExpressionElement From b510de9115fdd2cc86a655e0f8416b28585176ad Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 14:32:33 +0530 Subject: [PATCH 037/176] Update shape of ValueElement and DataElement classes --- .../programElements/dataElements.test.ts | 179 ++++++++---------- .../programElements/dataElements.ts | 115 +++++++---- .../programElements/valueElements.ts | 90 +++++---- 3 files changed, 214 insertions(+), 170 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/dataElements.test.ts b/src/.prototype/syntaxElements/programElements/dataElements.test.ts index 3325f89..f3eb66c 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.test.ts @@ -103,172 +103,157 @@ describe('namespace DataElement', () => { }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); }); - test('initialize AnyDataElement with StringElement object and verify', () => { - const dataElem = new DataElement.AnyDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.StringElement('any'); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.data.value).toBe('any'); - } else { - throw Error('Object should not be null'); - } - }); + // test('initialize AnyDataElement with StringElement object and verify', () => { + // const dataElem = new DataElement.AnyDataElement(); + // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + // dataElem.argValue = new ValueElement.StringElement('any'); + // const arg = dataElem.args.getArg('value'); + // if (arg !== null) { + // expect(arg.data.value).toBe('any'); + // } else { + // throw Error('Object should not be null'); + // } + // }); }); describe('value element verification', () => { - test('verify created ValueElement after executing a IntDataElement', () => { + test('verify reference in created DataValueElement after assigning a IntDataElement', () => { const dataElem = new DataElement.IntDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.IntElement(5); - dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.IntElement).toBe(true); - expect(valueElement.data.value).toBe(5); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.IntDataValueElement).toBe(true); + expect(valueElement.data.value).toBe(5); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to execute a IntDataElement while assigning a null as value and expect error', () => { + test('attempt to fetch TInt reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.IntDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + expect(() => dataElem.dataElementRef).toThrowError( + 'Invalid argument: value cannot be null' + ); }); - test('verify created ValueElement after executing a FloatDataElement', () => { + test('verify reference in created DataValueElement after assigning a FloatDataElement', () => { const dataElem = new DataElement.FloatDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.FloatElement(2.71828); dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.FloatElement).toBe(true); - expect(valueElement.data.value).toBe(2.71828); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.FloatDataValueElement).toBe(true); + expect(valueElement.data.value).toBe(2.71828); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to execute a FloatDataElement while assigning a null as value and expect error', () => { + test('attempt to fetch TFloat reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.FloatDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + expect(() => dataElem.dataElementRef).toThrowError( + 'Invalid argument: value cannot be null' + ); }); - test('verify created ValueElement after executing a CharDataElement', () => { + test('verify reference in created DataValueElement after assigning a CharDataElement', () => { const dataElem = new DataElement.CharDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.CharElement(97); dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.CharElement).toBe(true); - expect(valueElement.data.value).toBe('a'); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); + expect(valueElement.data.value).toBe('a'); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to execute a CharDataElement while assigning a null as value and expect error', () => { + test('attempt to fetch TChar reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.CharDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + expect(() => dataElem.dataElementRef).toThrowError( + 'Invalid argument: value cannot be null' + ); }); - test('verify created ValueElement after executing a StringDataElement', () => { + test('verify reference in created DataValueElement after assigning a StringDataElement', () => { const dataElem = new DataElement.StringDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.StringElement('string'); dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.StringElement).toBe(true); - expect(valueElement.data.value).toBe('string'); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); + expect(valueElement.data.value).toBe('string'); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to execute a StringDataElement while assigning a null as value and expect error', () => { + test('attempt to fetch TString reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.StringDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + expect(() => dataElem.dataElementRef).toThrowError( + 'Invalid argument: value cannot be null' + ); }); - test('verify created ValueElement after executing a BooleanDataElement with TrueElement', () => { + test('verify reference in created DataValueElement after assigning a BooleanDataElement with TrueElement', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.TrueElement).toBe(true); - expect(valueElement.data.value).toBe(true); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); + expect(valueElement.data.value).toBe(true); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('verify created ValueElement after executing a BooleanDataElement with FalseElement', () => { + test('verify reference in created DataValueElement after assigning a BooleanDataElement with FalseElement', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.FalseElement(); dataElem.onVisit(); const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.FalseElement).toBe(true); - expect(valueElement.data.value).toBe(false); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } + expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); + expect(valueElement.data.value).toBe(false); + const dataElement = valueElement.data; + expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to execute a BooleanDataElement while assigning a null as value and expect error', () => { + test('attempt to fetch TBoolean reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + expect(() => dataElem.dataElementRef).toThrowError( + 'Invalid argument: value cannot be null' + ); }); - test('verify created ValueElement after executing a AnyDataElement', () => { - const dataElem = new DataElement.AnyDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.FalseElement(); - dataElem.onVisit(); - const valueElement = dataElem.valueElement; - if (valueElement !== null) { - expect(valueElement instanceof ValueElement.FalseElement).toBe(true); - expect(valueElement.data.value).toBe(false); - const dataElement = valueElement.dataElement; - expect(dataElement).toEqual(dataElem); - } else { - throw Error('Object should not be null'); - } - }); + // test('verify created ValueElement after executing a AnyDataElement', () => { + // const dataElem = new DataElement.AnyDataElement(); + // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + // dataElem.argValue = new ValueElement.FalseElement(); + // dataElem.onVisit(); + // const valueElement = dataElem.valueElement; + // if (valueElement !== null) { + // expect(valueElement instanceof ValueElement.FalseElement).toBe(true); + // expect(valueElement.data.value).toBe(false); + // const dataElement = valueElement.dataElement; + // expect(dataElement).toEqual(dataElem); + // } else { + // throw Error('Object should not be null'); + // } + // }); - test('attempt to execute a AnyDataElement while assigning a null as value and expect error', () => { - const dataElem = new DataElement.AnyDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; - expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); - }); + // test('attempt to execute a AnyDataElement while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.AnyDataElement(); + // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); + // dataElem.argValue = null; + // expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); + // }); }); }); diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts index 0dbdc38..77a8aef 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -1,4 +1,4 @@ -import { TPrimitiveName } from '../@types/primitiveTypes'; +import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; import { TBoolean, TChar, TFloat, TInt, TString } from '../primitiveElements'; import { ArgumentElement, StatementElement } from '../structureElements'; import { ValueElement } from './valueElements'; @@ -13,11 +13,18 @@ type dataValueType = export namespace DataElement { abstract class DataElement extends StatementElement { - constructor(identifier: string, valueConstraints: TPrimitiveName[]) { + private _type: TPrimitiveName; + + constructor(identifier: string, type: TPrimitiveName) { super(identifier, { identifier: ['TString'], - value: valueConstraints + value: [type] }); + this._type = type; + } + + get type() { + return this._type; } /** @throws Invalid argument */ @@ -38,22 +45,28 @@ export namespace DataElement { return this.args.getArg('value'); } - abstract get valueElement(): dataValueType | null; + abstract get valueElement(): dataValueType; + + abstract get dataElementRef(): TPrimitive; abstract onVisit(): void; } export class IntDataElement extends DataElement { constructor() { - super('data-int', ['TInt']); + super('data-int', 'TInt'); } get valueElement() { + return new ValueElement.IntDataValueElement(this); + } + + get dataElementRef() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - return new ValueElement.IntDataValueElement(arg.data as TInt); + return arg.data as TInt; } } @@ -62,15 +75,19 @@ export namespace DataElement { export class FloatDataElement extends DataElement { constructor() { - super('data-float', ['TFloat']); + super('data-float', 'TFloat'); } get valueElement() { + return new ValueElement.FloatDataValueElement(this); + } + + get dataElementRef() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - return new ValueElement.FloatDataValueElement(arg.data as TFloat); + return arg.data as TFloat; } } @@ -79,15 +96,19 @@ export namespace DataElement { export class CharDataElement extends DataElement { constructor() { - super('data-char', ['TChar']); + super('data-char', 'TChar'); } get valueElement() { + return new ValueElement.CharDataValueElement(this); + } + + get dataElementRef() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - return new ValueElement.CharDataValueElement(arg.data as TChar); + return arg.data as TChar; } } @@ -96,15 +117,19 @@ export namespace DataElement { export class StringDataElement extends DataElement { constructor() { - super('data-string', ['TString']); + super('data-string', 'TString'); } get valueElement() { + return new ValueElement.StringDataValueElement(this); + } + + get dataElementRef() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - return new ValueElement.StringDataValueElement(arg.data as TString); + return arg.data as TString; } } @@ -113,48 +138,56 @@ export namespace DataElement { export class BooleanDataElement extends DataElement { constructor() { - super('data-boolean', ['TBoolean']); + super('data-boolean', 'TBoolean'); } get valueElement() { + return new ValueElement.BooleanDataValueElement(this); + } + + get dataElementRef() { const arg = this.argValue; if (arg === null) { throw Error('Invalid argument: value cannot be null'); } else { - return new ValueElement.BooleanDataValueElement(arg.data as TBoolean); + return arg.data as TBoolean; } } onVisit() {} } - export class AnyDataElement extends DataElement { - constructor() { - super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); - } - - get valueElement() { - const argValue = this.argValue; - if (argValue === null) { - throw Error('Invalid argument: value cannot be null'); - } else { - const arg = argValue.data; - if (arg instanceof TInt) { - return new ValueElement.IntDataValueElement(arg as TInt); - } else if (arg instanceof TFloat) { - return new ValueElement.FloatDataValueElement(arg as TFloat); - } else if (arg instanceof TChar) { - return new ValueElement.CharDataValueElement(arg as TChar); - } else if (arg instanceof TString) { - return new ValueElement.StringDataValueElement(arg as TString); - } else { - return new ValueElement.BooleanDataValueElement(arg as TBoolean); - } - } - } - - onVisit() {} - } + // export class AnyDataElement extends DataElement { + // constructor() { + // super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); + // } + + // get valueElement() { + // return new ValueElement.IntDataValueElement(this); + // } + + // get dataElementRef() { + // const argValue = this.argValue; + // if (argValue === null) { + // throw Error('Invalid argument: value cannot be null'); + // } else { + // const arg = argValue.data; + // if (arg instanceof TInt) { + // return arg as TInt; + // } else if (arg instanceof TFloat) { + // return arg as TFloat; + // } else if (arg instanceof TChar) { + // return arg as TChar; + // } else if (arg instanceof TString) { + // return arg as TString; + // } else { + // return arg as TBoolean; + // } + // } + // } + + // onVisit() {} + // } abstract class UpdateDataElement extends StatementElement { constructor( diff --git a/src/.prototype/syntaxElements/programElements/valueElements.ts b/src/.prototype/syntaxElements/programElements/valueElements.ts index 0018242..cee6cfc 100644 --- a/src/.prototype/syntaxElements/programElements/valueElements.ts +++ b/src/.prototype/syntaxElements/programElements/valueElements.ts @@ -1,14 +1,30 @@ import { TPrimitive } from '../@types/primitiveTypes'; import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; import { ArgumentDataElement } from '../structureElements'; +import { DataElement } from './dataElements'; + +type dataElemType = + | DataElement.IntDataElement + | DataElement.FloatDataElement + | DataElement.CharDataElement + | DataElement.StringDataElement + | DataElement.BooleanDataElement; +// | DataElement.AnyDataElement; /** * @abstract All ValueElements are ArgumentDataElements. */ export namespace ValueElement { abstract class ValueElement extends ArgumentDataElement { + private _data: TPrimitive; + constructor(elementName: string, data: TPrimitive) { - super(elementName, data); + super(elementName, data.type); + this._data = data; + } + + get data() { + return this._data; } } @@ -23,13 +39,6 @@ export namespace ValueElement { } } - /** Maybe merged into IntElement. */ - export class IntDataValueElement extends ValueElement { - constructor(data: TInt) { - super('data-value-int', data); - } - } - /** ArgumentDataElement wrapper for primitive TFloat type. */ export class FloatElement extends ValueElement { constructor(value: number) { @@ -41,13 +50,6 @@ export namespace ValueElement { } } - /** Maybe merged into FloatElement. */ - export class FloatDataValueElement extends ValueElement { - constructor(data: TFloat) { - super('data-value-float', data); - } - } - /** ArgumentDataElement wrapper for primitive TChar type. */ export class CharElement extends ValueElement { constructor(value: string | number) { @@ -59,13 +61,6 @@ export namespace ValueElement { } } - /** Maybe merged into CharElement. */ - export class CharDataValueElement extends ValueElement { - constructor(data: TChar) { - super('data-value-char', data); - } - } - /** ArgumentDataElement wrapper for primitive TString type. */ export class StringElement extends ValueElement { constructor(value: string) { @@ -77,13 +72,6 @@ export namespace ValueElement { } } - /** Maybe merged into StringElement. */ - export class StringDataValueElement extends ValueElement { - constructor(data: TString) { - super('data-value-string', data); - } - } - /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ export class TrueElement extends ValueElement { constructor() { @@ -98,9 +86,47 @@ export namespace ValueElement { } } - export class BooleanDataValueElement extends ValueElement { - constructor(data: TBoolean) { - super('data-value-boolean', data); + abstract class DataValueElement extends ArgumentDataElement { + private _dataElementRef: dataElemType; + + constructor(elementName: string, dataElement: dataElemType) { + super(elementName, dataElement.type); + this._dataElementRef = dataElement; + } + + /** @override */ + get data() { + return this._dataElementRef.dataElementRef; + } + } + + export class IntDataValueElement extends DataValueElement { + constructor(dataElement: DataElement.IntDataElement) { + super('data-value-int', dataElement); + } + } + + export class FloatDataValueElement extends DataValueElement { + constructor(dataElement: DataElement.FloatDataElement) { + super('data-value-float', dataElement); + } + } + + export class CharDataValueElement extends DataValueElement { + constructor(dataElement: DataElement.CharDataElement) { + super('data-value-char', dataElement); + } + } + + export class StringDataValueElement extends DataValueElement { + constructor(dataElement: DataElement.StringDataElement) { + super('data-value-string', dataElement); + } + } + + export class BooleanDataValueElement extends DataValueElement { + constructor(dataElement: DataElement.BooleanDataElement) { + super('data-value-boolean', dataElement); } } } From 5f221c943a3041c8fdff87668aea71622edb6c20 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 15:33:15 +0530 Subject: [PATCH 038/176] Fix loop counter bug using dummy element --- .../programElements/loopElements.test.ts | 6 ----- .../programElements/loopElements.ts | 27 ++++++++++--------- .../syntaxElements/structureElements.ts | 14 ++++++++++ 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/loopElements.test.ts b/src/.prototype/syntaxElements/programElements/loopElements.test.ts index 7e51a99..8d7ecad 100644 --- a/src/.prototype/syntaxElements/programElements/loopElements.test.ts +++ b/src/.prototype/syntaxElements/programElements/loopElements.test.ts @@ -23,11 +23,5 @@ describe('namespace LoopElement', () => { 'Invalid argument: Repeat loop needs a positive value' ); }); - - test('Attempt to assign a negative value to repeat and expect error', () => { - expect(() => (repeatElem.argValue = new ValueElement.IntElement(-5))).toThrowError( - 'Invalid argument: Repeat loop needs a positive value' - ); - }); }); }); diff --git a/src/.prototype/syntaxElements/programElements/loopElements.ts b/src/.prototype/syntaxElements/programElements/loopElements.ts index 6186d6a..ad902b4 100644 --- a/src/.prototype/syntaxElements/programElements/loopElements.ts +++ b/src/.prototype/syntaxElements/programElements/loopElements.ts @@ -1,9 +1,14 @@ import { TFloat, TInt } from '../primitiveElements'; -import { ArgumentElement, BlockElement, InstructionElement } from '../structureElements'; +import { + ArgumentElement, + BlockElement, + DummyElement, + InstructionElement +} from '../structureElements'; export namespace LoopElement { export class RepeatLoopElement extends BlockElement { - private _nextStore: InstructionElement | null = null; + private _nextStore: InstructionElement | null = new DummyElement(); private _counter: number = 0; constructor() { @@ -13,12 +18,6 @@ export namespace LoopElement { } set argValue(value: ArgumentElement | null) { - if (value !== null) { - const data = TInt.TInt(value.data as TInt | TFloat); - this._counter = data.value; - } else { - this._counter = 0; - } this.args.setArg('value', value); } @@ -26,9 +25,12 @@ export namespace LoopElement { const arg = this.args.getArg('value'); if (arg === null || arg.data.value < 0) { throw Error('Invalid argument: Repeat loop needs a positive value'); - } - if (this._nextStore === null) { - this._nextStore = this.next; + } else { + // Not already repeating. + if (this._nextStore !== null && this._nextStore.isDummy) { + this._nextStore = this.next; + this._counter = arg.data.value as number; + } } this.childHead = this.getChildHead(0); } @@ -38,8 +40,9 @@ export namespace LoopElement { if (this._counter > 0) { this.next = this; } else { + // Reset values - repeat ended. this.next = this._nextStore; - this._nextStore = null; + this._nextStore = new DummyElement(); } } } diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntaxElements/structureElements.ts index 7b5f873..937289a 100644 --- a/src/.prototype/syntaxElements/structureElements.ts +++ b/src/.prototype/syntaxElements/structureElements.ts @@ -184,6 +184,20 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn /** Executes when element is encountered by MB program interpretor. */ abstract onVisit(): void; + + /** Whether current instruction is a dummy instruction */ + get isDummy() { + return this.elementName === 'dummy'; + } +} + +/** To be treated as a terminating or non-existing instruction */ +export class DummyElement extends InstructionElement { + constructor() { + super('dummy'); + } + + onVisit() {} } export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { From 00b26f75351ffe3ece6c43968088b1c24281f7a2 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 15:39:05 +0530 Subject: [PATCH 039/176] Correct argument type of new value to be ArgumentElement --- src/.prototype/syntaxElements/programElements/dataElements.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntaxElements/programElements/dataElements.ts index 77a8aef..63bae40 100644 --- a/src/.prototype/syntaxElements/programElements/dataElements.ts +++ b/src/.prototype/syntaxElements/programElements/dataElements.ts @@ -208,12 +208,12 @@ export namespace DataElement { return this.args.getArg('currValue') as dataValueType; } - set argNewValue(value: dataValueType | null) { + set argNewValue(value: ArgumentElement | null) { this.args.setArg('newValue', value); } get argNewValue() { - return this.args.getArg('newValue') as dataValueType; + return this.args.getArg('newValue'); } onVisit() { From e885fa97dd920167bddaf9b1789b82a51274855a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 17:15:59 +0530 Subject: [PATCH 040/176] Add sample fibonacci program --- src/.prototype/syntaxElements/sample.ts | 145 ++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/.prototype/syntaxElements/sample.ts diff --git a/src/.prototype/syntaxElements/sample.ts b/src/.prototype/syntaxElements/sample.ts new file mode 100644 index 0000000..fd9e26b --- /dev/null +++ b/src/.prototype/syntaxElements/sample.ts @@ -0,0 +1,145 @@ +import { DataElement } from './programElements/dataElements'; +import { ValueElement } from './programElements/valueElements'; +import { ConditionalElement } from './programElements/conditionalElements'; +import { OperationElement } from './programElements/operationElements'; +import { MiscellaneousElement } from './programElements/miscellaneousElements'; +import { BlockElement, InstructionElement, StatementElement } from './structureElements'; +import { LoopElement } from './programElements/loopElements'; + +function executeStatement(instruction: InstructionElement) { + instruction.onVisit(); +} + +function executeBlock(instruction: BlockElement) { + instruction.onVisit(); + let next: InstructionElement | null = instruction.childHead; + while (next !== null) { + if (next instanceof StatementElement) { + executeStatement(next); + } else if (next instanceof BlockElement) { + executeBlock(next); + } + next = next.next; + } + instruction.onExit(); +} + +function executeInstruction(instruction: InstructionElement | null) { + if (instruction instanceof StatementElement) { + executeStatement(instruction); + } else if (instruction instanceof BlockElement) { + executeBlock(instruction); + } else { + return; + } + executeInstruction(instruction.next); +} + +function fibN(n: number) { + /* + Implementation of: + + void fibN(int N) { + int n = N; + if (n == 0 || n == 1) { + print(n); + } else { + int a = 0; + int b = 0; + int c = -1; + for (int i = 1; i <= n - 1; i++) { + c = a + b; + a = b; + b = c; + } + print(b); + } + } + + */ + + const nData = new DataElement.FloatDataElement(); + nData.argIdentifier = new ValueElement.StringElement('n'); + nData.argValue = new ValueElement.IntElement(n); + + const ifElse_1 = new ConditionalElement.IfElseElement(); + const orElem = new OperationElement.OrElement(); + const eq_1 = new OperationElement.EqualsElement(); + const eq_2 = new OperationElement.EqualsElement(); + eq_1.argOperand_1 = nData.valueElement; + eq_1.argOperand_2 = new ValueElement.IntElement(0); + eq_2.argOperand_1 = nData.valueElement; + eq_2.argOperand_2 = new ValueElement.IntElement(1); + orElem.argOperand_1 = eq_1; + orElem.argOperand_2 = eq_2; + ifElse_1.argCondition = orElem; + + const print_1 = new MiscellaneousElement.PrintElement(); + print_1.argMessage = nData.valueElement; + const print_2 = new MiscellaneousElement.PrintElement(); + print_2.argMessage = nData.valueElement; + + const aData = new DataElement.FloatDataElement(); + aData.argIdentifier = new ValueElement.StringElement('a'); + aData.argValue = new ValueElement.IntElement(0); + + const bData = new DataElement.FloatDataElement(); + bData.argIdentifier = new ValueElement.StringElement('b'); + bData.argValue = new ValueElement.IntElement(1); + + const cData = new DataElement.FloatDataElement(); + cData.argIdentifier = new ValueElement.StringElement('c'); + cData.argValue = new ValueElement.IntElement(-1); + + const sub = new OperationElement.SubtractElement(); + sub.argOperand_1 = nData.valueElement; + sub.argOperand_2 = new ValueElement.IntElement(1); + const repeat = new LoopElement.RepeatLoopElement(); + repeat.argValue = sub; + + const a_data_value = aData.valueElement; + const b_data_value = bData.valueElement; + const c_data_value = cData.valueElement; + + const update_c = new DataElement.UpdateFloatDataElement(); + update_c.argCurrValue = cData.valueElement; + const add = new OperationElement.AddElement(); + add.argOperand_1 = a_data_value; + add.argOperand_2 = b_data_value; + update_c.argNewValue = add; + + const update_a = new DataElement.UpdateFloatDataElement(); + update_a.argCurrValue = a_data_value; + update_a.argNewValue = b_data_value; + const update_b = new DataElement.UpdateFloatDataElement(); + update_b.argCurrValue = b_data_value; + update_b.argNewValue = c_data_value; + + const print_3 = new MiscellaneousElement.PrintElement(); + print_3.argMessage = bData.valueElement; + + nData.next = ifElse_1; + ifElse_1.setChildHead(0, print_1); + ifElse_1.setChildHead(1, aData); + aData.next = bData; + bData.next = cData; + cData.next = repeat; + repeat.setChildHead(0, update_c); + update_c.next = update_a; + update_a.next = update_b; + repeat.next = print_3; + + console.log(`----- fib(${n})`); + executeInstruction(nData); +} + +fibN(0); +fibN(1); +fibN(2); +fibN(3); +fibN(4); +fibN(5); +fibN(6); +fibN(7); +fibN(8); +fibN(9); From 0ca78c95a59c37d45c35c026e82fc3d071d67a53 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 28 Jan 2021 18:06:51 +0530 Subject: [PATCH 041/176] Add comments descriptively --- src/.prototype/syntaxElements/sample.ts | 191 ++++++++++++++++++------ 1 file changed, 147 insertions(+), 44 deletions(-) diff --git a/src/.prototype/syntaxElements/sample.ts b/src/.prototype/syntaxElements/sample.ts index fd9e26b..555b5d4 100644 --- a/src/.prototype/syntaxElements/sample.ts +++ b/src/.prototype/syntaxElements/sample.ts @@ -6,6 +6,8 @@ import { MiscellaneousElement } from './programElements/miscellaneousElements'; import { BlockElement, InstructionElement, StatementElement } from './structureElements'; import { LoopElement } from './programElements/loopElements'; +// ---- Execution utilities ------------------------------------------------------------------------ + function executeStatement(instruction: InstructionElement) { instruction.onVisit(); } @@ -35,111 +37,212 @@ function executeInstruction(instruction: InstructionElement | null) { executeInstruction(instruction.next); } -function fibN(n: number) { +// ---- Sample program ----------------------------------------------------------------------------- + +/** + * Prints the n-th fibonacci number starting from 0 + * @param n - value of n, the required fibonacci number's index + */ +function fibN(N: number) { /* Implementation of: - void fibN(int N) { - int n = N; - if (n == 0 || n == 1) { - print(n); - } else { - int a = 0; - int b = 0; - int c = -1; - for (int i = 1; i <= n - 1; i++) { - c = a + b; - a = b; - b = c; - } - print(b); - } - } + LINE 0: void fibN(int N) { + LINE 1: int n = N; + LINE 2: if (n == 0 || n == 1) { + LINE 3: print(n); + LINE 4: } else { + LINE 5: int a = 0; + LINE 6: int b = 1; + LINE 7: int c = 0; + LINE 8: for (int i = 1; i <= n - 1; i++) { + LINE 9: c = a + b; + LINE 10: a = b; + LINE 11: b = c; + LINE 12: } + LINE 13: print(b); + LINE 14: } + LINE 15: } */ + // As per the code above, all data elements are integers, however floats have been used below + // since operator overloading hasn't been handled effectively so far. Functionality is + // effectively analogous though. + + // LINE 1: + // ------------------------------------------------------------------------- + // Create a 'data' element of type 'TFloat' const nData = new DataElement.FloatDataElement(); + // Assign identifier as 'n' (not being used yet) nData.argIdentifier = new ValueElement.StringElement('n'); - nData.argValue = new ValueElement.IntElement(n); - - const ifElse_1 = new ConditionalElement.IfElseElement(); + // Assign N (argument to function) as value argument + nData.argValue = new ValueElement.IntElement(N); + + // LINE 2: + // ------------------------------------------------------------------------- + // Create an 'if-else' block element + const ifElse = new ConditionalElement.IfElseElement(); + // Create an 'or' expression element const orElem = new OperationElement.OrElement(); + // Create an 'equals' expression element const eq_1 = new OperationElement.EqualsElement(); + // Create another 'equals' expression element const eq_2 = new OperationElement.EqualsElement(); + // Assign 'value' element corresponding to 'n' as first operand of one of the 'equals' element eq_1.argOperand_1 = nData.valueElement; + // Assign '0' as second operand of the 'equals' element eq_1.argOperand_2 = new ValueElement.IntElement(0); + // Assign 'value' element corresponding to 'n' as first operand of the other 'equals' element eq_2.argOperand_1 = nData.valueElement; + // Assign '1' as second operand of the 'equals' element eq_2.argOperand_2 = new ValueElement.IntElement(1); + // Assign one of the 'equals' element as first operand of the 'or' element orElem.argOperand_1 = eq_1; + // Assign the other 'equals' element as second operand of the 'or' element orElem.argOperand_2 = eq_2; - ifElse_1.argCondition = orElem; + // Assign the 'or' element as condition argument of the 'if-else' element + ifElse.argCondition = orElem; + // LINE 3: + // ------------------------------------------------------------------------- + // Create a 'print' element const print_1 = new MiscellaneousElement.PrintElement(); + // Assign 'value' element of 'n' as message argument of the 'print' element print_1.argMessage = nData.valueElement; - const print_2 = new MiscellaneousElement.PrintElement(); - print_2.argMessage = nData.valueElement; + // LINE 5: + // ------------------------------------------------------------------------- + // Create a 'data' element of type 'TFloat' const aData = new DataElement.FloatDataElement(); + // Assign identifier as 'a' (not being used yet) aData.argIdentifier = new ValueElement.StringElement('a'); + // Assign '0' as value argument aData.argValue = new ValueElement.IntElement(0); + // LINE 6: + // ------------------------------------------------------------------------- + // Create a 'data' element of type 'TFloat' const bData = new DataElement.FloatDataElement(); + // Assign identifier as 'b' (not being used yet) bData.argIdentifier = new ValueElement.StringElement('b'); + // Assign '1' as value argument bData.argValue = new ValueElement.IntElement(1); + // LINE 7: + // ------------------------------------------------------------------------- + // Create a 'data' element of type 'TFloat' const cData = new DataElement.FloatDataElement(); + // Assign identifier as 'c' (not being used yet) cData.argIdentifier = new ValueElement.StringElement('c'); - cData.argValue = new ValueElement.IntElement(-1); + // Assign '0' as value argument + cData.argValue = new ValueElement.IntElement(0); + // LINE 8: + // ------------------------------------------------------------------------- + // Create a 'repeat' element + const repeat = new LoopElement.RepeatLoopElement(); + // Create a 'subtraction' expression element const sub = new OperationElement.SubtractElement(); + // Assign 'value' element corresponding to 'n' as first operand of the 'subtraction' element sub.argOperand_1 = nData.valueElement; + // Assign '1' as second operand of the 'subtraction' element sub.argOperand_2 = new ValueElement.IntElement(1); - const repeat = new LoopElement.RepeatLoopElement(); + // Assign the 'subtraction' element as value argument of the 'repeat' element repeat.argValue = sub; + // Create a 'value' element corresponding to the data element 'a' const a_data_value = aData.valueElement; + // Create a 'value' element corresponding to the data element 'b' const b_data_value = bData.valueElement; + // Create a 'value' element corresponding to the data element 'c' const c_data_value = cData.valueElement; + // LINE 9: + // ------------------------------------------------------------------------- + // Create an 'update' data element of type 'TFloat' const update_c = new DataElement.UpdateFloatDataElement(); + // Assign 'value' element corresponding to 'a' as current value argument of the 'update' element update_c.argCurrValue = cData.valueElement; + // Create an 'addition' expression element const add = new OperationElement.AddElement(); + // Assign 'value' element corresponding to 'a' as first operand of the 'addition' element add.argOperand_1 = a_data_value; + // Assign 'value' element corresponding to 'b' as second operand of the 'addition' element add.argOperand_2 = b_data_value; + // Assign the 'addition' element as new value argument of the 'update' element update_c.argNewValue = add; + // LINE 10: + // ------------------------------------------------------------------------- + // Create an 'update' data element of type 'TFloat' const update_a = new DataElement.UpdateFloatDataElement(); + // Assign 'value' element corresponding to 'a' as current value argument of the 'update' element update_a.argCurrValue = a_data_value; + // Assign 'value' element corresponding to 'b' as new value argument of the 'update' element update_a.argNewValue = b_data_value; + + // LINE 11: + // ------------------------------------------------------------------------- + // Create an 'update' data element of type 'TFloat' const update_b = new DataElement.UpdateFloatDataElement(); + // Assign 'value' element corresponding to 'b' as current value argument of the 'update' element update_b.argCurrValue = b_data_value; + // Assign 'value' element corresponding to 'c' as new value argument of the 'update' element update_b.argNewValue = c_data_value; - const print_3 = new MiscellaneousElement.PrintElement(); - print_3.argMessage = bData.valueElement; - - nData.next = ifElse_1; - ifElse_1.setChildHead(0, print_1); - ifElse_1.setChildHead(1, aData); + // LINE 13: + // ------------------------------------------------------------------------- + // Create a 'print' element + const print_2 = new MiscellaneousElement.PrintElement(); + // Assign 'value' element of 'b' as message argument of the 'print' element + print_2.argMessage = bData.valueElement; + + // ------------------------------------------------------------------------- + // Connecting the elements linearly to form the instruction pipeline of the program + // ------------------------------------------------------------------------- + // LINE 1 is followed by LINE 2 + nData.next = ifElse; + // LINE 2 ('if-else' element)'s head instruction in first (of 2) block ('if') is LINE 3 + ifElse.setChildHead(0, print_1); + // LINE 2 ('if-else' element)'s head instruction in second (of 2) block ('else') is LINE 5 + ifElse.setChildHead(1, aData); + // LINE 5 is followed by LINE 6 aData.next = bData; + // LINE 6 is followed by LINE 7 bData.next = cData; + // LINE 7 is followed by LINE 8 cData.next = repeat; + // LINE 8 ('repeat' element)'s head instruction in first (of 1) block is LINE 9 repeat.setChildHead(0, update_c); + // LINE 9 is followed by LINE 10 update_c.next = update_a; + // LINE 10 is followed by LINE 11 update_a.next = update_b; - repeat.next = print_3; - - console.log(`----- fib(${n})`); + // LINE 11 is last instruction in its parent block + update_b.next = null; + // LINE 8 ('repeat' element) is followed by LINE 13 + repeat.next = print_2; + // LINE 13 is last instruction in its parent block + print_2.next = null; + // LINE 2 ('if-else' element)'s instruction is last instruction in its parent block + ifElse.next = null; + + // Dummy separator for readability + console.log(`----- fib(${N})`); + // Execute the pipeline starting from LINE 1 executeInstruction(nData); } -fibN(0); -fibN(1); -fibN(2); -fibN(3); -fibN(4); -fibN(5); -fibN(6); -fibN(7); -fibN(8); -fibN(9); +// ---- Invoke the function call for the sample program -------------------------------------------- + +fibN(0); // prints the 0th fibonacci number = 0 +fibN(1); // prints the 1st fibonacci number = 1 +fibN(2); // prints the 2nd fibonacci number = 1 +fibN(3); // prints the 3rd fibonacci number = 2 +fibN(4); // prints the 4th fibonacci number = 3 +fibN(5); // prints the 5th fibonacci number = 5 +fibN(6); // prints the 6th fibonacci number = 8 +fibN(7); // prints the 7th fibonacci number = 13 +fibN(8); // prints the 8th fibonacci number = 21 +fibN(9); // prints the 9th fibonacci number = 34 From ee49bb206b9463c76bc7332c3832b58195506547 Mon Sep 17 00:00:00 2001 From: Jaikishan Brijwani <50985033+ricknjacky@users.noreply.github.com> Date: Wed, 3 Feb 2021 21:59:00 +0530 Subject: [PATCH 042/176] Add non-static and more static operations for TInt and TFloat with unit-tests --- .../syntaxElements/primitiveElements.test.ts | 169 +++++++++++++++++- .../syntaxElements/primitiveElements.ts | 84 +++++++++ 2 files changed, 250 insertions(+), 3 deletions(-) diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntaxElements/primitiveElements.test.ts index 5ba4607..027c078 100644 --- a/src/.prototype/syntaxElements/primitiveElements.test.ts +++ b/src/.prototype/syntaxElements/primitiveElements.test.ts @@ -171,53 +171,206 @@ describe('type conversions', () => { }); describe('operations on type elements', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); describe('class TInt', () => { test('add TInt(15) and TInt(4) and expect new element value to be 19', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + operand_1.add(operand_2); + expect(operand_1.value).toBe(19); + }); + + test('add TInt(15) and TInt(4) and expect new element value to be 19', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); expect(TInt.add(operand_1, operand_2).value).toBe(19); }); test('subtract TInt(15) and TInt(4) and expect new element value to be 11', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + operand_1.subtract(operand_2); + expect(operand_1.value).toBe(11); + }); + + test('subtract TInt(15) and TInt(4) and expect new element value to be 11', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); expect(TInt.subtract(operand_1, operand_2).value).toBe(11); }); test('multiply TInt(15) and TInt(4) and expect new element value to be 60', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + operand_1.multiply(operand_2); + expect(operand_1.value).toBe(60); + }); + + test('multiply TInt(15) and TInt(4) and expect new element value to be 60', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); expect(TInt.multiply(operand_1, operand_2).value).toBe(60); }); test('divide TInt(15) and TInt(4) and expect new element value to be 3', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + operand_1.divide(operand_2); + expect(operand_1.value).toBe(3); + }); + + test('divide TInt(15) and TInt(4) and expect new element value to be 3', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); expect(TInt.divide(operand_1, operand_2).value).toBe(3); }); test('mod TInt(15) and TInt(4) and expect new element value to be 3', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); expect(TInt.mod(operand_1, operand_2).value).toBe(3); }); + + test('check for equality TInt(15) and TInt(4) and expect to get False', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + expect(TInt.equals(operand_1, operand_2).value).toBe(false); + }); + + test('check for equality TInt(4) and TInt(4) and expect to get True', () => { + const operand_1 = new TInt(4); + const operand_2 = new TInt(4); + expect(TInt.equals(operand_1, operand_2).value).toBe(true); + }); + + test('check if TInt(15) greater than TInt(4) and expect to get True', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + expect(TInt.greaterThan(operand_1, operand_2).value).toBe(true); + }); + + test('check if TInt(15) less than TInt(4) and expect to get False', () => { + const operand_1 = new TInt(15); + const operand_2 = new TInt(4); + expect(TInt.lessThan(operand_1, operand_2).value).toBe(false); + }); + + test('increment a TInt(15) object and expect value to be 16', () => { + const operand_1 = new TInt(15); + operand_1.increment(); + expect(operand_1.value).toBe(16); + }); + + test('decrement a TInt(16) object and expect value to be 15', () => { + const operand_1 = new TInt(16); + operand_1.decrement(); + expect(operand_1.value).toBe(15); + }); }); - const operand_3 = new TFloat(15.5); describe('class TFloat', () => { + + test('add TFloat(15.5) and TInt(4) and expect new element value to be 19.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + operand_3.add(operand_2); + expect(operand_3.value).toBe(19.5); + }); + test('add TFloat(15.5) and TInt(4) and expect new element value to be 19.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); expect(TFloat.add(operand_3, operand_2).value).toBe(19.5); }); test('subtract TFloat(15.5) and TInt(4) and expect new element value to be 11.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + operand_3.subtract(operand_2); + expect(operand_3.value).toBe(11.5); + }); + + test('subtract TFloat(15.5) and TInt(4) and expect new element value to be 11.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); expect(TFloat.subtract(operand_3, operand_2).value).toBe(11.5); }); test('multiply TFloat(15.5) and TInt(4) and expect new element value to be 62', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + operand_3.multiply(operand_2); + expect(operand_3.value).toBe(62); + }); + + test('multiply TFloat(15.5) and TInt(4) and expect new element value to be 62', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); expect(TFloat.multiply(operand_3, operand_2).value).toBe(62); }); test('divide TFloat(15.5) and TInt(4) and expect new element value to be 3.875', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + operand_3.divide(operand_2); + expect(operand_3.value).toBe(3.875); + }); + + test('divide TFloat(15.5) and TInt(4) and expect new element value to be 3.875', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); expect(TFloat.divide(operand_3, operand_2).value).toBe(3.875); }); test('mod TFloat(15.5) and TInt(4) and expect new element value to be 3.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + operand_3.mod(operand_2); + expect(operand_3.value).toBe(3.5); + }); + + test('mod TFloat(15.5) and TInt(4) and expect new element value to be 3.5', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); expect(TFloat.mod(operand_3, operand_2).value).toBe(3.5); }); + + test('check for equality of TFloat(15.5) and TInt(4) and expect to get false', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + expect(TFloat.equals(operand_3, operand_2).value).toBe(false); + }); + + test('check for equality of TFloat(15.5) and TFloat(15.5) and expect to get true', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TFloat(15.5); + expect(TFloat.equals(operand_3, operand_2).value).toBe(true); + }); + + test('check if TFloat(15.5) greaterThan TInt(4) and expect to get true', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + expect(TFloat.greaterThan(operand_3, operand_2).value).toBe(true); + }); + + test('check if TFloat(15.5) lessThan TInt(4) and expect to get false', () => { + const operand_3 = new TFloat(15.5); + const operand_2 = new TInt(4); + expect(TFloat.lessThan(operand_3, operand_2).value).toBe(false); + }); + + test('increment a TFloat(15.5) object and expect value to be 16.5', () => { + const operand_3 = new TFloat(15.5); + operand_3.increment(); + expect(operand_3.value).toBe(16.5); + }); + + test('decrement a TFloat(16.5) object and expect value to be 15.5', () => { + const operand_1 = new TFloat(15.5); + operand_1.decrement(); + expect(operand_1.value).toBe(14.5); + }); }); describe('class TChar', () => { @@ -255,5 +408,15 @@ describe('operations on type elements', () => { test('or TBoolean(false) and TBoolean(false) and expect new element value to be false', () => { expect(TBoolean.or(operand_5, operand_5).value).toBe(false); }); + + test('invert a TBoolean(true) and expect value to be false', () => { + operand_4.invert(); + expect(operand_4.value).toBe(false); + }); + + test('invert a TBoolean(false) and expect value to be true', () => { + operand_5.invert(); + expect(operand_5.value).toBe(true); + }); }); }); diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntaxElements/primitiveElements.ts index 041ca07..0da4bc3 100644 --- a/src/.prototype/syntaxElements/primitiveElements.ts +++ b/src/.prototype/syntaxElements/primitiveElements.ts @@ -88,31 +88,77 @@ export class TInt extends PrimitiveElement { } // -- Operators ------------------------------------------------------------ + // -- All static methods must return a TInt, non-static directly update value so return void + + add(operand: TInt) { + this.value += operand.value; + } /** Binary + operator. */ static add(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value + operand_2.value); } + subtract(operand: TInt) { + this.value -= operand.value; + } + /** Binary - operator. */ static subtract(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value - operand_2.value); } + multiply(operand: TInt) { + this.value *= operand.value; + } + /** Binary * operator. */ static multiply(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value * operand_2.value); } + divide(operand: TInt) { + this.value /= operand.value; + } + /** Binary / operator. */ static divide(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value / operand_2.value); } + mod(operand: TInt) { + this.value %= operand.value; + } + /** Binary % operator. */ static mod(operand_1: TInt, operand_2: TInt) { return new TInt(operand_1.value % operand_2.value); } + + /** Binary == operator. */ + static equals(operand_1: TInt, operand_2: TInt) { + return new TBoolean(operand_1.value == operand_2.value); + } + + /** Binary > operator. */ + static greaterThan(operand_1: TInt, operand_2: TInt) { + return new TBoolean(operand_1.value > operand_2.value); + } + + /** Binary < operator. */ + static lessThan(operand_1: TInt, operand_2: TInt) { + return new TBoolean(operand_1.value < operand_2.value); + } + + /** Unary ++ operator. */ + increment() { + this._value++; + } + + /** Unary -- operator. */ + decrement() { + this._value--; + } } /** @@ -145,27 +191,48 @@ export class TFloat extends PrimitiveElement { } // -- Operators ------------------------------------------------------------ + // -- All static methods must return a TFloat, non-static directly update value so return void + + add(operand: TInt | TFloat) { + this.value += operand.value; + } /** Binary + operator. */ static add(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value + operand_2.value); } + subtract(operand: TInt | TFloat) { + this.value -= operand.value; + } + /** Binary - operator. */ static subtract(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value - operand_2.value); } + multiply(operand: TInt | TFloat) { + this.value *= operand.value; + } + /** Binary * operator. */ static multiply(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value * operand_2.value); } + divide(operand: TInt | TFloat) { + this.value /= operand.value; + } + /** Binary / operator. */ static divide(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value / operand_2.value); } + mod(operand: TInt | TFloat) { + this.value %= operand.value; + } + /** Binary % operator. */ static mod(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TFloat(operand_1.value % operand_2.value); @@ -185,6 +252,16 @@ export class TFloat extends PrimitiveElement { static lessThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { return new TBoolean(operand_1.value < operand_2.value); } + + /** Unary ++ operator. */ + increment() { + this._value++; + } + + /** Unary -- operator. */ + decrement() { + this._value--; + } } /** @@ -239,6 +316,7 @@ export class TChar extends PrimitiveElement { } // -- Operators ------------------------------------------------------------ + // -- All static methods must return a TChar, non-static directly update value so return void /** Unary add ASCII operator. */ addOffset(offset: number) { @@ -277,6 +355,7 @@ export class TBoolean extends PrimitiveElement { } // -- Operators ------------------------------------------------------------ + // -- All static methods must return a TBoolean, non-static directly update value so return void /** Binary && operator. */ static and(operand_1: TBoolean, operand_2: TBoolean) { @@ -287,4 +366,9 @@ export class TBoolean extends PrimitiveElement { static or(operand_1: TBoolean, operand_2: TBoolean) { return new TBoolean(operand_1.value || operand_2.value); } + + /** Unary ! operator. */ + invert() { + this._value = !this._value; + } } From 1f12d597fe5c0297e180f4b809b64da94774c4a8 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 30 Jan 2021 18:16:21 +0530 Subject: [PATCH 043/176] Rename directory --- .../{syntaxElements => syntax-core}/@types/primitiveElements.d.ts | 0 .../{syntaxElements => syntax-core}/@types/primitiveTypes.d.ts | 0 .../{syntaxElements => syntax-core}/@types/structureElements.d.ts | 0 .../{syntaxElements => syntax-core}/primitiveElements.test.ts | 0 .../{syntaxElements => syntax-core}/primitiveElements.ts | 0 .../programElements/conditionalElements.test.ts | 0 .../programElements/conditionalElements.ts | 0 .../programElements/dataElements.test.ts | 0 .../programElements/dataElements.ts | 0 .../programElements/loopElements.test.ts | 0 .../programElements/loopElements.ts | 0 .../programElements/miscellaneousElements.ts | 0 .../programElements/operationElements.test.ts | 0 .../programElements/operationElements.ts | 0 .../programElements/valueElements.test.ts | 0 .../programElements/valueElements.ts | 0 src/.prototype/{syntaxElements => syntax-core}/sample.ts | 0 .../{syntaxElements => syntax-core}/structureElements.test.ts | 0 .../{syntaxElements => syntax-core}/structureElements.ts | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename src/.prototype/{syntaxElements => syntax-core}/@types/primitiveElements.d.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/@types/primitiveTypes.d.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/@types/structureElements.d.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/primitiveElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/primitiveElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/conditionalElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/conditionalElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/dataElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/dataElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/loopElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/loopElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/miscellaneousElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/operationElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/operationElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/valueElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/programElements/valueElements.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/sample.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/structureElements.test.ts (100%) rename src/.prototype/{syntaxElements => syntax-core}/structureElements.ts (100%) diff --git a/src/.prototype/syntaxElements/@types/primitiveElements.d.ts b/src/.prototype/syntax-core/@types/primitiveElements.d.ts similarity index 100% rename from src/.prototype/syntaxElements/@types/primitiveElements.d.ts rename to src/.prototype/syntax-core/@types/primitiveElements.d.ts diff --git a/src/.prototype/syntaxElements/@types/primitiveTypes.d.ts b/src/.prototype/syntax-core/@types/primitiveTypes.d.ts similarity index 100% rename from src/.prototype/syntaxElements/@types/primitiveTypes.d.ts rename to src/.prototype/syntax-core/@types/primitiveTypes.d.ts diff --git a/src/.prototype/syntaxElements/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts similarity index 100% rename from src/.prototype/syntaxElements/@types/structureElements.d.ts rename to src/.prototype/syntax-core/@types/structureElements.d.ts diff --git a/src/.prototype/syntaxElements/primitiveElements.test.ts b/src/.prototype/syntax-core/primitiveElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/primitiveElements.test.ts rename to src/.prototype/syntax-core/primitiveElements.test.ts diff --git a/src/.prototype/syntaxElements/primitiveElements.ts b/src/.prototype/syntax-core/primitiveElements.ts similarity index 100% rename from src/.prototype/syntaxElements/primitiveElements.ts rename to src/.prototype/syntax-core/primitiveElements.ts diff --git a/src/.prototype/syntaxElements/programElements/conditionalElements.test.ts b/src/.prototype/syntax-core/programElements/conditionalElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/conditionalElements.test.ts rename to src/.prototype/syntax-core/programElements/conditionalElements.test.ts diff --git a/src/.prototype/syntaxElements/programElements/conditionalElements.ts b/src/.prototype/syntax-core/programElements/conditionalElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/conditionalElements.ts rename to src/.prototype/syntax-core/programElements/conditionalElements.ts diff --git a/src/.prototype/syntaxElements/programElements/dataElements.test.ts b/src/.prototype/syntax-core/programElements/dataElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/dataElements.test.ts rename to src/.prototype/syntax-core/programElements/dataElements.test.ts diff --git a/src/.prototype/syntaxElements/programElements/dataElements.ts b/src/.prototype/syntax-core/programElements/dataElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/dataElements.ts rename to src/.prototype/syntax-core/programElements/dataElements.ts diff --git a/src/.prototype/syntaxElements/programElements/loopElements.test.ts b/src/.prototype/syntax-core/programElements/loopElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/loopElements.test.ts rename to src/.prototype/syntax-core/programElements/loopElements.test.ts diff --git a/src/.prototype/syntaxElements/programElements/loopElements.ts b/src/.prototype/syntax-core/programElements/loopElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/loopElements.ts rename to src/.prototype/syntax-core/programElements/loopElements.ts diff --git a/src/.prototype/syntaxElements/programElements/miscellaneousElements.ts b/src/.prototype/syntax-core/programElements/miscellaneousElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/miscellaneousElements.ts rename to src/.prototype/syntax-core/programElements/miscellaneousElements.ts diff --git a/src/.prototype/syntaxElements/programElements/operationElements.test.ts b/src/.prototype/syntax-core/programElements/operationElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/operationElements.test.ts rename to src/.prototype/syntax-core/programElements/operationElements.test.ts diff --git a/src/.prototype/syntaxElements/programElements/operationElements.ts b/src/.prototype/syntax-core/programElements/operationElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/operationElements.ts rename to src/.prototype/syntax-core/programElements/operationElements.ts diff --git a/src/.prototype/syntaxElements/programElements/valueElements.test.ts b/src/.prototype/syntax-core/programElements/valueElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/valueElements.test.ts rename to src/.prototype/syntax-core/programElements/valueElements.test.ts diff --git a/src/.prototype/syntaxElements/programElements/valueElements.ts b/src/.prototype/syntax-core/programElements/valueElements.ts similarity index 100% rename from src/.prototype/syntaxElements/programElements/valueElements.ts rename to src/.prototype/syntax-core/programElements/valueElements.ts diff --git a/src/.prototype/syntaxElements/sample.ts b/src/.prototype/syntax-core/sample.ts similarity index 100% rename from src/.prototype/syntaxElements/sample.ts rename to src/.prototype/syntax-core/sample.ts diff --git a/src/.prototype/syntaxElements/structureElements.test.ts b/src/.prototype/syntax-core/structureElements.test.ts similarity index 100% rename from src/.prototype/syntaxElements/structureElements.test.ts rename to src/.prototype/syntax-core/structureElements.test.ts diff --git a/src/.prototype/syntaxElements/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts similarity index 100% rename from src/.prototype/syntaxElements/structureElements.ts rename to src/.prototype/syntax-core/structureElements.ts From cbd89b890181a45164d5f4531317282584196394 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 30 Jan 2021 21:03:25 +0530 Subject: [PATCH 044/176] Create AST barebone --- src/.prototype/@types/AST.d.ts | 64 ----- src/.prototype/AST.ts | 258 ------------------ src/.prototype/syntax-core/@types/AST.d.ts | 10 + .../syntax-core/@types/context.d.ts | 1 + .../syntax-core/@types/structureElements.d.ts | 5 + src/.prototype/syntax-core/AST.ts | 77 ++++++ src/.prototype/syntax-core/context.ts | 5 + .../syntax-core/structureElements.ts | 26 +- 8 files changed, 121 insertions(+), 325 deletions(-) delete mode 100644 src/.prototype/@types/AST.d.ts delete mode 100644 src/.prototype/AST.ts create mode 100644 src/.prototype/syntax-core/@types/AST.d.ts create mode 100644 src/.prototype/syntax-core/@types/context.d.ts create mode 100644 src/.prototype/syntax-core/AST.ts create mode 100644 src/.prototype/syntax-core/context.ts diff --git a/src/.prototype/@types/AST.d.ts b/src/.prototype/@types/AST.d.ts deleted file mode 100644 index 885f542..0000000 --- a/src/.prototype/@types/AST.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -// ---- Argument Element --------------------------------------------------------------------------- - -/** Whether argument element is simply a value or maps values to another, i.e. a function */ -export type TArgType = "value" | "function"; -/** Type of value returned by argument element in string */ -export type TArgReturn = "string" | "number" | "boolean"; -/** Type of value returned by argument element value */ -export type TArgValue = string | number | boolean; - -/** Argument element properties */ -export interface IArgProps { - /** What the argument element represents */ - argName: string; - /** valid if argument element is of type "function" */ - args?: IArgElement[]; - /** valid if argument element is of type "value" */ - value?: string | number | boolean; -} - -/** Argument element */ -export interface IArgElement { - argType: TArgType; - returnType: TArgReturn; - props: IArgProps; -} - -// ---- Syntax Element - instruction --------------------------------------------------------------- - -/** AST instruction category */ -export type TInstructionType = - | "start" - | "action" - | "flow" - | "flow-no-args" - | "clamp" - | "clamp-no-args"; - -/** AST instruction properties */ -export interface IInstructionProps { - /** name of the instruction represented */ - instruction: string; - /** list of arguments; valid if element takes arguments */ - args?: IArgElement[]; - /** linked-list of blocks; valid if element is a clamp (or action/start) type */ - childStack?: ISyntaxElement[]; -} - -/** AST syntax element - instruction */ -export interface ISyntaxElement { - type: TInstructionType; - props: IInstructionProps; -} - -// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- - -export interface IStack { - name: string; - stack: ISyntaxElement[]; -} - -export interface IAST { - startStacks: IStack[]; - actionStacks: IStack[]; -} diff --git a/src/.prototype/AST.ts b/src/.prototype/AST.ts deleted file mode 100644 index 481cb1d..0000000 --- a/src/.prototype/AST.ts +++ /dev/null @@ -1,258 +0,0 @@ -import * as TS from './@types/AST'; - -// ---- Argument Element --------------------------------------------------------------------------- - -export class ArgElement implements TS.IArgElement { - private _argType: TS.TArgType; - private _returnType: TS.TArgReturn; - private _argName: string; - private _args: TS.IArgElement[] | null; - private _value: TS.TArgValue | null; - - constructor(argType: TS.TArgType, returnType: TS.TArgReturn, props: TS.IArgProps) { - const { argName, args, value } = { ...props }; - - switch (argType) { - case 'function': - if (!this._validateArgType('function', argName)) { - throw Error(`Invalid argument type: "${argName}" is not a function`); - } - if (args === undefined) { - throw Error(`Invalid arguments: "${argName}" requires arguments`); - } else { - try { - this._args = this._validateArgs(argName, args); - } catch (e) { - throw e; - } - } - if (value !== undefined) { - console.warn(`"${argName}" is a function and doesn't store a value`); - } - this._value = null; - break; - case 'value': - if (!this._validateArgType('value', argName)) { - throw Error(`Invalid argument type: "${argName}" is not a value`); - } - if (args !== undefined) { - console.warn(`"${argName}" is a value and doesn't take arguments`); - } - this._args = null; - if (value === undefined) { - throw Error('Invalid argument value: value is required'); - } - this._value = value; - break; - default: - throw Error(`Invalid argument type: "${argType}" type doesn't exist`); - } - - this._argType = argType; - this._returnType = returnType; - this._argName = argName; - } - - private _validateArgType(type: TS.TArgType, argName: string): boolean { - return true; - } - - private _validateArgs(argName: string, args: TS.IArgElement[]): TS.IArgElement[] { - // throw Error(`Invalid arguments: .....`); - return args; - } - - /** Returns the argument element type - function or value. */ - get argType() { - return this._argType; - } - - /** Returns the return type of the argument element. */ - get returnType() { - return this._returnType; - } - - /** Returns the state properties of the argument element. */ - get props() { - const propObj: TS.IArgProps = { argName: this._argName }; - if (this._args) { - propObj['args'] = this._args; - } - if (this._value) { - propObj['value'] = this._value; - } - return propObj; - } -} - -// ---- Syntax Element - instruction --------------------------------------------------------------- - -export class SyntaxElement implements TS.ISyntaxElement { - private _type: TS.TInstructionType; - private _instruction: string; - private _args: TS.IArgElement[] | null; - private _childStack: TS.ISyntaxElement[] | null; - - constructor(type: TS.TInstructionType, props: TS.IInstructionProps) { - const { instruction, args, childStack } = { ...props }; - this._instruction = instruction; - - switch (type) { - case 'start': - if (instruction !== 'start') { - console.warn('instruction for "start" should be "start"'); - } - this._instruction = 'start'; - if (args !== undefined) { - console.warn('"start" takes no arguments'); - } - this._args = null; - if (childStack === undefined) { - console.warn('"start" takes a child flow'); - this._childStack = []; - } else { - this._childStack = childStack; - } - break; - case 'action': - if (instruction !== 'action') { - console.warn('instruction for "action" should be "action"'); - } - this._instruction = 'action'; - if (args === undefined) { - throw Error('Invalid arguments: "action" requires an argument'); - } - this._args = args; - if (childStack === undefined) { - console.warn('"action" takes a child flow'); - this._childStack = []; - } else { - this._childStack = childStack; - } - break; - case 'flow': - if (!this._validateInstructionType('flow', instruction)) { - throw Error(`Invalid instruction category: "${instruction}" is not a flow`); - } - if (args === undefined) { - throw Error(`Invalid arguments: "${instruction}" requires arguments`); - } else { - try { - this._args = this._validateArgs(instruction, args); - } catch (e) { - throw e; - } - } - if (childStack !== undefined) { - console.warn(`"${instruction}" takes no child flow`); - } - this._childStack = null; - break; - case 'flow-no-args': - if (!this._validateInstructionType('flow', instruction)) { - throw Error(`Invalid instruction category: "${instruction}" is not a flow`); - } - if (args !== undefined || childStack !== undefined) { - console.warn(`"${instruction}" takes no arguments or child flow`); - } - this._args = this._childStack = null; - break; - case 'clamp': - if (!this._validateInstructionType('clamp', instruction)) { - throw Error(`Invalid instruction category: "${instruction}" is not a clamp`); - } - if (args === undefined) { - throw Error(`Invalid arguments: "${instruction}" requires arguments`); - } else { - try { - this._args = this._validateArgs(instruction, args); - } catch (e) { - throw e; - } - } - if (childStack === undefined) { - console.warn(`"${instruction}" takes a child flow`); - this._childStack = []; - } else { - this._childStack = childStack; - } - break; - case 'clamp-no-args': - if (!this._validateInstructionType('clamp', instruction)) { - throw Error(`Invalid instruction category: "${instruction}" is not a clamp`); - } - if (args !== undefined) { - console.warn(`"${instruction}" takes no arguments`); - } - this._args = null; - if (childStack === undefined) { - console.warn(`"${instruction}" takes a child flow`); - this._childStack = []; - } else { - this._childStack = childStack; - } - break; - default: - throw Error(`Invalid instruction type: "${type}" instruction doesn't exist`); - } - - this._type = type; - } - - private _validateInstructionType(type: TS.TInstructionType, instruction: string): boolean { - return true; - } - - private _validateArgs(instruction: string, args: TS.IArgElement[]): TS.IArgElement[] { - // throw Error(`Invalid arguments: .....`); - return args; - } - - /** Returns the instruction category. */ - get type() { - return this._type; - } - - /** Returns the state properties of the instruction. */ - get props() { - const propObj: TS.IInstructionProps = { instruction: this._instruction }; - if (this._args) { - propObj['args'] = this._args; - } - if (this._childStack) { - propObj['childStack'] = this._childStack; - } - return propObj; - } -} - -// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- - -export class AST implements TS.IAST { - /** Stores the singleton instance (once instantiated). */ - private static _instance: AST | undefined; - - private _startStacks: TS.IStack[] = []; - private _actionStacks: TS.IStack[] = []; - - /** Creates and returns a new instance of the class if one doesn't exist, else returns the existing one. */ - constructor() { - if (AST._instance) { - return AST._instance; - } - AST._instance = this; - } - - /** Getter that returns the singleton instance. */ - static get instance() { - return AST._instance; - } - - get startStacks() { - return this._startStacks; - } - - get actionStacks() { - return this._actionStacks; - } -} diff --git a/src/.prototype/syntax-core/@types/AST.d.ts b/src/.prototype/syntax-core/@types/AST.d.ts new file mode 100644 index 0000000..c867c07 --- /dev/null +++ b/src/.prototype/syntax-core/@types/AST.d.ts @@ -0,0 +1,10 @@ +import { IBlockElement } from './structureElements'; + +export interface IStartBlock extends IBlockElement {} + +export interface IActionBlock extends IBlockElement {} + +export interface IAST { + startBlocks: IStartBlock[]; + actionBlocks: IActionBlock[]; +} diff --git a/src/.prototype/syntax-core/@types/context.d.ts b/src/.prototype/syntax-core/@types/context.d.ts new file mode 100644 index 0000000..d3898e2 --- /dev/null +++ b/src/.prototype/syntax-core/@types/context.d.ts @@ -0,0 +1 @@ +export interface IContext {} diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index 8999646..0379e87 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -1,4 +1,5 @@ import { TPrimitive, TPrimitiveName } from './primitiveTypes'; +import { IContext } from './context'; /** * There are two categories of syntax elements: Arguments and Instructions. @@ -14,6 +15,8 @@ import { TPrimitive, TPrimitiveName } from './primitiveTypes'; export interface ISyntaxElement { /** Name of the supported syntax element. Different from identifiers. */ elementName: string; + /** Stores the instrinsic music and art properties associated with the current context. */ + context: IContext | null; } export interface IDataElement { @@ -44,6 +47,8 @@ export interface IArgumentElement extends ISyntaxElement { type: TPrimitiveName; /** Returns the primitive element that the argument element returns. */ data: TPrimitive; + /** Whether argument requires a context. */ + requiresContext: boolean; } /** diff --git a/src/.prototype/syntax-core/AST.ts b/src/.prototype/syntax-core/AST.ts new file mode 100644 index 0000000..20fb287 --- /dev/null +++ b/src/.prototype/syntax-core/AST.ts @@ -0,0 +1,77 @@ +import { IStartBlock, IActionBlock, IAST } from './@types/AST'; +import { BlockElement } from './structureElements'; +import { Context } from './context'; + +// ---- Top Level Blocks (Start and Action) -------------------------------------------------------- + +export class StartBlock extends BlockElement implements IStartBlock { + constructor() { + super('start', 1); + this.context = new Context(); + } + + onVisit() {} + + onExit() {} +} + +export class ActionBlock extends BlockElement implements IActionBlock { + constructor() { + super('action', 1, { + name: ['TString'] + }); + } + + onVisit() { + if (this.context === null) { + throw Error(`Invalid context: context cannot be null`); + } + } + + onExit() { + this.context = null; + } +} + +// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- + +export class AST implements IAST { + /** Stores the singleton instance (once instantiated). */ + private static _instance: AST | undefined; + + private _startBlocks: StartBlock[] = []; + private _actionBlocks: ActionBlock[] = []; + + /** Creates and returns a new instance of the class if one doesn't exist, else returns the existing one. */ + constructor() { + if (AST._instance) { + return AST._instance; + } + AST._instance = this; + } + + /** Getter that returns the singleton instance. */ + static get instance() { + return AST._instance; + } + + get startBlocks() { + return this._startBlocks; + } + + get actionBlocks() { + return this._actionBlocks; + } + + get newStart() { + const start = new StartBlock(); + this._startBlocks.push(start); + return start; + } + + get newAction() { + const action = new ActionBlock(); + this._actionBlocks.push(action); + return action; + } +} diff --git a/src/.prototype/syntax-core/context.ts b/src/.prototype/syntax-core/context.ts new file mode 100644 index 0000000..958873e --- /dev/null +++ b/src/.prototype/syntax-core/context.ts @@ -0,0 +1,5 @@ +import { IContext } from './@types/context'; + +export class Context implements IContext { + constructor() {} +} diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 937289a..ab8a8f7 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -1,5 +1,6 @@ import { TPrimitiveName, TPrimitive } from './@types/primitiveTypes'; import * as TS from './@types/structureElements'; +import { Context } from './context'; // ---- Syntax Element ----------------------------------------------------------------------------- @@ -9,6 +10,7 @@ import * as TS from './@types/structureElements'; */ abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; + private _context: Context | null = null; constructor(elementName: string) { this._elementName = elementName; @@ -17,6 +19,14 @@ abstract class SyntaxElement implements TS.ISyntaxElement { get elementName() { return this._elementName; } + + set context(context: Context) { + this._context = context; + } + + get context() { + return this._context; + } } // ---- Argument Map ------------------------------------------------------------------------------- @@ -105,11 +115,18 @@ class ArgumentMap implements TS.IArgumentMap { export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { private _argType: 'data' | 'expression'; private _type: TPrimitiveName; + private _requiresContext: boolean; - constructor(elementName: string, argType: 'data' | 'expression', type: TPrimitiveName) { + constructor( + elementName: string, + argType: 'data' | 'expression', + type: TPrimitiveName, + requiresContext?: boolean + ) { super(elementName); this._argType = argType; this._type = type; + this._requiresContext = requiresContext !== undefined && requiresContext ? true : false; } get argType() { @@ -120,6 +137,10 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum return this._type; } + get requiresContext() { + return this._requiresContext; + } + abstract get data(): TPrimitive; } @@ -161,12 +182,11 @@ export abstract class ArgumentExpressionElement // ---- Instruction Element ------------------------------------------------------------------------ export abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { - private _next: InstructionElement | null; + private _next: InstructionElement | null = null; private _args: ArgumentMap; constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { super(elementName); - this._next = null; this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } From daaabf4ce1c7c4513e20265792cf09ef72a8354f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 30 Jan 2021 22:00:17 +0530 Subject: [PATCH 045/176] Add requiresContext flag --- .../syntax-core/@types/structureElements.d.ts | 4 +- src/.prototype/syntax-core/AST.ts | 12 ++--- .../conditionalElements.test.ts | 0 .../conditionalElements.ts | 2 +- .../dataElements.test.ts | 0 .../dataElements.ts | 4 +- .../loopElements.test.ts | 0 .../loopElements.ts | 2 +- .../miscellaneousElements.ts | 2 +- .../operationElements.test.ts | 0 .../operationElements.ts | 2 +- .../valueElements.test.ts | 0 .../valueElements.ts | 0 .../syntax-core/structureElements.test.ts | 4 +- .../syntax-core/structureElements.ts | 44 ++++++++++++------- 15 files changed, 40 insertions(+), 36 deletions(-) rename src/.prototype/syntax-core/{programElements => program-elements}/conditionalElements.test.ts (100%) rename src/.prototype/syntax-core/{programElements => program-elements}/conditionalElements.ts (98%) rename src/.prototype/syntax-core/{programElements => program-elements}/dataElements.test.ts (100%) rename src/.prototype/syntax-core/{programElements => program-elements}/dataElements.ts (98%) rename src/.prototype/syntax-core/{programElements => program-elements}/loopElements.test.ts (100%) rename src/.prototype/syntax-core/{programElements => program-elements}/loopElements.ts (97%) rename src/.prototype/syntax-core/{programElements => program-elements}/miscellaneousElements.ts (95%) rename src/.prototype/syntax-core/{programElements => program-elements}/operationElements.test.ts (100%) rename src/.prototype/syntax-core/{programElements => program-elements}/operationElements.ts (99%) rename src/.prototype/syntax-core/{programElements => program-elements}/valueElements.test.ts (100%) rename src/.prototype/syntax-core/{programElements => program-elements}/valueElements.ts (100%) diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index 0379e87..98484a4 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -17,6 +17,8 @@ export interface ISyntaxElement { elementName: string; /** Stores the instrinsic music and art properties associated with the current context. */ context: IContext | null; + /** Whether argument requires a context. */ + requiresContext: boolean; } export interface IDataElement { @@ -47,8 +49,6 @@ export interface IArgumentElement extends ISyntaxElement { type: TPrimitiveName; /** Returns the primitive element that the argument element returns. */ data: TPrimitive; - /** Whether argument requires a context. */ - requiresContext: boolean; } /** diff --git a/src/.prototype/syntax-core/AST.ts b/src/.prototype/syntax-core/AST.ts index 20fb287..85aa7a1 100644 --- a/src/.prototype/syntax-core/AST.ts +++ b/src/.prototype/syntax-core/AST.ts @@ -17,20 +17,14 @@ export class StartBlock extends BlockElement implements IStartBlock { export class ActionBlock extends BlockElement implements IActionBlock { constructor() { - super('action', 1, { + super('action', 1, true, { name: ['TString'] }); } - onVisit() { - if (this.context === null) { - throw Error(`Invalid context: context cannot be null`); - } - } + onVisit() {} - onExit() { - this.context = null; - } + onExit() {} } // ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- diff --git a/src/.prototype/syntax-core/programElements/conditionalElements.test.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/conditionalElements.test.ts rename to src/.prototype/syntax-core/program-elements/conditionalElements.test.ts diff --git a/src/.prototype/syntax-core/programElements/conditionalElements.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.ts similarity index 98% rename from src/.prototype/syntax-core/programElements/conditionalElements.ts rename to src/.prototype/syntax-core/program-elements/conditionalElements.ts index 83c6d6c..37702f0 100644 --- a/src/.prototype/syntax-core/programElements/conditionalElements.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.ts @@ -3,7 +3,7 @@ import { ArgumentElement, BlockElement } from '../structureElements'; export namespace ConditionalElement { export class IfElseElement extends BlockElement { constructor(elementName?: 'if') { - super(elementName !== undefined ? elementName : 'if-else', 2, { + super(elementName !== undefined ? elementName : 'if-else', 2, false, { condition: ['TBoolean'] }); } diff --git a/src/.prototype/syntax-core/programElements/dataElements.test.ts b/src/.prototype/syntax-core/program-elements/dataElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/dataElements.test.ts rename to src/.prototype/syntax-core/program-elements/dataElements.test.ts diff --git a/src/.prototype/syntax-core/programElements/dataElements.ts b/src/.prototype/syntax-core/program-elements/dataElements.ts similarity index 98% rename from src/.prototype/syntax-core/programElements/dataElements.ts rename to src/.prototype/syntax-core/program-elements/dataElements.ts index 63bae40..0e2c96d 100644 --- a/src/.prototype/syntax-core/programElements/dataElements.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.ts @@ -16,7 +16,7 @@ export namespace DataElement { private _type: TPrimitiveName; constructor(identifier: string, type: TPrimitiveName) { - super(identifier, { + super(identifier, false, { identifier: ['TString'], value: [type] }); @@ -197,7 +197,7 @@ export namespace DataElement { newValue: [TPrimitiveName]; } ) { - super(elementName, constraints); + super(elementName, false, constraints); } set argCurrValue(value: dataValueType | null) { diff --git a/src/.prototype/syntax-core/programElements/loopElements.test.ts b/src/.prototype/syntax-core/program-elements/loopElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/loopElements.test.ts rename to src/.prototype/syntax-core/program-elements/loopElements.test.ts diff --git a/src/.prototype/syntax-core/programElements/loopElements.ts b/src/.prototype/syntax-core/program-elements/loopElements.ts similarity index 97% rename from src/.prototype/syntax-core/programElements/loopElements.ts rename to src/.prototype/syntax-core/program-elements/loopElements.ts index ad902b4..c25fb1f 100644 --- a/src/.prototype/syntax-core/programElements/loopElements.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.ts @@ -12,7 +12,7 @@ export namespace LoopElement { private _counter: number = 0; constructor() { - super('repeat', 1, { + super('repeat', 1, false, { value: ['TInt', 'TFloat'] }); } diff --git a/src/.prototype/syntax-core/programElements/miscellaneousElements.ts b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts similarity index 95% rename from src/.prototype/syntax-core/programElements/miscellaneousElements.ts rename to src/.prototype/syntax-core/program-elements/miscellaneousElements.ts index bb4e4be..7bc5234 100644 --- a/src/.prototype/syntax-core/programElements/miscellaneousElements.ts +++ b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts @@ -3,7 +3,7 @@ import { ArgumentElement, StatementElement } from '../structureElements'; export namespace MiscellaneousElement { export class PrintElement extends StatementElement { constructor() { - super('print', { + super('print', false, { message: ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'] }); } diff --git a/src/.prototype/syntax-core/programElements/operationElements.test.ts b/src/.prototype/syntax-core/program-elements/operationElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/operationElements.test.ts rename to src/.prototype/syntax-core/program-elements/operationElements.test.ts diff --git a/src/.prototype/syntax-core/programElements/operationElements.ts b/src/.prototype/syntax-core/program-elements/operationElements.ts similarity index 99% rename from src/.prototype/syntax-core/programElements/operationElements.ts rename to src/.prototype/syntax-core/program-elements/operationElements.ts index 8c41b17..fa7e78f 100644 --- a/src/.prototype/syntax-core/programElements/operationElements.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.ts @@ -19,7 +19,7 @@ export namespace OperationElement { operator: TArithOp | TRelnOp | TBoolOp, constraints: { operand_1: TPrimitiveName[]; operand_2: TPrimitiveName[] } ) { - super(elementName, type, constraints); + super(elementName, type, false, constraints); this._operator = operator; } diff --git a/src/.prototype/syntax-core/programElements/valueElements.test.ts b/src/.prototype/syntax-core/program-elements/valueElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/valueElements.test.ts rename to src/.prototype/syntax-core/program-elements/valueElements.test.ts diff --git a/src/.prototype/syntax-core/programElements/valueElements.ts b/src/.prototype/syntax-core/program-elements/valueElements.ts similarity index 100% rename from src/.prototype/syntax-core/programElements/valueElements.ts rename to src/.prototype/syntax-core/program-elements/valueElements.ts diff --git a/src/.prototype/syntax-core/structureElements.test.ts b/src/.prototype/syntax-core/structureElements.test.ts index 67c537b..66e060e 100644 --- a/src/.prototype/syntax-core/structureElements.test.ts +++ b/src/.prototype/syntax-core/structureElements.test.ts @@ -62,7 +62,7 @@ describe('class StatementElement', () => { }); test('initialize object with argument constraints and verify initial contents', () => { - stmntElem = new CStatementElement('myStatement', { + stmntElem = new CStatementElement('myStatement', false, { arg_1: ['TInt', 'TChar'], arg_2: ['TString'] }); @@ -117,7 +117,7 @@ describe('class BlockElement', () => { let blockElem: BlockElement; test('initialize object with argument constraints and verify initial contents', () => { - blockElem = new CBlockElement('myBlock', 1, { arg_1: ['TBoolean'] }); + blockElem = new CBlockElement('myBlock', 1, false, { arg_1: ['TBoolean'] }); expect(blockElem.next).toBe(null); if (blockElem.args !== null) { expect(blockElem.args.argNames).toEqual(['arg_1']); diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index ab8a8f7..0ae8e33 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -11,22 +11,28 @@ import { Context } from './context'; abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; private _context: Context | null = null; + private _requiresContext: boolean; - constructor(elementName: string) { + constructor(elementName: string, requiresContext?: boolean) { this._elementName = elementName; + this._requiresContext = requiresContext !== undefined && requiresContext ? true : false; } get elementName() { return this._elementName; } - set context(context: Context) { + set context(context: Context | null) { this._context = context; } get context() { return this._context; } + + get requiresContext() { + return this._requiresContext; + } } // ---- Argument Map ------------------------------------------------------------------------------- @@ -115,7 +121,6 @@ class ArgumentMap implements TS.IArgumentMap { export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { private _argType: 'data' | 'expression'; private _type: TPrimitiveName; - private _requiresContext: boolean; constructor( elementName: string, @@ -123,10 +128,9 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum type: TPrimitiveName, requiresContext?: boolean ) { - super(elementName); + super(elementName, requiresContext); this._argType = argType; this._type = type; - this._requiresContext = requiresContext !== undefined && requiresContext ? true : false; } get argType() { @@ -137,18 +141,14 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum return this._type; } - get requiresContext() { - return this._requiresContext; - } - abstract get data(): TPrimitive; } export abstract class ArgumentDataElement extends ArgumentElement implements TS.IArgumentDataElement { - constructor(elementName: string, type: TPrimitiveName) { - super(elementName, 'data', type); + constructor(elementName: string, type: TPrimitiveName, requiresContext?: boolean) { + super(elementName, 'data', type, requiresContext); } abstract get data(): TPrimitive; @@ -162,13 +162,14 @@ export abstract class ArgumentExpressionElement constructor( elementName: string, type: TPrimitiveName, + requiresContext?: boolean, /** * Certain argument expressions might not take arguments, instead could work on state * objects exposed to the framework. */ constraints?: { [key: string]: TPrimitiveName[] } ) { - super(elementName, 'expression', type); + super(elementName, 'expression', type, requiresContext); this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } @@ -185,8 +186,12 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn private _next: InstructionElement | null = null; private _args: ArgumentMap; - constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(elementName); + constructor( + elementName: string, + requiresContext?: boolean, + constraints?: { [key: string]: TPrimitiveName[] } + ) { + super(elementName, requiresContext); this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } @@ -221,8 +226,12 @@ export class DummyElement extends InstructionElement { } export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { - constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(elementName, constraints); + constructor( + elementName: string, + requiresContext?: boolean, + constraints?: { [key: string]: TPrimitiveName[] } + ) { + super(elementName, requiresContext, constraints); } } @@ -235,9 +244,10 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo constructor( elementName: string, blocksCount: number, + requiresContext?: boolean, constraints?: { [key: string]: TPrimitiveName[] } ) { - super(elementName, constraints); + super(elementName, requiresContext, constraints); if (blocksCount < 1) { throw Error('Invalid argument: number of inner blocks cannot be less than 1'); } From 631b69b3c2bc145f380d7074da7251af94b32d5e Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 31 Jan 2021 00:24:28 +0530 Subject: [PATCH 046/176] Correct element names --- .../syntax-core/program-elements/loopElements.ts | 1 - .../program-elements/operationElements.ts | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/.prototype/syntax-core/program-elements/loopElements.ts b/src/.prototype/syntax-core/program-elements/loopElements.ts index c25fb1f..5982268 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.ts @@ -1,4 +1,3 @@ -import { TFloat, TInt } from '../primitiveElements'; import { ArgumentElement, BlockElement, diff --git a/src/.prototype/syntax-core/program-elements/operationElements.ts b/src/.prototype/syntax-core/program-elements/operationElements.ts index fa7e78f..72f175b 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.ts @@ -92,25 +92,25 @@ export namespace OperationElement { export class SubtractElement extends ArithmeticOperationElement { constructor() { - super('add', 'TFloat', '-'); + super('subtract', 'TFloat', '-'); } } export class MultiplyElement extends ArithmeticOperationElement { constructor() { - super('add', 'TFloat', '*'); + super('multiply', 'TFloat', '*'); } } export class DivideElement extends ArithmeticOperationElement { constructor() { - super('add', 'TFloat', '/'); + super('divide', 'TFloat', '/'); } } export class ModElement extends ArithmeticOperationElement { constructor() { - super('add', 'TFloat', '%'); + super('mod', 'TFloat', '%'); } } @@ -158,13 +158,13 @@ export namespace OperationElement { export class GreaterThanElement extends RelationOperationElement { constructor() { - super('equals', '>'); + super('greater-than', '>'); } } export class LessThanElement extends RelationOperationElement { constructor() { - super('equals', '<'); + super('less-than', '<'); } } From c28ac2611c5daf1c21ddc1d1c390f9424973def9 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 31 Jan 2021 01:54:54 +0530 Subject: [PATCH 047/176] Create message broker --- src/.prototype/broker/@types/broker.d.ts | 10 ++ .../broker/@types/syntaxHandler.d.ts | 33 ++++ src/.prototype/broker/broker.ts | 28 ++++ src/.prototype/broker/syntaxHandler.test.ts | 99 ++++++++++++ src/.prototype/broker/syntaxHandler.ts | 144 ++++++++++++++++++ .../syntax-core/structureElements.ts | 2 +- .../syntax-core/syntaxElementFactory.ts | 72 +++++++++ 7 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 src/.prototype/broker/@types/broker.d.ts create mode 100644 src/.prototype/broker/@types/syntaxHandler.d.ts create mode 100644 src/.prototype/broker/broker.ts create mode 100644 src/.prototype/broker/syntaxHandler.test.ts create mode 100644 src/.prototype/broker/syntaxHandler.ts create mode 100644 src/.prototype/syntax-core/syntaxElementFactory.ts diff --git a/src/.prototype/broker/@types/broker.d.ts b/src/.prototype/broker/@types/broker.d.ts new file mode 100644 index 0000000..1503b3c --- /dev/null +++ b/src/.prototype/broker/@types/broker.d.ts @@ -0,0 +1,10 @@ +import { TQuery as TSyntaxQuery } from './syntaxHandler'; + +export type TMessage = { + target: 'syntax'; + query: TSyntaxQuery; +}; + +export interface IBroker { + processMessage(message: TMessage): Promise; +} diff --git a/src/.prototype/broker/@types/syntaxHandler.d.ts b/src/.prototype/broker/@types/syntaxHandler.d.ts new file mode 100644 index 0000000..9fdeb08 --- /dev/null +++ b/src/.prototype/broker/@types/syntaxHandler.d.ts @@ -0,0 +1,33 @@ +type TQuery = + | { + action: 'create'; + props: { + elementName: string; + }; + } + | { + action: 'remove'; + props: { + elementID: string; + }; + } + | { + action: 'attach-ins'; + props: { + elementID_1: string; + elementID_2: string; + }; + } + | { + action: 'attach-arg'; + props: { + elementID_1: string; + elementID_2: string; + argLabel: string; + }; + }; + +export interface ISyntaxHandler { + /** Processes all messages related to syntax and returns acknowledgement or throws error. */ + processQuery: (query: TQuery) => string; +} diff --git a/src/.prototype/broker/broker.ts b/src/.prototype/broker/broker.ts new file mode 100644 index 0000000..55307db --- /dev/null +++ b/src/.prototype/broker/broker.ts @@ -0,0 +1,28 @@ +import { IBroker, TMessage } from './@types/broker'; +import SyntaxHandler from './syntaxHandler'; + +export class Broker implements IBroker { + private _syntaxHandler: SyntaxHandler; + + constructor() { + this._syntaxHandler = new SyntaxHandler(); + } + + processMessage(message: TMessage): Promise { + return new Promise((resolve, reject) => { + try { + let acknowledgement: string = ''; + switch (message.target) { + case 'syntax': + acknowledgement = this._syntaxHandler.processQuery(message.query); + break; + default: + throw Error('Should not be reached.'); + } + setTimeout(() => resolve(acknowledgement)); + } catch (e) { + reject(e); + } + }); + } +} diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts new file mode 100644 index 0000000..a703bef --- /dev/null +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -0,0 +1,99 @@ +import SyntaxHandler from './syntaxHandler'; +import { SyntaxElement } from '../syntax-core/structureElements'; + +describe('related to Syntax Elements organization', () => { + const synHandler = new SyntaxHandler(); + + type TElemProps = { + elementName: string; + element: SyntaxElement; + type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; + } | null; + + let startElemID: string; + let startElemProps: TElemProps; + let printElemID: string; + let printElemProps: TElemProps; + let addElemID: string; + let addElemProps: TElemProps; + + describe('element creation', () => { + test('create a block element and verify props', () => { + startElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'start' + } + }); + startElemProps = synHandler.getElement(startElemID); + expect(startElemProps).not.toBe(null); + if (startElemProps !== null) { + expect(startElemProps.elementName).toBe('start'); + expect(startElemProps.type).toBe('block'); + expect(startElemProps.element.elementName).toBe('start'); + } else { + throw Error('Object should not be null'); + } + }); + + test('create a statement element and verify props', () => { + printElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'print' + } + }); + printElemProps = synHandler.getElement(printElemID); + expect(printElemProps).not.toBe(null); + if (printElemProps !== null) { + expect(printElemProps.elementName).toBe('print'); + expect(printElemProps.type).toBe('statement'); + expect(printElemProps.element.elementName).toBe('print'); + } else { + throw Error('Object should not be null'); + } + }); + + test('create an argument expression element and verify props', () => { + addElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'add' + } + }); + addElemProps = synHandler.getElement(addElemID); + expect(addElemProps).not.toBe(null); + if (addElemProps !== null) { + expect(addElemProps.elementName).toBe('add'); + expect(addElemProps.type).toBe('arg-exp'); + expect(addElemProps.element.elementName).toBe('add'); + } else { + throw Error('Object should not be null'); + } + }); + }); + + describe('element removal', () => { + test('remove a previously created element and expect element properties fetch with its ID to be null', () => { + synHandler.processQuery({ + action: 'remove', + props: { + elementID: startElemID + } + }); + startElemProps = synHandler.getElement(startElemID); + expect(startElemProps).toBe(null); + }); + + test('attempt ro remove an element with an invalid ID and expect error', () => { + expect(() => { + synHandler.processQuery({ + action: 'remove', + props: { + elementID: 'abcdef' + } + }); + }).toThrowError('Invalid argument: element with ID "abcdef" does not exist.'); + }); + }); +}); diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts new file mode 100644 index 0000000..fe5ac78 --- /dev/null +++ b/src/.prototype/broker/syntaxHandler.ts @@ -0,0 +1,144 @@ +import { ISyntaxHandler, TQuery } from './@types/syntaxHandler'; +import { + ArgumentElement, + ArgumentExpressionElement, + InstructionElement, + SyntaxElement +} from '../syntax-core/structureElements'; +import * as Factory from '../syntax-core/syntaxElementFactory'; + +export default class SyntaxHandler implements ISyntaxHandler { + private _elementMap: { + [key: string]: { + elementName: string; + element: SyntaxElement; + type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; + }; + } = {}; + + constructor() {} + + // -- Utilities ------------------------------------------------------------ + + /** Handles creation of syntax elements. */ + private _handleCreate(elementName: string): string { + const element = Factory.createSyntaxElement(elementName); + let id: string; + do { + id = 'E' + Date.now(); + } while (id in this._elementMap); + this._elementMap[id] = { elementName, ...element }; + return id; + } + + /** Handles removal of syntax elements. */ + private _handleRemove(elementID: string): void { + if (elementID in this._elementMap) { + delete this._elementMap[elementID]; + } else { + throw Error(`Invalid argument: element with ID "${elementID}" does not exist.`); + } + } + + private _handleAttachment( + type: 'instruction' | 'argument', + elementID_1: string, + elementID_2: string | null, + argLabel?: string + ) { + let element_1: SyntaxElement; + let element_2: SyntaxElement | null; + if (elementID_1 in this._elementMap) { + element_1 = this._elementMap[elementID_1].element; + } else { + throw Error(`Invalid ID: element with ID "${elementID_1}" does not exist.`); + } + + if (elementID_2 === null) { + element_2 = null; + } else if (elementID_2 in this._elementMap) { + element_2 = this._elementMap[elementID_2].element; + } else { + throw Error(`Invalid ID: element with ID "${elementID_2}" does not exist.`); + } + + if (type === 'instruction') { + if (!(element_1 instanceof InstructionElement)) { + throw Error( + `Invalid argument: element with ID "${elementID_1}" must be an instruction.` + ); + } else { + if (element_2 !== null && !(element_2 instanceof InstructionElement)) { + throw Error( + `Invalid argument: element with ID "${elementID_2}" must be an instruction.` + ); + } else { + (element_1 as InstructionElement).next = element_2 as InstructionElement | null; + } + } + } else { + if ( + !(element_1 instanceof InstructionElement) && + !(element_1 instanceof ArgumentExpressionElement) + ) { + throw Error( + `Invalid argument: element with ID "${elementID_1}" must be an instruction or an expression.` + ); + } else { + if (element_2 !== null && !(element_2 instanceof ArgumentElement)) { + throw Error( + `Invalid argument: element with ID "${elementID_2}" must be an argument.` + ); + } else { + (element_1 as InstructionElement | ArgumentExpressionElement).args.setArg( + argLabel as string, + element_2 as ArgumentElement | null + ); + } + } + } + } + + /** Handles attachment/detachment of instructions. */ + private _handleInstructionAttachment(elementID_1: string, elementID_2: string | null) { + this._handleAttachment('instruction', elementID_1, elementID_2); + } + + /** Handles attachment/detachment of arguments to instructions/expressions. */ + private _handleArgumentAttachment( + elementID_1: string, + elementID_2: string | null, + argLabel: string + ) { + this._handleAttachment('argument', elementID_1, elementID_2, argLabel); + } + + // -- Actions -------------------------------------------------------------- + + processQuery(query: TQuery): string { + switch (query.action) { + case 'create': + return this._handleCreate(query.props.elementName); + case 'remove': + this._handleRemove(query.props.elementID); + break; + case 'attach-ins': + this._handleInstructionAttachment(query.props.elementID_1, query.props.elementID_2); + break; + case 'attach-arg': + this._handleArgumentAttachment( + query.props.elementID_1, + query.props.elementID_2, + query.props.argLabel + ); + break; + default: + throw Error('Should not be reached.'); + } + return 'successful'; // dummy + } + + getElement(elementID: string) { + return elementID in this._elementMap ? this._elementMap[elementID] : null; + } +} diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 0ae8e33..71cef27 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -8,7 +8,7 @@ import { Context } from './context'; * Super class for all syntax elements. Holds the element name. * Will be tied to the corresponding UI element. */ -abstract class SyntaxElement implements TS.ISyntaxElement { +export abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; private _context: Context | null = null; private _requiresContext: boolean; diff --git a/src/.prototype/syntax-core/syntaxElementFactory.ts b/src/.prototype/syntax-core/syntaxElementFactory.ts new file mode 100644 index 0000000..c38a1b4 --- /dev/null +++ b/src/.prototype/syntax-core/syntaxElementFactory.ts @@ -0,0 +1,72 @@ +import { + ArgumentDataElement, + InstructionElement, + StatementElement, + SyntaxElement +} from './structureElements'; + +import { ActionBlock, StartBlock } from './AST'; +import { ValueElement } from './program-elements/valueElements'; +import { DataElement } from './program-elements/dataElements'; +import { OperationElement } from './program-elements/operationElements'; +import { ConditionalElement } from './program-elements/conditionalElements'; +import { LoopElement } from './program-elements/loopElements'; +import { MiscellaneousElement } from './program-elements/miscellaneousElements'; + +const syntaxElementMap = { + 'start': StartBlock, + 'action': ActionBlock, + 'int': ValueElement.IntElement, + 'float': ValueElement.FloatElement, + 'char': ValueElement.CharElement, + 'string': ValueElement.StringElement, + 'true': ValueElement.TrueElement, + 'false': ValueElement.FalseElement, + // 'data-value-int': ValueElement.IntDataValueElement, + // 'data-value-float': ValueElement.FloatDataValueElement, + // 'data-value-char': ValueElement.CharDataValueElement, + // 'data-value-string': ValueElement.StringDataValueElement, + // 'data-value-boolean': ValueElement.BooleanDataValueElement, + 'data-int': DataElement.IntDataElement, + 'data-float': DataElement.FloatDataElement, + 'data-char': DataElement.CharDataElement, + 'data-string': DataElement.StringDataElement, + 'data-boolean': DataElement.BooleanDataElement, + 'update-data-int': DataElement.UpdateIntDataElement, + 'update-data-float': DataElement.UpdateFloatDataElement, + 'update-data-char': DataElement.UpdateCharDataElement, + 'update-data-string': DataElement.UpdateStringDataElement, + 'update-data-boolean': DataElement.UpdateBooleanDataElement, + 'add': OperationElement.AddElement, + 'subtract': OperationElement.SubtractElement, + 'multiply': OperationElement.MultiplyElement, + 'divide': OperationElement.DivideElement, + 'mod': OperationElement.ModElement, + 'equals': OperationElement.EqualsElement, + 'greater-than': OperationElement.GreaterThanElement, + 'less-than': OperationElement.LessThanElement, + 'and': OperationElement.AndElement, + 'or': OperationElement.OrElement, + 'if': ConditionalElement.IfThenElement, + 'if-else': ConditionalElement.IfElseElement, + 'repeat': LoopElement.RepeatLoopElement, + 'print': MiscellaneousElement.PrintElement +}; + +export function createSyntaxElement( + elementName: string +): { + element: SyntaxElement; + type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; +} { + const element: SyntaxElement = new syntaxElementMap[elementName](); + const type = + element instanceof InstructionElement + ? element instanceof StatementElement + ? 'statement' + : 'block' + : element instanceof ArgumentDataElement + ? 'arg-data' + : 'arg-exp'; + return { element, type }; +} From d016a8701cd492e2049a449bedf3d60f9b5aa452 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 31 Jan 2021 03:35:27 +0530 Subject: [PATCH 048/176] Add argument passing during instantiation --- .../broker/@types/syntaxHandler.d.ts | 1 + src/.prototype/broker/syntaxHandler.test.ts | 25 ++++++++++++++++++- src/.prototype/broker/syntaxHandler.ts | 6 ++--- .../syntax-core/syntaxElementFactory.ts | 7 ++++-- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/.prototype/broker/@types/syntaxHandler.d.ts b/src/.prototype/broker/@types/syntaxHandler.d.ts index 9fdeb08..069d8ac 100644 --- a/src/.prototype/broker/@types/syntaxHandler.d.ts +++ b/src/.prototype/broker/@types/syntaxHandler.d.ts @@ -3,6 +3,7 @@ type TQuery = action: 'create'; props: { elementName: string; + arg?: number | string; }; } | { diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts index a703bef..e3eab18 100644 --- a/src/.prototype/broker/syntaxHandler.test.ts +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -1,5 +1,6 @@ import SyntaxHandler from './syntaxHandler'; import { SyntaxElement } from '../syntax-core/structureElements'; +import { ValueElement } from '../syntax-core/program-elements/valueElements'; describe('related to Syntax Elements organization', () => { const synHandler = new SyntaxHandler(); @@ -16,6 +17,8 @@ describe('related to Syntax Elements organization', () => { let printElemProps: TElemProps; let addElemID: string; let addElemProps: TElemProps; + let intElemID: string; + let intElemProps: TElemProps; describe('element creation', () => { test('create a block element and verify props', () => { @@ -71,6 +74,26 @@ describe('related to Syntax Elements organization', () => { throw Error('Object should not be null'); } }); + + test('create an argument data element and verify props', () => { + intElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'int', + arg: 5 + } + }); + intElemProps = synHandler.getElement(intElemID); + expect(intElemProps).not.toBe(null); + if (intElemProps !== null) { + expect(intElemProps.elementName).toBe('int'); + expect(intElemProps.type).toBe('arg-data'); + expect(intElemProps.element.elementName).toBe('int'); + expect((intElemProps.element as ValueElement.IntElement).data.value).toBe(5); + } else { + throw Error('Object should not be null'); + } + }); }); describe('element removal', () => { @@ -85,7 +108,7 @@ describe('related to Syntax Elements organization', () => { expect(startElemProps).toBe(null); }); - test('attempt ro remove an element with an invalid ID and expect error', () => { + test('attempt to remove an element with an invalid ID and expect error', () => { expect(() => { synHandler.processQuery({ action: 'remove', diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts index fe5ac78..7e83f20 100644 --- a/src/.prototype/broker/syntaxHandler.ts +++ b/src/.prototype/broker/syntaxHandler.ts @@ -21,8 +21,8 @@ export default class SyntaxHandler implements ISyntaxHandler { // -- Utilities ------------------------------------------------------------ /** Handles creation of syntax elements. */ - private _handleCreate(elementName: string): string { - const element = Factory.createSyntaxElement(elementName); + private _handleCreate(elementName: string, arg?: number | string): string { + const element = Factory.createSyntaxElement(elementName, arg); let id: string; do { id = 'E' + Date.now(); @@ -118,7 +118,7 @@ export default class SyntaxHandler implements ISyntaxHandler { processQuery(query: TQuery): string { switch (query.action) { case 'create': - return this._handleCreate(query.props.elementName); + return this._handleCreate(query.props.elementName, query.props.arg); case 'remove': this._handleRemove(query.props.elementID); break; diff --git a/src/.prototype/syntax-core/syntaxElementFactory.ts b/src/.prototype/syntax-core/syntaxElementFactory.ts index c38a1b4..c0259c7 100644 --- a/src/.prototype/syntax-core/syntaxElementFactory.ts +++ b/src/.prototype/syntax-core/syntaxElementFactory.ts @@ -54,12 +54,15 @@ const syntaxElementMap = { }; export function createSyntaxElement( - elementName: string + elementName: string, + arg?: number | string ): { element: SyntaxElement; type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; } { - const element: SyntaxElement = new syntaxElementMap[elementName](); + // ts-ignore + const element: SyntaxElement = + arg !== null ? new syntaxElementMap[elementName](arg) : new syntaxElementMap[elementName](); const type = element instanceof InstructionElement ? element instanceof StatementElement From 16c79f60e6aa8f2369182e48ae79aa981d446b29 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 31 Jan 2021 07:40:51 +0530 Subject: [PATCH 049/176] Fix element instantiation --- src/.prototype/syntax-core/syntaxElementFactory.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/.prototype/syntax-core/syntaxElementFactory.ts b/src/.prototype/syntax-core/syntaxElementFactory.ts index c0259c7..bc0f7a6 100644 --- a/src/.prototype/syntax-core/syntaxElementFactory.ts +++ b/src/.prototype/syntax-core/syntaxElementFactory.ts @@ -60,9 +60,15 @@ export function createSyntaxElement( element: SyntaxElement; type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; } { - // ts-ignore + if (!(elementName in syntaxElementMap)) { + throw Error(`Invalid argument: element with name ${elementName} does not exist.`); + } const element: SyntaxElement = - arg !== null ? new syntaxElementMap[elementName](arg) : new syntaxElementMap[elementName](); + arg !== undefined + ? // @ts-ignore + new syntaxElementMap[elementName](arg) + : // @ts-ignore + new syntaxElementMap[elementName](); const type = element instanceof InstructionElement ? element instanceof StatementElement From 490ff41c9ea20b1c425fd68bd106c6483c627603 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sun, 31 Jan 2021 08:29:42 +0530 Subject: [PATCH 050/176] Update return type of function --- src/.prototype/broker/syntaxHandler.test.ts | 139 ++++++++++++++------ src/.prototype/broker/syntaxHandler.ts | 29 +++- 2 files changed, 128 insertions(+), 40 deletions(-) diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts index e3eab18..f0cef47 100644 --- a/src/.prototype/broker/syntaxHandler.test.ts +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -1,15 +1,23 @@ import SyntaxHandler from './syntaxHandler'; -import { SyntaxElement } from '../syntax-core/structureElements'; +import { + ArgumentDataElement, + ArgumentElement, + ArgumentExpressionElement, + BlockElement, + InstructionElement, + StatementElement +} from '../syntax-core/structureElements'; import { ValueElement } from '../syntax-core/program-elements/valueElements'; +import { DataElement } from '../syntax-core/program-elements/dataElements'; -describe('related to Syntax Elements organization', () => { +describe("related to SyntaxElement objects' organization", () => { const synHandler = new SyntaxHandler(); type TElemProps = { elementName: string; - element: SyntaxElement; + element: BlockElement | StatementElement | ArgumentDataElement | ArgumentExpressionElement; type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; - } | null; + }; let startElemID: string; let startElemProps: TElemProps; @@ -19,6 +27,10 @@ describe('related to Syntax Elements organization', () => { let addElemProps: TElemProps; let intElemID: string; let intElemProps: TElemProps; + let floatElemID: string; + let floatElemProps: TElemProps; + let intDataElemID: string; + let intDataElemProps: TElemProps; describe('element creation', () => { test('create a block element and verify props', () => { @@ -29,14 +41,9 @@ describe('related to Syntax Elements organization', () => { } }); startElemProps = synHandler.getElement(startElemID); - expect(startElemProps).not.toBe(null); - if (startElemProps !== null) { - expect(startElemProps.elementName).toBe('start'); - expect(startElemProps.type).toBe('block'); - expect(startElemProps.element.elementName).toBe('start'); - } else { - throw Error('Object should not be null'); - } + expect(startElemProps.elementName).toBe('start'); + expect(startElemProps.type).toBe('block'); + expect(startElemProps.element.elementName).toBe('start'); }); test('create a statement element and verify props', () => { @@ -47,14 +54,9 @@ describe('related to Syntax Elements organization', () => { } }); printElemProps = synHandler.getElement(printElemID); - expect(printElemProps).not.toBe(null); - if (printElemProps !== null) { - expect(printElemProps.elementName).toBe('print'); - expect(printElemProps.type).toBe('statement'); - expect(printElemProps.element.elementName).toBe('print'); - } else { - throw Error('Object should not be null'); - } + expect(printElemProps.elementName).toBe('print'); + expect(printElemProps.type).toBe('statement'); + expect(printElemProps.element.elementName).toBe('print'); }); test('create an argument expression element and verify props', () => { @@ -65,14 +67,9 @@ describe('related to Syntax Elements organization', () => { } }); addElemProps = synHandler.getElement(addElemID); - expect(addElemProps).not.toBe(null); - if (addElemProps !== null) { - expect(addElemProps.elementName).toBe('add'); - expect(addElemProps.type).toBe('arg-exp'); - expect(addElemProps.element.elementName).toBe('add'); - } else { - throw Error('Object should not be null'); - } + expect(addElemProps.elementName).toBe('add'); + expect(addElemProps.type).toBe('arg-exp'); + expect(addElemProps.element.elementName).toBe('add'); }); test('create an argument data element and verify props', () => { @@ -84,28 +81,94 @@ describe('related to Syntax Elements organization', () => { } }); intElemProps = synHandler.getElement(intElemID); - expect(intElemProps).not.toBe(null); - if (intElemProps !== null) { - expect(intElemProps.elementName).toBe('int'); - expect(intElemProps.type).toBe('arg-data'); - expect(intElemProps.element.elementName).toBe('int'); - expect((intElemProps.element as ValueElement.IntElement).data.value).toBe(5); + expect(intElemProps.elementName).toBe('int'); + expect(intElemProps.type).toBe('arg-data'); + expect(intElemProps.element.elementName).toBe('int'); + expect((intElemProps.element as ArgumentElement).data.value).toBe(5); + }); + }); + + describe('element attachment', () => { + floatElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'float', + arg: 3 + } + }); + floatElemProps = synHandler.getElement(floatElemID); + + intDataElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'data-int' + } + }); + intDataElemProps = synHandler.getElement(intDataElemID); + + test('attach an InstructionElement after an InstructionElement and verify', () => { + (printElemProps.element as InstructionElement).next = intDataElemProps.element as InstructionElement; + const elem = (printElemProps.element as InstructionElement).next; + expect(elem).not.toBe(null); + if (elem !== null) { + expect(elem.elementName).toBe('data-int'); + expect(elem instanceof DataElement.IntDataElement); } else { - throw Error('Object should not be null'); + throw Error('Object cannot be null.'); + } + }); + + test('detach InstructionElement attached to another InstructionElement and verify', () => { + (printElemProps.element as InstructionElement).next = null; + expect((printElemProps.element as InstructionElement).next).toBe(null); + }); + + test('attach a valid ArgumentElement to an InstructionElement and verify', () => { + (printElemProps.element as InstructionElement).args.setArg( + 'message', + intElemProps.element as ArgumentElement + ); + const element = (printElemProps.element as InstructionElement).args.getArg('message'); + expect(element).not.toBe(null); + if (element !== null) { + expect(element.type).toBe('TInt'); + expect(element.elementName).toBe('int'); + expect(element.data.value).toBe(5); + } else { + throw Error('Object cannot not be null.'); + } + }); + + test('attach a valid ArgumentElement to an ArgumentExpressionElement and verify', () => { + (addElemProps.element as ArgumentExpressionElement).args.setArg( + 'operand_1', + floatElemProps.element as ArgumentElement + ); + const element = (addElemProps.element as ArgumentExpressionElement).args.getArg( + 'operand_1' + ); + expect(element).not.toBe(null); + if (element !== null) { + expect(element.type).toBe('TFloat'); + expect(element.elementName).toBe('float'); + expect(element.data.value).toBe(3); + } else { + throw Error('Object cannot not be null.'); } }); }); describe('element removal', () => { - test('remove a previously created element and expect element properties fetch with its ID to be null', () => { + test('remove a previously created element and expect element properties fetch to throw error', () => { synHandler.processQuery({ action: 'remove', props: { elementID: startElemID } }); - startElemProps = synHandler.getElement(startElemID); - expect(startElemProps).toBe(null); + expect(() => synHandler.getElement(startElemID)).toThrowError( + `Invalid argument: element with ID ${startElemID} does not exist.` + ); }); test('attempt to remove an element with an invalid ID and expect error', () => { diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts index 7e83f20..5555bd6 100644 --- a/src/.prototype/broker/syntaxHandler.ts +++ b/src/.prototype/broker/syntaxHandler.ts @@ -1,8 +1,11 @@ import { ISyntaxHandler, TQuery } from './@types/syntaxHandler'; import { + ArgumentDataElement, ArgumentElement, ArgumentExpressionElement, + BlockElement, InstructionElement, + StatementElement, SyntaxElement } from '../syntax-core/structureElements'; import * as Factory from '../syntax-core/syntaxElementFactory'; @@ -138,7 +141,29 @@ export default class SyntaxHandler implements ISyntaxHandler { return 'successful'; // dummy } - getElement(elementID: string) { - return elementID in this._elementMap ? this._elementMap[elementID] : null; + getElement( + elementID: string + ): { + elementName: string; + element: StatementElement | BlockElement | ArgumentDataElement | ArgumentExpressionElement; + type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; + } { + if (!(elementID in this._elementMap)) { + throw Error(`Invalid argument: element with ID ${elementID} does not exist.`); + } + const elementProps = this._elementMap[elementID]; + let element = elementProps.element; + switch (elementProps.type) { + case 'statement': + return { ...elementProps, element: element as StatementElement }; + case 'block': + return { ...elementProps, element: element as BlockElement }; + case 'arg-data': + return { ...elementProps, element: element as ArgumentDataElement }; + case 'arg-exp': + return { ...elementProps, element: element as ArgumentExpressionElement }; + default: + throw Error('Should not be reached.'); + } } } From 4f907567b91fd677ecc7cf856865829a1de88d2f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 5 Feb 2021 10:52:21 +0530 Subject: [PATCH 051/176] Disable JSCPD --- .github/workflows/linter.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 37f3de5..7d737cf 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -57,3 +57,4 @@ jobs: VALIDATE_JAVASCRIPT_STANDARD: false VALIDATE_TYPESCRIPT_STANDARD: false VALIDATE_JSON: false + VALIDATE_JSCPD: false From 24128ff20d298dfe894b545d8052d08a076f075e Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 5 Feb 2021 10:30:01 +0530 Subject: [PATCH 052/176] Add feature to add and remove start elements from syntax handler --- .../broker/@types/syntaxHandler.d.ts | 13 +++++ src/.prototype/broker/syntaxHandler.test.ts | 53 +++++++++++++++---- src/.prototype/broker/syntaxHandler.ts | 41 ++++++++++++-- src/.prototype/syntax-core/@types/AST.d.ts | 6 +++ src/.prototype/syntax-core/AST.ts | 35 +++++------- 5 files changed, 111 insertions(+), 37 deletions(-) diff --git a/src/.prototype/broker/@types/syntaxHandler.d.ts b/src/.prototype/broker/@types/syntaxHandler.d.ts index 069d8ac..8a48de2 100644 --- a/src/.prototype/broker/@types/syntaxHandler.d.ts +++ b/src/.prototype/broker/@types/syntaxHandler.d.ts @@ -1,3 +1,6 @@ +import { IAST } from '../../syntax-core/@types/AST'; +import { ISyntaxElement } from '../../syntax-core/@types/structureElements'; + type TQuery = | { action: 'create'; @@ -31,4 +34,14 @@ type TQuery = export interface ISyntaxHandler { /** Processes all messages related to syntax and returns acknowledgement or throws error. */ processQuery: (query: TQuery) => string; + /** Returns the corresponding syntax element for an elementID. */ + getElement: ( + elementID: string + ) => { + elementName: string; + element: ISyntaxElement; + type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; + }; + /** Returns the AST object. */ + AST: IAST; } diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts index f0cef47..e13abe8 100644 --- a/src/.prototype/broker/syntaxHandler.test.ts +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -9,6 +9,7 @@ import { } from '../syntax-core/structureElements'; import { ValueElement } from '../syntax-core/program-elements/valueElements'; import { DataElement } from '../syntax-core/program-elements/dataElements'; +import { StartBlock } from '../syntax-core/AST'; describe("related to SyntaxElement objects' organization", () => { const synHandler = new SyntaxHandler(); @@ -19,8 +20,8 @@ describe("related to SyntaxElement objects' organization", () => { type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; }; - let startElemID: string; - let startElemProps: TElemProps; + let repeatElemID: string; + let repeatElemProps: TElemProps; let printElemID: string; let printElemProps: TElemProps; let addElemID: string; @@ -31,19 +32,21 @@ describe("related to SyntaxElement objects' organization", () => { let floatElemProps: TElemProps; let intDataElemID: string; let intDataElemProps: TElemProps; + let startElemID: string; + let startElemProps: TElemProps; describe('element creation', () => { - test('create a block element and verify props', () => { - startElemID = synHandler.processQuery({ + test('create a (non-start) block element and verify props', () => { + repeatElemID = synHandler.processQuery({ action: 'create', props: { - elementName: 'start' + elementName: 'repeat' } }); - startElemProps = synHandler.getElement(startElemID); - expect(startElemProps.elementName).toBe('start'); - expect(startElemProps.type).toBe('block'); - expect(startElemProps.element.elementName).toBe('start'); + repeatElemProps = synHandler.getElement(repeatElemID); + expect(repeatElemProps.elementName).toBe('repeat'); + expect(repeatElemProps.type).toBe('block'); + expect(repeatElemProps.element.elementName).toBe('repeat'); }); test('create a statement element and verify props', () => { @@ -86,6 +89,23 @@ describe("related to SyntaxElement objects' organization", () => { expect(intElemProps.element.elementName).toBe('int'); expect((intElemProps.element as ArgumentElement).data.value).toBe(5); }); + + test('create a start element and verify', () => { + startElemID = synHandler.processQuery({ + action: 'create', + props: { + elementName: 'start' + } + }); + startElemProps = synHandler.getElement(startElemID); + expect(startElemProps.elementName).toBe('start'); + expect(startElemProps.type).toBe('block'); + expect(startElemProps.element.elementName).toBe('start'); + expect(startElemProps.element instanceof StartBlock).toBe(true); + expect( + synHandler.AST.startBlocks.indexOf(startElemProps.element as StartBlock) + ).not.toBe(-1); + }); }); describe('element attachment', () => { @@ -160,6 +180,20 @@ describe("related to SyntaxElement objects' organization", () => { describe('element removal', () => { test('remove a previously created element and expect element properties fetch to throw error', () => { + synHandler.processQuery({ + action: 'remove', + props: { + elementID: repeatElemID + } + }); + expect(() => synHandler.getElement(repeatElemID)).toThrowError( + `Invalid argument: element with ID ${repeatElemID} does not exist.` + ); + }); + + test("remove a previously created 'start' element and expect element properties fetch to throw error", () => { + const startElem = synHandler.getElement(startElemID).element; + expect(startElem instanceof StartBlock).toBe(true); synHandler.processQuery({ action: 'remove', props: { @@ -169,6 +203,7 @@ describe("related to SyntaxElement objects' organization", () => { expect(() => synHandler.getElement(startElemID)).toThrowError( `Invalid argument: element with ID ${startElemID} does not exist.` ); + expect(synHandler.AST.startBlocks.indexOf(startElem as StartBlock)).toBe(-1); }); test('attempt to remove an element with an invalid ID and expect error', () => { diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts index 5555bd6..f00c80a 100644 --- a/src/.prototype/broker/syntaxHandler.ts +++ b/src/.prototype/broker/syntaxHandler.ts @@ -9,6 +9,7 @@ import { SyntaxElement } from '../syntax-core/structureElements'; import * as Factory from '../syntax-core/syntaxElementFactory'; +import { AST, StartBlock } from '../syntax-core/AST'; export default class SyntaxHandler implements ISyntaxHandler { private _elementMap: { @@ -18,31 +19,57 @@ export default class SyntaxHandler implements ISyntaxHandler { type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; }; } = {}; + private _AST: AST; - constructor() {} + constructor() { + this._AST = new AST(); + } // -- Utilities ------------------------------------------------------------ - /** Handles creation of syntax elements. */ - private _handleCreate(elementName: string, arg?: number | string): string { - const element = Factory.createSyntaxElement(elementName, arg); + /** Returns an unique ID for syntax elements. */ + private get _newID(): string { let id: string; + // Failsafe. Impossible to get a duplicate under normal circumstances. do { id = 'E' + Date.now(); } while (id in this._elementMap); - this._elementMap[id] = { elementName, ...element }; + return id; + } + + /** Handles creation of syntax elements. */ + private _handleCreate(elementName: string, arg?: number | string): string { + const id = this._newID; + switch (elementName) { + case 'start': + const startElement = this._AST.addStart(); + this._elementMap[id] = { + elementName: 'start', + element: startElement, + type: 'block' + }; + break; + default: + const element = Factory.createSyntaxElement(elementName, arg); + this._elementMap[id] = { elementName, ...element }; + } return id; } /** Handles removal of syntax elements. */ private _handleRemove(elementID: string): void { if (elementID in this._elementMap) { + const element = this._elementMap[elementID].element; + if (element.elementName === 'start') { + this._AST.removeStart(element as StartBlock); + } delete this._elementMap[elementID]; } else { throw Error(`Invalid argument: element with ID "${elementID}" does not exist.`); } } + /** Generic method to handle attachment. */ private _handleAttachment( type: 'instruction' | 'argument', elementID_1: string, @@ -166,4 +193,8 @@ export default class SyntaxHandler implements ISyntaxHandler { throw Error('Should not be reached.'); } } + + get AST(): AST { + return this._AST; + } } diff --git a/src/.prototype/syntax-core/@types/AST.d.ts b/src/.prototype/syntax-core/@types/AST.d.ts index c867c07..f8ccdab 100644 --- a/src/.prototype/syntax-core/@types/AST.d.ts +++ b/src/.prototype/syntax-core/@types/AST.d.ts @@ -5,6 +5,12 @@ export interface IStartBlock extends IBlockElement {} export interface IActionBlock extends IBlockElement {} export interface IAST { + /** Returns list of 'start' elements. */ startBlocks: IStartBlock[]; + /** Returns list of 'action' elements. */ actionBlocks: IActionBlock[]; + /** Creates a new 'start' element and add it to 'start' blocks list. */ + addStart: Function; + /** Removes a 'start' element from 'start' blocks list. */ + removeStart: Function; } diff --git a/src/.prototype/syntax-core/AST.ts b/src/.prototype/syntax-core/AST.ts index 85aa7a1..0e34c37 100644 --- a/src/.prototype/syntax-core/AST.ts +++ b/src/.prototype/syntax-core/AST.ts @@ -30,24 +30,10 @@ export class ActionBlock extends BlockElement implements IActionBlock { // ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- export class AST implements IAST { - /** Stores the singleton instance (once instantiated). */ - private static _instance: AST | undefined; - private _startBlocks: StartBlock[] = []; private _actionBlocks: ActionBlock[] = []; - /** Creates and returns a new instance of the class if one doesn't exist, else returns the existing one. */ - constructor() { - if (AST._instance) { - return AST._instance; - } - AST._instance = this; - } - - /** Getter that returns the singleton instance. */ - static get instance() { - return AST._instance; - } + constructor() {} get startBlocks() { return this._startBlocks; @@ -57,15 +43,18 @@ export class AST implements IAST { return this._actionBlocks; } - get newStart() { - const start = new StartBlock(); - this._startBlocks.push(start); - return start; + addStart(): StartBlock { + const startElement = new StartBlock(); + this._startBlocks.push(startElement); + return startElement; } - get newAction() { - const action = new ActionBlock(); - this._actionBlocks.push(action); - return action; + removeStart(startElement: StartBlock) { + const index = this._startBlocks.indexOf(startElement); + if (index !== -1) { + this._startBlocks.splice(index, 1); + } else { + throw Error(`Start block does not exist in AST.`); + } } } From b9729f4e18c7b367677b7e62acdde14944ab1c81 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 5 Feb 2021 11:33:38 +0530 Subject: [PATCH 053/176] Rename ArgumentElement data getter to getData() --- src/.prototype/broker/syntaxHandler.test.ts | 6 +- .../syntax-core/@types/context.d.ts | 1 + .../syntax-core/@types/structureElements.d.ts | 23 ++-- .../conditionalElements.test.ts | 4 +- .../program-elements/conditionalElements.ts | 2 +- .../program-elements/dataElements.test.ts | 74 +++++------ .../program-elements/dataElements.ts | 22 ++-- .../program-elements/loopElements.test.ts | 4 +- .../program-elements/loopElements.ts | 6 +- .../program-elements/miscellaneousElements.ts | 2 +- .../operationElements.test.ts | 30 ++--- .../program-elements/operationElements.ts | 120 +++++++++++++----- .../program-elements/valueElements.test.ts | 20 +-- .../program-elements/valueElements.ts | 16 +-- .../syntax-core/structureElements.test.ts | 30 ++--- .../syntax-core/structureElements.ts | 112 +++++++--------- 16 files changed, 246 insertions(+), 226 deletions(-) diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts index e13abe8..5dd5bb1 100644 --- a/src/.prototype/broker/syntaxHandler.test.ts +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -87,7 +87,7 @@ describe("related to SyntaxElement objects' organization", () => { expect(intElemProps.elementName).toBe('int'); expect(intElemProps.type).toBe('arg-data'); expect(intElemProps.element.elementName).toBe('int'); - expect((intElemProps.element as ArgumentElement).data.value).toBe(5); + expect((intElemProps.element as ArgumentElement).getData().value).toBe(5); }); test('create a start element and verify', () => { @@ -153,7 +153,7 @@ describe("related to SyntaxElement objects' organization", () => { if (element !== null) { expect(element.type).toBe('TInt'); expect(element.elementName).toBe('int'); - expect(element.data.value).toBe(5); + expect(element.getData().value).toBe(5); } else { throw Error('Object cannot not be null.'); } @@ -171,7 +171,7 @@ describe("related to SyntaxElement objects' organization", () => { if (element !== null) { expect(element.type).toBe('TFloat'); expect(element.elementName).toBe('float'); - expect(element.data.value).toBe(3); + expect(element.getData().value).toBe(3); } else { throw Error('Object cannot not be null.'); } diff --git a/src/.prototype/syntax-core/@types/context.d.ts b/src/.prototype/syntax-core/@types/context.d.ts index d3898e2..cb9d7a7 100644 --- a/src/.prototype/syntax-core/@types/context.d.ts +++ b/src/.prototype/syntax-core/@types/context.d.ts @@ -1 +1,2 @@ +/** Stores the instrinsic music and art properties associated with the current context. */ export interface IContext {} diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index 98484a4..be86dc6 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -15,16 +15,11 @@ import { IContext } from './context'; export interface ISyntaxElement { /** Name of the supported syntax element. Different from identifiers. */ elementName: string; - /** Stores the instrinsic music and art properties associated with the current context. */ - context: IContext | null; /** Whether argument requires a context. */ requiresContext: boolean; } -export interface IDataElement { - /** A primitive element. */ - data: TPrimitive; -} +export interface IDataElement {} export interface IExpressionElement {} @@ -34,13 +29,15 @@ export interface IExpressionElement {} */ export interface IArgumentMap { /** Returns the list of argument labels. */ - argNames: string[]; + argLabels: string[]; /** Assigns an ArgumentElement | null corresponding to an argument label. */ setArg: Function; /** Returns the ArgumentElement | null corresponding to an argument label. */ getArg: Function; } +// ---- Argument elements -------------------------------------------------------------------------- + /** To be implemented by the super-class of all argument elements. */ export interface IArgumentElement extends ISyntaxElement { /** Whether data argument element or expression argument element. */ @@ -48,30 +45,34 @@ export interface IArgumentElement extends ISyntaxElement { /** Return type of the argument element. */ type: TPrimitiveName; /** Returns the primitive element that the argument element returns. */ - data: TPrimitive; + getData: (context?: IContext) => TPrimitive; } /** * To be implemented by sub-classes of class that implement IArgumentElement and represent data * arguments. */ -export interface IArgumentDataElement extends ISyntaxElement, IDataElement {} +export interface IArgumentDataElement extends IArgumentElement, IDataElement {} /** * To be implemented by sub-classes of class that implement IArgumentElement and represent * expression arguments. */ -export interface IArgumentExpressionElement extends ISyntaxElement, IExpressionElement { +export interface IArgumentExpressionElement extends IArgumentElement, IExpressionElement { /** Stores an object of the class that implements IArgumentMap. */ args: IArgumentMap; } +// ---- Instruction elements ----------------------------------------------------------------------- + /** To be implemented by the super-class of all instruction elements. */ interface IInstructionElement extends ISyntaxElement { /** Stores an object of the class that implements IArgumentMap. */ args: IArgumentMap; /** Stores the reference to the next instruction in stack. */ next: IInstructionElement | null; + /** Triggered before instruction is executed. */ + onVisit: (context?: IContext) => void; } /** @@ -91,4 +92,6 @@ export interface IBlockElement extends IInstructionElement { getChildHead: (index: number) => IInstructionElement | null; /** Initial head instruction. */ childHead: IInstructionElement | null; + /** Triggered after block instruction is executed. */ + onExit: (context?: IContext) => void; } diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts index dbc1e4d..bd02e2d 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts @@ -8,8 +8,8 @@ class CStatementElement extends StatementElement { } describe('namespace ConditionalElement', () => { - const statement_1 = new CStatementElement('statement-1'); - const statement_2 = new CStatementElement('statement-2'); + const statement_1 = new CStatementElement('statement-1', false); + const statement_2 = new CStatementElement('statement-2', false); describe('class IfElseElement', () => { const ifElseElem = new ConditionalElement.IfElseElement(); diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.ts index 37702f0..7a8fa3d 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.ts @@ -22,7 +22,7 @@ export namespace ConditionalElement { if (arg === null) { throw Error('Invalid argument: condition cannot be null'); } - this.childHead = this.getChildHead(arg.data.value ? 0 : 1); + this.childHead = this.getChildHead(arg.getData().value ? 0 : 1); } onExit() {} diff --git a/src/.prototype/syntax-core/program-elements/dataElements.test.ts b/src/.prototype/syntax-core/program-elements/dataElements.test.ts index f3eb66c..dc8ceb3 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.test.ts @@ -9,9 +9,9 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.IntElement(5); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.data.value).toBe(5); + expect(arg.getData().value).toBe(5); } else { - throw Error('Object should not be null'); + throw Error('Object should not be null.'); } }); @@ -20,7 +20,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.IntDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize FloatDataElement with FloatElement object and verify', () => { @@ -29,9 +29,9 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.FloatElement(5.234); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.data.value).toBe(5.234); + expect(arg.getData().value).toBe(5.234); } else { - throw Error('Object should not be null'); + throw Error('Object should not be null.'); } }); @@ -40,7 +40,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.FloatDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize CharDataElement with CharElement object and verify', () => { @@ -49,9 +49,9 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.CharElement(97); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.data.value).toBe('a'); + expect(arg.getData().value).toBe('a'); } else { - throw Error('Object should not be null'); + throw Error('Object should not be null.'); } }); @@ -60,7 +60,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.CharDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize StringDataElement with StringElement object and verify', () => { @@ -69,9 +69,9 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.StringElement('string'); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.data.value).toBe('string'); + expect(arg.getData().value).toBe('string'); } else { - throw Error('Object should not be null'); + throw Error('Object should not be null.'); } }); @@ -80,7 +80,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.StringDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.TrueElement(); - }).toThrowError('Invalid argument: "TBoolean" is not a valid type for "value"'); + }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize BooleanDataElement with BooleanElement object and verify', () => { @@ -89,9 +89,9 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.TrueElement(); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.data.value).toBe(true); + expect(arg.getData().value).toBe(true); } else { - throw Error('Object should not be null'); + throw Error('Object should not be null.'); } }); @@ -100,7 +100,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = new ValueElement.IntElement(5); - }).toThrowError('Invalid argument: "TInt" is not a valid type for "value"'); + }).toThrowError('"TInt" is not a valid type for "value".'); }); // test('initialize AnyDataElement with StringElement object and verify', () => { @@ -123,8 +123,8 @@ describe('namespace DataElement', () => { dataElem.argValue = new ValueElement.IntElement(5); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.IntDataValueElement).toBe(true); - expect(valueElement.data.value).toBe(5); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe(5); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -132,9 +132,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.IntDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.dataElementRef).toThrowError( - 'Invalid argument: value cannot be null' - ); + expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a FloatDataElement', () => { @@ -144,8 +142,8 @@ describe('namespace DataElement', () => { dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.FloatDataValueElement).toBe(true); - expect(valueElement.data.value).toBe(2.71828); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe(2.71828); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -153,9 +151,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.FloatDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.dataElementRef).toThrowError( - 'Invalid argument: value cannot be null' - ); + expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a CharDataElement', () => { @@ -165,8 +161,8 @@ describe('namespace DataElement', () => { dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); - expect(valueElement.data.value).toBe('a'); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe('a'); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -174,9 +170,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.CharDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.dataElementRef).toThrowError( - 'Invalid argument: value cannot be null' - ); + expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a StringDataElement', () => { @@ -186,8 +180,8 @@ describe('namespace DataElement', () => { dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); - expect(valueElement.data.value).toBe('string'); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe('string'); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -195,9 +189,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.StringDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.dataElementRef).toThrowError( - 'Invalid argument: value cannot be null' - ); + expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a BooleanDataElement with TrueElement', () => { @@ -207,8 +199,8 @@ describe('namespace DataElement', () => { dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - expect(valueElement.data.value).toBe(true); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe(true); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -219,8 +211,8 @@ describe('namespace DataElement', () => { dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - expect(valueElement.data.value).toBe(false); - const dataElement = valueElement.data; + expect(valueElement.getData().value).toBe(false); + const dataElement = valueElement.getData(); expect(dataElement).toEqual(dataElem.dataElementRef); }); @@ -228,9 +220,7 @@ describe('namespace DataElement', () => { const dataElem = new DataElement.BooleanDataElement(); dataElem.argIdentifier = new ValueElement.StringElement('myBox'); dataElem.argValue = null; - expect(() => dataElem.dataElementRef).toThrowError( - 'Invalid argument: value cannot be null' - ); + expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); // test('verify created ValueElement after executing a AnyDataElement', () => { diff --git a/src/.prototype/syntax-core/program-elements/dataElements.ts b/src/.prototype/syntax-core/program-elements/dataElements.ts index 0e2c96d..23fae8b 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.ts @@ -64,9 +64,9 @@ export namespace DataElement { get dataElementRef() { const arg = this.argValue; if (arg === null) { - throw Error('Invalid argument: value cannot be null'); + throw Error('Value cannot be null.'); } else { - return arg.data as TInt; + return arg.getData() as TInt; } } @@ -85,9 +85,9 @@ export namespace DataElement { get dataElementRef() { const arg = this.argValue; if (arg === null) { - throw Error('Invalid argument: value cannot be null'); + throw Error('Value cannot be null.'); } else { - return arg.data as TFloat; + return arg.getData() as TFloat; } } @@ -106,9 +106,9 @@ export namespace DataElement { get dataElementRef() { const arg = this.argValue; if (arg === null) { - throw Error('Invalid argument: value cannot be null'); + throw Error('Value cannot be null.'); } else { - return arg.data as TChar; + return arg.getData() as TChar; } } @@ -127,9 +127,9 @@ export namespace DataElement { get dataElementRef() { const arg = this.argValue; if (arg === null) { - throw Error('Invalid argument: value cannot be null'); + throw Error('Value cannot be null.'); } else { - return arg.data as TString; + return arg.getData() as TString; } } @@ -148,9 +148,9 @@ export namespace DataElement { get dataElementRef() { const arg = this.argValue; if (arg === null) { - throw Error('Invalid argument: value cannot be null'); + throw Error('Value cannot be null.'); } else { - return arg.data as TBoolean; + return arg.getData() as TBoolean; } } @@ -220,7 +220,7 @@ export namespace DataElement { const argCurr = this.argCurrValue; const argNew = this.argNewValue; if (argCurr !== null && argNew !== null) { - argCurr.data.value = argNew.data.value; + argCurr.getData().value = argNew.getData().value; } } } diff --git a/src/.prototype/syntax-core/program-elements/loopElements.test.ts b/src/.prototype/syntax-core/program-elements/loopElements.test.ts index 8d7ecad..af81d1e 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.test.ts @@ -19,9 +19,7 @@ describe('namespace LoopElement', () => { test('Repeat with a null value and expect error', () => { repeatElem.argValue = null; - expect(() => repeatElem.onVisit()).toThrowError( - 'Invalid argument: Repeat loop needs a positive value' - ); + expect(() => repeatElem.onVisit()).toThrowError('Repeat loop needs a positive value.'); }); }); }); diff --git a/src/.prototype/syntax-core/program-elements/loopElements.ts b/src/.prototype/syntax-core/program-elements/loopElements.ts index 5982268..d4f73a5 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.ts @@ -22,13 +22,13 @@ export namespace LoopElement { onVisit() { const arg = this.args.getArg('value'); - if (arg === null || arg.data.value < 0) { - throw Error('Invalid argument: Repeat loop needs a positive value'); + if (arg === null || arg.getData().value < 0) { + throw Error('Repeat loop needs a positive value.'); } else { // Not already repeating. if (this._nextStore !== null && this._nextStore.isDummy) { this._nextStore = this.next; - this._counter = arg.data.value as number; + this._counter = arg.getData().value as number; } } this.childHead = this.getChildHead(0); diff --git a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts index 7bc5234..36c7190 100644 --- a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts +++ b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts @@ -16,7 +16,7 @@ export namespace MiscellaneousElement { onVisit() { const arg = this.args.getArg('message'); if (arg !== null) { - console.log(`" ${arg.data.value} "`); + console.log(`" ${arg.getData().value} "`); } else { console.log(`" ${null} "`); } diff --git a/src/.prototype/syntax-core/program-elements/operationElements.test.ts b/src/.prototype/syntax-core/program-elements/operationElements.test.ts index 32b3e1a..3a91879 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.test.ts @@ -6,7 +6,7 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.AddElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); @@ -15,7 +15,7 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.AddElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.IntElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); @@ -24,14 +24,14 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.AddElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = null; - expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); }); test('supply two valid ArgumentElements to SubtractElement and verify', () => { const operElem = new OperationElement.SubtractElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(11.5); }); @@ -40,7 +40,7 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.MultiplyElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(62); }); @@ -49,7 +49,7 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.DivideElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.875); }); @@ -58,7 +58,7 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.ModElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.5); }); @@ -69,7 +69,7 @@ describe('relation operations', () => { const operElem = new OperationElement.EqualsElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(15.5); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); @@ -78,7 +78,7 @@ describe('relation operations', () => { const operElem = new OperationElement.EqualsElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.0); operElem.argOperand_2 = new ValueElement.IntElement(15); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); @@ -87,14 +87,14 @@ describe('relation operations', () => { const operElem = new OperationElement.EqualsElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = null; - expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); }); test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { const operElem = new OperationElement.GreaterThanElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); @@ -103,7 +103,7 @@ describe('relation operations', () => { const operElem = new OperationElement.LessThanElement(); operElem.argOperand_1 = new ValueElement.FloatElement(15.5); operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(false); }); @@ -114,7 +114,7 @@ describe('boolean operations', () => { const operElem = new OperationElement.AndElement(); operElem.argOperand_1 = new ValueElement.TrueElement(); operElem.argOperand_2 = new ValueElement.TrueElement(); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); @@ -123,14 +123,14 @@ describe('boolean operations', () => { const operElem = new OperationElement.AndElement(); operElem.argOperand_1 = new ValueElement.TrueElement(); operElem.argOperand_2 = null; - expect(() => operElem.data).toThrowError('Invalid argument: "operand_2" cannot be null'); + expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); }); test('supply two valid ArgumentElements to OrElement and verify', () => { const operElem = new OperationElement.OrElement(); operElem.argOperand_1 = new ValueElement.TrueElement(); operElem.argOperand_2 = new ValueElement.FalseElement(); - const resElem = operElem.data; + const resElem = operElem.getData(); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); diff --git a/src/.prototype/syntax-core/program-elements/operationElements.ts b/src/.prototype/syntax-core/program-elements/operationElements.ts index 72f175b..b156d9b 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.ts @@ -41,7 +41,7 @@ export namespace OperationElement { return this._operand_2; } - abstract get data(): TPrimitive; + abstract getData(): TPrimitive; } // -- Arithmetic Operators --------------------------------------------------------------------- @@ -54,32 +54,57 @@ export namespace OperationElement { }); } - get data(): TPrimitive { + getData(): TPrimitive { if (this._operand_1 === null) { - throw Error(`Invalid argument: "operand_1" cannot be null`); + throw Error(`"operand_1" cannot be null.`); } if (this._operand_2 === null) { - throw Error(`Invalid argument: "operand_2" cannot be null`); + throw Error(`"operand_2" cannot be null.`); } - if (!(this._operand_1.data instanceof TInt || this._operand_1.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_1" can only be of type TInt or TFloat`); + if ( + !( + this._operand_1.getData() instanceof TInt || + this._operand_1.getData() instanceof TFloat + ) + ) { + throw Error(`"operand_1" can only be of type TInt or TFloat.`); } - if (!(this._operand_2.data instanceof TInt || this._operand_2.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_2" can only be of type TInt or TFloat`); + if ( + !( + this._operand_2.getData() instanceof TInt || + this._operand_2.getData() instanceof TFloat + ) + ) { + throw Error(`"operand_2" can only be of type TInt or TFloat.`); } switch (this._operator) { case '+': - return TFloat.add(this._operand_1.data, this._operand_2.data); + return TFloat.add( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '-': - return TFloat.subtract(this._operand_1.data, this._operand_2.data); + return TFloat.subtract( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '*': - return TFloat.multiply(this._operand_1.data, this._operand_2.data); + return TFloat.multiply( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '/': - return TFloat.divide(this._operand_1.data, this._operand_2.data); + return TFloat.divide( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '%': - return TFloat.mod(this._operand_1.data, this._operand_2.data); + return TFloat.mod( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); default: - throw Error(`Invalid access: this should not be reachable`); + throw Error(`Should not be reached.`); } } } @@ -124,28 +149,47 @@ export namespace OperationElement { }); } - get data(): TBoolean { + getData(): TBoolean { if (this._operand_1 === null) { - throw Error(`Invalid argument: "operand_1" cannot be null`); + throw Error(`"operand_1" cannot be null.`); } if (this._operand_2 === null) { - throw Error(`Invalid argument: "operand_2" cannot be null`); + throw Error(`"operand_2" cannot be null.`); } - if (!(this._operand_1.data instanceof TInt || this._operand_1.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_1" can only be of type TInt or TFloat`); + if ( + !( + this._operand_1.getData() instanceof TInt || + this._operand_1.getData() instanceof TFloat + ) + ) { + throw Error(`"operand_1" can only be of type TInt or TFloat.`); } - if (!(this._operand_2.data instanceof TInt || this._operand_2.data instanceof TFloat)) { - throw Error(`Invalid argument: "operand_2" can only be of type TInt or TFloat`); + if ( + !( + this._operand_2.getData() instanceof TInt || + this._operand_2.getData() instanceof TFloat + ) + ) { + throw Error(`"operand_2" can only be of type TInt or TFloat.`); } switch (this._operator) { case '==': - return TFloat.equals(this._operand_1.data, this._operand_2.data); + return TFloat.equals( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '>': - return TFloat.greaterThan(this._operand_1.data, this._operand_2.data); + return TFloat.greaterThan( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); case '<': - return TFloat.lessThan(this._operand_1.data, this._operand_2.data); + return TFloat.lessThan( + this._operand_1.getData() as TInt | TFloat, + this._operand_2.getData() as TInt | TFloat + ); default: - throw Error(`Invalid access: this should not be reachable`); + throw Error(`Should not be reached.`); } } } @@ -178,26 +222,32 @@ export namespace OperationElement { }); } - get data(): TBoolean { + getData(): TBoolean { if (this._operand_1 === null) { - throw Error(`Invalid argument: "operand_1" cannot be null`); + throw Error(`"operand_1" cannot be null.`); } if (this._operand_2 === null) { - throw Error(`Invalid argument: "operand_2" cannot be null`); + throw Error(`"operand_2" cannot be null.`); } - if (!(this._operand_1.data instanceof TBoolean)) { - throw Error(`Invalid argument: "operand_1" can only be of type TBoolean`); + if (!(this._operand_1.getData() instanceof TBoolean)) { + throw Error(`"operand_1" can only be of type TBoolean.`); } - if (!(this._operand_2.data instanceof TBoolean)) { - throw Error(`Invalid argument: "operand_2" can only be of type TBoolean`); + if (!(this._operand_2.getData() instanceof TBoolean)) { + throw Error(`"operand_2" can only be of type TBoolean.`); } switch (this._operator) { case '&&': - return TBoolean.and(this._operand_1.data, this._operand_2.data); + return TBoolean.and( + this._operand_1.getData() as TBoolean, + this._operand_2.getData() as TBoolean + ); case '||': - return TBoolean.or(this._operand_1.data, this._operand_2.data); + return TBoolean.or( + this._operand_1.getData() as TBoolean, + this._operand_2.getData() as TBoolean + ); default: - throw Error(`Invalid access: this should not be reachable`); + throw Error(`Should not be reached.`); } } } diff --git a/src/.prototype/syntax-core/program-elements/valueElements.test.ts b/src/.prototype/syntax-core/program-elements/valueElements.test.ts index 6f6a992..de3a119 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.test.ts @@ -9,47 +9,47 @@ describe('namespace ValueElement', () => { describe('instantiation and value verification', () => { test('instantiate a IntElement with 5 and expect 5 to be data', () => { intValElem = new ValueElement.IntElement(5); - expect(intValElem.data.value).toBe(5); + expect(intValElem.getData().value).toBe(5); }); test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { floatValElem = new ValueElement.FloatElement(2.71828); - expect(floatValElem.data.value).toBe(2.71828); + expect(floatValElem.getData().value).toBe(2.71828); }); test('instantiate a CharElement with 97 and expect "a" to be data', () => { charValElem = new ValueElement.CharElement(97); - expect(charValElem.data.value).toBe('a'); + expect(charValElem.getData().value).toBe('a'); }); test('instantiate a StringElement with "string" and expect "string" to be data', () => { stringValElem = new ValueElement.StringElement('string'); - expect(stringValElem.data.value).toBe('string'); + expect(stringValElem.getData().value).toBe('string'); }); test('instantiate a TrueElement and expect true to be data', () => { - expect(new ValueElement.TrueElement().data.value).toBe(true); + expect(new ValueElement.TrueElement().getData().value).toBe(true); }); test('instantiate a FalseElement and expect false to be data', () => { - expect(new ValueElement.FalseElement().data.value).toBe(false); + expect(new ValueElement.FalseElement().getData().value).toBe(false); }); }); describe('value updation', () => { test('update IntElement value to 2 and expect 2 to be data', () => { intValElem.update(2); - expect(intValElem.data.value).toBe(2); + expect(intValElem.getData().value).toBe(2); }); test('update FloatElement value to 3.1415 and expect 3.1415 to be data', () => { floatValElem.update(3.1415); - expect(floatValElem.data.value).toBe(3.1415); + expect(floatValElem.getData().value).toBe(3.1415); }); test('update CharElement value to "x" and expect "x" to be data', () => { charValElem.update('x'); - expect(charValElem.data.value).toBe('x'); + expect(charValElem.getData().value).toBe('x'); }); test('update StringElement value to "another" and expect "another" to be data', () => { stringValElem.update('another'); - expect(stringValElem.data.value).toBe('another'); + expect(stringValElem.getData().value).toBe('another'); }); }); }); diff --git a/src/.prototype/syntax-core/program-elements/valueElements.ts b/src/.prototype/syntax-core/program-elements/valueElements.ts index cee6cfc..59eb8c7 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.ts @@ -19,11 +19,11 @@ export namespace ValueElement { private _data: TPrimitive; constructor(elementName: string, data: TPrimitive) { - super(elementName, data.type); + super(elementName, data.type, false); this._data = data; } - get data() { + getData() { return this._data; } } @@ -35,7 +35,7 @@ export namespace ValueElement { } update(value: number) { - this.data.value = value; + this.getData().value = value; } } @@ -46,7 +46,7 @@ export namespace ValueElement { } update(value: number) { - this.data.value = value; + this.getData().value = value; } } @@ -57,7 +57,7 @@ export namespace ValueElement { } update(value: string | number) { - this.data.value = value; + this.getData().value = value; } } @@ -68,7 +68,7 @@ export namespace ValueElement { } update(value: string) { - this.data.value = value; + this.getData().value = value; } } @@ -90,12 +90,12 @@ export namespace ValueElement { private _dataElementRef: dataElemType; constructor(elementName: string, dataElement: dataElemType) { - super(elementName, dataElement.type); + super(elementName, dataElement.type, false); this._dataElementRef = dataElement; } /** @override */ - get data() { + getData() { return this._dataElementRef.dataElementRef; } } diff --git a/src/.prototype/syntax-core/structureElements.test.ts b/src/.prototype/syntax-core/structureElements.test.ts index 66e060e..be4cd1b 100644 --- a/src/.prototype/syntax-core/structureElements.test.ts +++ b/src/.prototype/syntax-core/structureElements.test.ts @@ -8,13 +8,13 @@ import { /** Dummy class to extend abstract class ArgumentDataElement. */ class CArgumentDataElement extends ArgumentDataElement { - get data() { + getData() { return new TInt(5); } } /** Dummy class to extend abstract class ArgumentExpressionElement. */ class CArgumentExpressionElement extends ArgumentExpressionElement { - get data() { + getData() { return new TInt(5); } } @@ -33,21 +33,21 @@ let argExpr: ArgumentExpressionElement; describe('class ArgumentDataElement', () => { test("intialize dummy ArgumentDataElement's subclass with valid arbitrary arguments and verify contents", () => { - argData = new CArgumentDataElement('myArgData', 'TInt'); + argData = new CArgumentDataElement('myArgData', 'TInt', false); expect(argData.elementName).toBe('myArgData'); expect(argData.type).toBe('TInt'); expect(argData.argType).toBe('data'); - expect(argData.data.value).toBe(5); + expect(argData.getData().value).toBe(5); }); }); describe('class ArgumentExpressionElement', () => { test("initialize dummy ArgumentExpressionElement's subclass with valid arbitrary arguments and verify contents", () => { - argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); + argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt', false); expect(argExpr.elementName).toBe('myArgExpression'); expect(argExpr.type).toBe('TInt'); expect(argExpr.argType).toBe('expression'); - expect(argExpr.data.value).toBe(5); + expect(argExpr.getData().value).toBe(5); }); }); @@ -55,9 +55,9 @@ let stmntElem: StatementElement; describe('class StatementElement', () => { test('initialize object with no argument constraints and expect error on fetching argument labels', () => { - stmntElem = new CStatementElement('yourStatement'); - expect(() => stmntElem.args.argNames).toThrowError( - `Invalid access: instruction "yourStatement" does not take arguments` + stmntElem = new CStatementElement('yourStatement', false); + expect(() => stmntElem.args.argLabels).toThrowError( + `"yourStatement" does not take arguments.` ); }); @@ -67,7 +67,7 @@ describe('class StatementElement', () => { arg_2: ['TString'] }); try { - expect(stmntElem.args.argNames).toEqual(['arg_1', 'arg_2']); + expect(stmntElem.args.argLabels).toEqual(['arg_1', 'arg_2']); } catch (e) { console.error(e); } @@ -78,7 +78,7 @@ describe('class StatementElement', () => { stmntElem.args.setArg('arg_1', argData); const arg = stmntElem.args.getArg('arg_1'); if (arg !== null) { - expect(arg.data.value).toEqual(5); + expect(arg.getData().value).toEqual(5); } } catch (e) { console.error(e); @@ -96,19 +96,19 @@ describe('class StatementElement', () => { test('try to fetch argument for invalid argument label and expect error', () => { expect(() => stmntElem.args.getArg('arg_3')).toThrowError( - 'Invalid argument: "arg_3" does not exist for instruction "myStatement"' + '"arg_3" does not exist for "myStatement".' ); }); test('try to assign argument for invalid argument label and expect error', () => { expect(() => stmntElem.args.setArg('arg_3', null)).toThrowError( - 'Invalid argument: "arg_3" does not exist for instruction "myStatement"' + '"arg_3" does not exist for "myStatement".' ); }); test('try to assign invalid return-type argument for valid argument label and expect error', () => { expect(() => stmntElem.args.setArg('arg_2', argData)).toThrowError( - 'Invalid argument: "TInt" is not a valid type for "arg_2"' + '"TInt" is not a valid type for "arg_2".' ); }); }); @@ -120,7 +120,7 @@ describe('class BlockElement', () => { blockElem = new CBlockElement('myBlock', 1, false, { arg_1: ['TBoolean'] }); expect(blockElem.next).toBe(null); if (blockElem.args !== null) { - expect(blockElem.args.argNames).toEqual(['arg_1']); + expect(blockElem.args.argLabels).toEqual(['arg_1']); } else { throw Error('object should not be null'); } diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 71cef27..3ae07ec 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -10,26 +10,17 @@ import { Context } from './context'; */ export abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; - private _context: Context | null = null; private _requiresContext: boolean; - constructor(elementName: string, requiresContext?: boolean) { + constructor(elementName: string, requiresContext: boolean) { this._elementName = elementName; - this._requiresContext = requiresContext !== undefined && requiresContext ? true : false; + this._requiresContext = requiresContext; } get elementName() { return this._elementName; } - set context(context: Context | null) { - this._context = context; - } - - get context() { - return this._context; - } - get requiresContext() { return this._requiresContext; } @@ -39,78 +30,72 @@ export abstract class SyntaxElement implements TS.ISyntaxElement { /** ADT that handles the mapping and interfacing of arguments to expressions/instructions. */ class ArgumentMap implements TS.IArgumentMap { - private _instruction: string; + private _elementName: string; private _argMap: { [key: string]: ArgumentElement | null } = {}; private _argTypeMap: { [key: string]: TPrimitiveName[] } | null = null; - constructor(instruction: string, constraints: { [key: string]: TPrimitiveName[] } | null) { - this._instruction = instruction; + constructor(elementName: string, constraints: { [key: string]: TPrimitiveName[] } | null) { + this._elementName = elementName; if (constraints === null) { return this; } else { this._argTypeMap = constraints; - Object.keys(this._argTypeMap).forEach((argName) => (this._argMap[argName] = null)); + Object.keys(this._argTypeMap).forEach((argLabel) => (this._argMap[argLabel] = null)); } } /** * Checks if and argument label exists for the corresponding instruction/expression. - * @throws Invalid argument, Invalid access + * @throws Error */ - private _validateArgName(argName: string): void { + private _validateArgLabel(argLabel: string): void { if (this._argTypeMap === null) { - throw Error( - `Invalid access: instruction "${this._instruction}" does not take arguments` - ); + throw Error(`"${this._elementName}" does not take arguments.`); } - if (Object.keys(this._argTypeMap).indexOf(argName) === -1) { - throw Error( - `Invalid argument: "${argName}" does not exist for instruction "${this._instruction}"` - ); + if (Object.keys(this._argTypeMap).indexOf(argLabel) === -1) { + throw Error(`"${argLabel}" does not exist for "${this._elementName}".`); } } /** * Type-checks the type of the argument element with the constraints of the argument label. - * @throws Invalid argument, Invalid access + * @throws Error */ - private _validateArg(argName: string, arg: ArgumentElement | null): void { - this._validateArgName(argName); + private _validateArg(argLabel: string, arg: ArgumentElement | null): void { + this._validateArgLabel(argLabel); if ( arg !== null && this._argTypeMap !== null && - this._argTypeMap[argName].indexOf(arg.type) === -1 + this._argTypeMap[argLabel].indexOf(arg.type) === -1 ) { // Allow higher type casting. if ( !( - (arg.type === 'TInt' && this._argTypeMap[argName].indexOf('TFloat') !== -1) || - (arg.type === 'TChar' && this._argTypeMap[argName].indexOf('TString') !== -1) + (arg.type === 'TInt' && this._argTypeMap[argLabel].indexOf('TFloat') !== -1) || + (arg.type === 'TChar' && this._argTypeMap[argLabel].indexOf('TString') !== -1) ) ) { - throw Error(`Invalid argument: "${arg.type}" is not a valid type for "${argName}"`); + throw Error(`"${arg.type}" is not a valid type for "${argLabel}".`); } } } - /** @throws Invalid argument, Invalid access */ - setArg(argName: string, argElement: ArgumentElement | null): void { - this._validateArg(argName, argElement); - this._argMap[argName] = argElement; + /** @throws Error */ + setArg(argLabel: string, arg: ArgumentElement | null): void { + this._validateArg(argLabel, arg); + this._argMap[argLabel] = arg; } - /** @throws Invalid argument, Invalid access */ - getArg(argName: string): ArgumentElement | null { - this._validateArgName(argName); - return this._argMap[argName]; + /** @throws Error */ + getArg(argLabel: string): ArgumentElement | null { + this._validateArgLabel(argLabel); + return this._argMap[argLabel]; } - /** @throws Invalid argument, Invalid access */ - get argNames(): string[] { + /** @throws Error */ + get argLabels(): string[] { if (this._argTypeMap === null) { - throw Error( - `Invalid access: instruction "${this._instruction}" does not take arguments` - ); + throw Error(`"${this._elementName}" does not take arguments.`); } return Object.keys(this._argTypeMap); } @@ -141,17 +126,15 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum return this._type; } - abstract get data(): TPrimitive; + abstract getData(context?: Context): TPrimitive; } export abstract class ArgumentDataElement extends ArgumentElement implements TS.IArgumentDataElement { - constructor(elementName: string, type: TPrimitiveName, requiresContext?: boolean) { + constructor(elementName: string, type: TPrimitiveName, requiresContext: boolean) { super(elementName, 'data', type, requiresContext); } - - abstract get data(): TPrimitive; } export abstract class ArgumentExpressionElement @@ -162,11 +145,8 @@ export abstract class ArgumentExpressionElement constructor( elementName: string, type: TPrimitiveName, - requiresContext?: boolean, - /** - * Certain argument expressions might not take arguments, instead could work on state - * objects exposed to the framework. - */ + requiresContext: boolean, + // Certain argument expressions might not take arguments, instead could work on the context. constraints?: { [key: string]: TPrimitiveName[] } ) { super(elementName, 'expression', type, requiresContext); @@ -176,8 +156,6 @@ export abstract class ArgumentExpressionElement get args() { return this._args; } - - abstract get data(): TPrimitive; } // ---- Instruction Element ------------------------------------------------------------------------ @@ -188,7 +166,7 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn constructor( elementName: string, - requiresContext?: boolean, + requiresContext: boolean, constraints?: { [key: string]: TPrimitiveName[] } ) { super(elementName, requiresContext); @@ -208,7 +186,7 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn } /** Executes when element is encountered by MB program interpretor. */ - abstract onVisit(): void; + abstract onVisit(context?: Context): void; /** Whether current instruction is a dummy instruction */ get isDummy() { @@ -219,7 +197,7 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn /** To be treated as a terminating or non-existing instruction */ export class DummyElement extends InstructionElement { constructor() { - super('dummy'); + super('dummy', false); } onVisit() {} @@ -228,7 +206,7 @@ export class DummyElement extends InstructionElement { export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { constructor( elementName: string, - requiresContext?: boolean, + requiresContext: boolean, constraints?: { [key: string]: TPrimitiveName[] } ) { super(elementName, requiresContext, constraints); @@ -240,16 +218,16 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo private _childHeads: (InstructionElement | null)[] = []; private _childHead: InstructionElement | null; - /** @throws Invalid argument */ + /** @throws Error */ constructor( elementName: string, blocksCount: number, - requiresContext?: boolean, + requiresContext: boolean, constraints?: { [key: string]: TPrimitiveName[] } ) { super(elementName, requiresContext, constraints); if (blocksCount < 1) { - throw Error('Invalid argument: number of inner blocks cannot be less than 1'); + throw Error('Number of inner blocks cannot be less than 1.'); } this._blocksCount = blocksCount; for (let i = 0; i < blocksCount; i++) { @@ -258,18 +236,18 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo this._childHead = this._childHeads[0]; } - /** @throws Invalid argument */ + /** @throws Error */ setChildHead(index: number, childHead: InstructionElement | null) { if (index < 0 || index >= this._blocksCount) { - throw Error(`Invalid argument: index must lie in [0, ${this._blocksCount - 1}]`); + throw Error(`Index must lie in [0, ${this._blocksCount - 1}].`); } this._childHeads[index] = childHead; } - /** @throws Invalid argument */ + /** @throws Error */ getChildHead(index: number) { if (index < 0 || index >= this._blocksCount) { - throw Error(`Invalid argument: index must lie in [0, ${this._blocksCount - 1}]`); + throw Error(`Index must lie in [0, ${this._blocksCount - 1}].`); } return this._childHeads[index]; } @@ -283,5 +261,5 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo } /** Executes after instructions inside the block have been executed. */ - abstract onExit(): void; + abstract onExit(context?: Context): void; } From f58a2bd42ff39ba1b9679a785be12ed6f9653f95 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 6 Feb 2021 10:57:51 +0530 Subject: [PATCH 054/176] Improve type implementation --- .../broker/@types/syntaxHandler.d.ts | 3 +- src/.prototype/broker/syntaxHandler.ts | 2 +- .../syntax-core/syntaxElementFactory.test.ts | 33 +++++++++ .../syntax-core/syntaxElementFactory.ts | 74 +++++++++++++------ 4 files changed, 86 insertions(+), 26 deletions(-) create mode 100644 src/.prototype/syntax-core/syntaxElementFactory.test.ts diff --git a/src/.prototype/broker/@types/syntaxHandler.d.ts b/src/.prototype/broker/@types/syntaxHandler.d.ts index 8a48de2..198c84b 100644 --- a/src/.prototype/broker/@types/syntaxHandler.d.ts +++ b/src/.prototype/broker/@types/syntaxHandler.d.ts @@ -1,11 +1,12 @@ import { IAST } from '../../syntax-core/@types/AST'; import { ISyntaxElement } from '../../syntax-core/@types/structureElements'; +import { TSyntaxElementName } from '../../syntax-core/syntaxElementFactory'; type TQuery = | { action: 'create'; props: { - elementName: string; + elementName: TSyntaxElementName; arg?: number | string; }; } diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts index f00c80a..e30a7fb 100644 --- a/src/.prototype/broker/syntaxHandler.ts +++ b/src/.prototype/broker/syntaxHandler.ts @@ -38,7 +38,7 @@ export default class SyntaxHandler implements ISyntaxHandler { } /** Handles creation of syntax elements. */ - private _handleCreate(elementName: string, arg?: number | string): string { + private _handleCreate(elementName: Factory.TSyntaxElementName, arg?: number | string): string { const id = this._newID; switch (elementName) { case 'start': diff --git a/src/.prototype/syntax-core/syntaxElementFactory.test.ts b/src/.prototype/syntax-core/syntaxElementFactory.test.ts new file mode 100644 index 0000000..65f6cbf --- /dev/null +++ b/src/.prototype/syntax-core/syntaxElementFactory.test.ts @@ -0,0 +1,33 @@ +import { createSyntaxElement } from './syntaxElementFactory'; +import { ValueElement } from './program-elements/valueElements'; + +describe('createSyntaxElement utililty', () => { + test("instantiate an element that doesn't take arguments and verify object and type", () => { + const elem = createSyntaxElement('start'); + expect(elem.element.elementName).toBe('start'); + expect(elem.element.requiresContext).toBe(false); + expect(elem.type).toBe('block'); + }); + + test('instantiate (with valid arguments) an element that takes arguments and verify object and type', () => { + const elem = createSyntaxElement('int', 5); + expect(elem.element.elementName).toBe('int'); + expect(elem.element.requiresContext).toBe(false); + expect(elem.type).toBe('arg-data'); + expect((elem.element as ValueElement.IntElement).getData().value).toBe(5); + }); + + test('attempt to instantiate (with invalid arguments) an element that takes arguments and expect error', () => { + expect(() => { + const elem = createSyntaxElement('int', 'string'); + const v = (elem.element as ValueElement.IntElement).getData(); + expect(v.value).toBe('string'); + }).toThrowError('Instantiation failed: invalid argument supplied for element "int".'); + }); + + test('attempt to instantiate (without arguments) an element that takes arguments and expect error', () => { + expect(() => createSyntaxElement('int')).toThrowError( + 'Instantiation failed: invalid argument supplied for element "int".' + ); + }); +}); diff --git a/src/.prototype/syntax-core/syntaxElementFactory.ts b/src/.prototype/syntax-core/syntaxElementFactory.ts index bc0f7a6..f418624 100644 --- a/src/.prototype/syntax-core/syntaxElementFactory.ts +++ b/src/.prototype/syntax-core/syntaxElementFactory.ts @@ -13,13 +13,13 @@ import { ConditionalElement } from './program-elements/conditionalElements'; import { LoopElement } from './program-elements/loopElements'; import { MiscellaneousElement } from './program-elements/miscellaneousElements'; -const syntaxElementMap = { +export const syntaxElementMap = { 'start': StartBlock, 'action': ActionBlock, - 'int': ValueElement.IntElement, - 'float': ValueElement.FloatElement, - 'char': ValueElement.CharElement, - 'string': ValueElement.StringElement, + // 'int': ValueElement.IntElement, + // 'float': ValueElement.FloatElement, + // 'char': ValueElement.CharElement, + // 'string': ValueElement.StringElement, 'true': ValueElement.TrueElement, 'false': ValueElement.FalseElement, // 'data-value-int': ValueElement.IntDataValueElement, @@ -53,29 +53,55 @@ const syntaxElementMap = { 'print': MiscellaneousElement.PrintElement }; +type TValueElementName = 'int' | 'float' | 'char' | 'string'; +export type TSyntaxElementName = keyof typeof syntaxElementMap | TValueElementName; + +/** + * Instantiates a syntax element and returns the object along with its super-class type. + * @param elementName - name of the supported element. + * @param arg - parameter for instantiation (value elements require one). + */ export function createSyntaxElement( - elementName: string, - arg?: number | string + elementName: TSyntaxElementName, + arg?: unknown ): { element: SyntaxElement; type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; } { - if (!(elementName in syntaxElementMap)) { - throw Error(`Invalid argument: element with name ${elementName} does not exist.`); + try { + let element: SyntaxElement; + switch (elementName) { + case 'int': + if (typeof arg !== 'number') throw Error(); + element = new ValueElement.IntElement(arg as number); + break; + case 'float': + if (typeof arg !== 'number') throw Error(); + element = new ValueElement.FloatElement(arg as number); + break; + case 'char': + if (typeof arg !== 'number' && typeof arg !== 'string') throw Error(); + element = new ValueElement.CharElement(arg as number | string); + break; + case 'string': + if (typeof arg !== 'string') throw Error(); + element = new ValueElement.StringElement(arg as string); + break; + default: + element = new syntaxElementMap[elementName](); + } + const type = + element instanceof InstructionElement + ? element instanceof StatementElement + ? 'statement' + : 'block' + : element instanceof ArgumentDataElement + ? 'arg-data' + : 'arg-exp'; + return { element, type }; + } catch (e) { + throw Error( + `Instantiation failed: invalid argument supplied for element "${elementName}".` + ); } - const element: SyntaxElement = - arg !== undefined - ? // @ts-ignore - new syntaxElementMap[elementName](arg) - : // @ts-ignore - new syntaxElementMap[elementName](); - const type = - element instanceof InstructionElement - ? element instanceof StatementElement - ? 'statement' - : 'block' - : element instanceof ArgumentDataElement - ? 'arg-data' - : 'arg-exp'; - return { element, type }; } From 0a7e80c2cdb6faaea4a83ebcbfb3e4838a5a7142 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 6 Feb 2021 11:07:31 +0530 Subject: [PATCH 055/176] Pass context and argument primitives as arguments for execution --- src/.prototype/broker/syntaxHandler.test.ts | 6 +- .../syntax-core/@types/structureElements.d.ts | 6 +- src/.prototype/syntax-core/AST.ts | 10 +- .../conditionalElements.test.ts | 60 +++++--- .../program-elements/conditionalElements.ts | 20 +-- .../program-elements/dataElements.test.ts | 94 ++++++------ .../program-elements/dataElements.ts | 70 +++------ .../program-elements/loopElements.test.ts | 26 +++- .../program-elements/loopElements.ts | 19 +-- .../program-elements/miscellaneousElements.ts | 14 +- .../operationElements.test.ts | 142 +++++++++++------- .../program-elements/operationElements.ts | 118 ++++++--------- .../program-elements/valueElements.ts | 1 + .../syntax-core/structureElements.test.ts | 6 +- .../syntax-core/structureElements.ts | 17 ++- 15 files changed, 305 insertions(+), 304 deletions(-) diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/.prototype/broker/syntaxHandler.test.ts index 5dd5bb1..f50caec 100644 --- a/src/.prototype/broker/syntaxHandler.test.ts +++ b/src/.prototype/broker/syntaxHandler.test.ts @@ -87,7 +87,7 @@ describe("related to SyntaxElement objects' organization", () => { expect(intElemProps.elementName).toBe('int'); expect(intElemProps.type).toBe('arg-data'); expect(intElemProps.element.elementName).toBe('int'); - expect((intElemProps.element as ArgumentElement).getData().value).toBe(5); + expect((intElemProps.element as ArgumentElement).getData({}).value).toBe(5); }); test('create a start element and verify', () => { @@ -153,7 +153,7 @@ describe("related to SyntaxElement objects' organization", () => { if (element !== null) { expect(element.type).toBe('TInt'); expect(element.elementName).toBe('int'); - expect(element.getData().value).toBe(5); + expect(element.getData({}).value).toBe(5); } else { throw Error('Object cannot not be null.'); } @@ -171,7 +171,7 @@ describe("related to SyntaxElement objects' organization", () => { if (element !== null) { expect(element.type).toBe('TFloat'); expect(element.elementName).toBe('float'); - expect(element.getData().value).toBe(3); + expect(element.getData({}).value).toBe(3); } else { throw Error('Object cannot not be null.'); } diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index be86dc6..565596e 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -45,7 +45,7 @@ export interface IArgumentElement extends ISyntaxElement { /** Return type of the argument element. */ type: TPrimitiveName; /** Returns the primitive element that the argument element returns. */ - getData: (context?: IContext) => TPrimitive; + getData: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => TPrimitive; } /** @@ -72,7 +72,7 @@ interface IInstructionElement extends ISyntaxElement { /** Stores the reference to the next instruction in stack. */ next: IInstructionElement | null; /** Triggered before instruction is executed. */ - onVisit: (context?: IContext) => void; + onVisit: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => void; } /** @@ -93,5 +93,5 @@ export interface IBlockElement extends IInstructionElement { /** Initial head instruction. */ childHead: IInstructionElement | null; /** Triggered after block instruction is executed. */ - onExit: (context?: IContext) => void; + onExit: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => void; } diff --git a/src/.prototype/syntax-core/AST.ts b/src/.prototype/syntax-core/AST.ts index 0e34c37..d34a500 100644 --- a/src/.prototype/syntax-core/AST.ts +++ b/src/.prototype/syntax-core/AST.ts @@ -5,9 +5,15 @@ import { Context } from './context'; // ---- Top Level Blocks (Start and Action) -------------------------------------------------------- export class StartBlock extends BlockElement implements IStartBlock { + private _context: Context; + constructor() { - super('start', 1); - this.context = new Context(); + super('start', 1, false); + this._context = new Context(); + } + + get context() { + return this._context; } onVisit() {} diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts index bd02e2d..793bca1 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts @@ -17,8 +17,13 @@ describe('namespace ConditionalElement', () => { ifElseElem.setChildHead(1, statement_2); test("pass a valid true condition and expect childHead to be first block's head", () => { - ifElseElem.args.setArg('condition', new ValueElement.TrueElement()); - ifElseElem.onVisit(); + const argElem = new ValueElement.TrueElement(); + ifElseElem.args.setArg('condition', argElem); + ifElseElem.onVisit({ + args: { + condition: argElem.getData() + } + }); const childHead = ifElseElem.childHead; if (childHead !== null) { expect(childHead.elementName).toBe('statement-1'); @@ -28,8 +33,13 @@ describe('namespace ConditionalElement', () => { }); test("pass a valid false condition and expect childHead to be second block's head", () => { - ifElseElem.args.setArg('condition', new ValueElement.FalseElement()); - ifElseElem.onVisit(); + const argElem = new ValueElement.FalseElement(); + ifElseElem.args.setArg('condition', argElem); + ifElseElem.onVisit({ + args: { + condition: argElem.getData() + } + }); const childHead = ifElseElem.childHead; if (childHead !== null) { expect(childHead.elementName).toBe('statement-2'); @@ -38,12 +48,12 @@ describe('namespace ConditionalElement', () => { } }); - test('pass a null as condition and expect error', () => { - ifElseElem.args.setArg('condition', null); - expect(() => ifElseElem.onVisit()).toThrowError( - 'Invalid argument: condition cannot be null' - ); - }); + // test('pass a null as condition and expect error', () => { + // ifElseElem.args.setArg('condition', null); + // expect(() => ifElseElem.onVisit()).toThrowError( + // 'Invalid argument: condition cannot be null' + // ); + // }); }); describe('class IfThenElement', () => { @@ -51,8 +61,13 @@ describe('namespace ConditionalElement', () => { IfThenElem.setChildHead(0, statement_1); test("pass a valid true condition and expect childHead to be first block's head", () => { - IfThenElem.args.setArg('condition', new ValueElement.TrueElement()); - IfThenElem.onVisit(); + const argElem = new ValueElement.TrueElement(); + IfThenElem.args.setArg('condition', argElem); + IfThenElem.onVisit({ + args: { + condition: argElem.getData() + } + }); const childHead = IfThenElem.childHead; if (childHead !== null) { expect(childHead.elementName).toBe('statement-1'); @@ -62,17 +77,22 @@ describe('namespace ConditionalElement', () => { }); test('pass a valid false condition and expect childHead to be null', () => { - IfThenElem.args.setArg('condition', new ValueElement.FalseElement()); - IfThenElem.onVisit(); + const argElem = new ValueElement.FalseElement(); + IfThenElem.args.setArg('condition', argElem); + IfThenElem.onVisit({ + args: { + condition: argElem.getData() + } + }); const childHead = IfThenElem.childHead; expect(childHead).toBe(null); }); - test('pass a null as condition and expect error', () => { - IfThenElem.args.setArg('condition', null); - expect(() => IfThenElem.onVisit()).toThrowError( - 'Invalid argument: condition cannot be null' - ); - }); + // test('pass a null as condition and expect error', () => { + // IfThenElem.args.setArg('condition', null); + // expect(() => IfThenElem.onVisit()).toThrowError( + // 'Invalid argument: condition cannot be null' + // ); + // }); }); }); diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.ts index 7a8fa3d..737dd17 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.ts @@ -1,4 +1,5 @@ -import { ArgumentElement, BlockElement } from '../structureElements'; +import { TPrimitive } from '../@types/primitiveTypes'; +import { BlockElement } from '../structureElements'; export namespace ConditionalElement { export class IfElseElement extends BlockElement { @@ -8,21 +9,8 @@ export namespace ConditionalElement { }); } - set argCondition(condition: ArgumentElement | null) { - this.args.setArg('condition', condition); - } - - get argCondition() { - return this.args.getArg('condition'); - } - - /** @throws Invalid argument */ - onVisit() { - const arg = this.args.getArg('condition'); - if (arg === null) { - throw Error('Invalid argument: condition cannot be null'); - } - this.childHead = this.getChildHead(arg.getData().value ? 0 : 1); + onVisit(props: { args: { condition: TPrimitive } }) { + this.childHead = this.getChildHead(props.args['condition'].value ? 0 : 1); } onExit() {} diff --git a/src/.prototype/syntax-core/program-elements/dataElements.test.ts b/src/.prototype/syntax-core/program-elements/dataElements.test.ts index dc8ceb3..83dcdb6 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.test.ts @@ -5,11 +5,11 @@ describe('namespace DataElement', () => { describe('initialization and verification', () => { test('initialize IntDataElement with IntElement object and verify', () => { const dataElem = new DataElement.IntDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.IntElement(5); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.IntElement(5)); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.getData().value).toBe(5); + expect(arg.getData({}).value).toBe(5); } else { throw Error('Object should not be null.'); } @@ -18,18 +18,18 @@ describe('namespace DataElement', () => { test('initialize IntDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { const dataElem = new DataElement.IntDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize FloatDataElement with FloatElement object and verify', () => { const dataElem = new DataElement.FloatDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.FloatElement(5.234); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.FloatElement(5.234)); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.getData().value).toBe(5.234); + expect(arg.getData({}).value).toBe(5.234); } else { throw Error('Object should not be null.'); } @@ -38,18 +38,18 @@ describe('namespace DataElement', () => { test('initialize FloatDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { const dataElem = new DataElement.FloatDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize CharDataElement with CharElement object and verify', () => { const dataElem = new DataElement.CharDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.CharElement(97); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.CharElement(97)); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.getData().value).toBe('a'); + expect(arg.getData({}).value).toBe('a'); } else { throw Error('Object should not be null.'); } @@ -58,18 +58,18 @@ describe('namespace DataElement', () => { test('initialize CharDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { const dataElem = new DataElement.CharDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize StringDataElement with StringElement object and verify', () => { const dataElem = new DataElement.StringDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.StringElement('string'); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.StringElement('string')); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.getData().value).toBe('string'); + expect(arg.getData({}).value).toBe('string'); } else { throw Error('Object should not be null.'); } @@ -78,18 +78,18 @@ describe('namespace DataElement', () => { test('initialize StringDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { const dataElem = new DataElement.StringDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); }).toThrowError('"TBoolean" is not a valid type for "value".'); }); test('initialize BooleanDataElement with BooleanElement object and verify', () => { const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); const arg = dataElem.args.getArg('value'); if (arg !== null) { - expect(arg.getData().value).toBe(true); + expect(arg.getData({}).value).toBe(true); } else { throw Error('Object should not be null.'); } @@ -98,8 +98,8 @@ describe('namespace DataElement', () => { test('initialize BooleanDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { expect(() => { const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.IntElement(5); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.IntElement(5)); }).toThrowError('"TInt" is not a valid type for "value".'); }); @@ -119,8 +119,8 @@ describe('namespace DataElement', () => { describe('value element verification', () => { test('verify reference in created DataValueElement after assigning a IntDataElement', () => { const dataElem = new DataElement.IntDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.IntElement(5); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.IntElement(5)); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.IntDataValueElement).toBe(true); expect(valueElement.getData().value).toBe(5); @@ -130,15 +130,15 @@ describe('namespace DataElement', () => { test('attempt to fetch TInt reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.IntDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', null); expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a FloatDataElement', () => { const dataElem = new DataElement.FloatDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.FloatElement(2.71828); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.FloatElement(2.71828)); dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.FloatDataValueElement).toBe(true); @@ -149,15 +149,15 @@ describe('namespace DataElement', () => { test('attempt to fetch TFloat reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.FloatDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', null); expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a CharDataElement', () => { const dataElem = new DataElement.CharDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.CharElement(97); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.CharElement(97)); dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); @@ -168,15 +168,15 @@ describe('namespace DataElement', () => { test('attempt to fetch TChar reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.CharDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', null); expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a StringDataElement', () => { const dataElem = new DataElement.StringDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.StringElement('string'); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.StringElement('string')); dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); @@ -187,15 +187,15 @@ describe('namespace DataElement', () => { test('attempt to fetch TString reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.StringDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', null); expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); test('verify reference in created DataValueElement after assigning a BooleanDataElement with TrueElement', () => { const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.TrueElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.TrueElement()); dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); @@ -206,8 +206,8 @@ describe('namespace DataElement', () => { test('verify reference in created DataValueElement after assigning a BooleanDataElement with FalseElement', () => { const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = new ValueElement.FalseElement(); + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', new ValueElement.FalseElement()); dataElem.onVisit(); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); @@ -218,8 +218,8 @@ describe('namespace DataElement', () => { test('attempt to fetch TBoolean reference while assigning a null as value and expect error', () => { const dataElem = new DataElement.BooleanDataElement(); - dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - dataElem.argValue = null; + dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + dataElem.args.setArg('value', null); expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); }); diff --git a/src/.prototype/syntax-core/program-elements/dataElements.ts b/src/.prototype/syntax-core/program-elements/dataElements.ts index 23fae8b..1c3eb06 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.ts @@ -3,7 +3,6 @@ import { TBoolean, TChar, TFloat, TInt, TString } from '../primitiveElements'; import { ArgumentElement, StatementElement } from '../structureElements'; import { ValueElement } from './valueElements'; -type argType = ArgumentElement | null; type dataValueType = | ValueElement.IntDataValueElement | ValueElement.FloatDataValueElement @@ -27,24 +26,6 @@ export namespace DataElement { return this._type; } - /** @throws Invalid argument */ - set argIdentifier(identifier: argType) { - this.args.setArg('identifier', identifier); - } - - get argIdentifier() { - return this.args.getArg('identifier'); - } - - /** @throws Invalid argument */ - set argValue(value: argType) { - this.args.setArg('value', value); - } - - get argValue() { - return this.args.getArg('value'); - } - abstract get valueElement(): dataValueType; abstract get dataElementRef(): TPrimitive; @@ -62,11 +43,11 @@ export namespace DataElement { } get dataElementRef() { - const arg = this.argValue; + const arg = this.args.getArg('value'); if (arg === null) { throw Error('Value cannot be null.'); } else { - return arg.getData() as TInt; + return (arg as ValueElement.IntElement).getData() as TInt; } } @@ -83,11 +64,11 @@ export namespace DataElement { } get dataElementRef() { - const arg = this.argValue; + const arg = this.args.getArg('value'); if (arg === null) { throw Error('Value cannot be null.'); } else { - return arg.getData() as TFloat; + return (arg as ValueElement.FloatElement).getData() as TFloat; } } @@ -104,11 +85,11 @@ export namespace DataElement { } get dataElementRef() { - const arg = this.argValue; + const arg = this.args.getArg('value'); if (arg === null) { throw Error('Value cannot be null.'); } else { - return arg.getData() as TChar; + return (arg as ValueElement.CharElement).getData() as TChar; } } @@ -125,11 +106,11 @@ export namespace DataElement { } get dataElementRef() { - const arg = this.argValue; + const arg = this.args.getArg('value'); if (arg === null) { throw Error('Value cannot be null.'); } else { - return arg.getData() as TString; + return (arg as ValueElement.StringElement).getData() as TString; } } @@ -146,11 +127,13 @@ export namespace DataElement { } get dataElementRef() { - const arg = this.argValue; + const arg = this.args.getArg('value'); if (arg === null) { throw Error('Value cannot be null.'); } else { - return arg.getData() as TBoolean; + return (arg as + | ValueElement.TrueElement + | ValueElement.FalseElement).getData() as TBoolean; } } @@ -200,28 +183,13 @@ export namespace DataElement { super(elementName, false, constraints); } - set argCurrValue(value: dataValueType | null) { - this.args.setArg('currValue', value); - } - - get argCurrValue() { - return this.args.getArg('currValue') as dataValueType; - } - - set argNewValue(value: ArgumentElement | null) { - this.args.setArg('newValue', value); - } - - get argNewValue() { - return this.args.getArg('newValue'); - } - - onVisit() { - const argCurr = this.argCurrValue; - const argNew = this.argNewValue; - if (argCurr !== null && argNew !== null) { - argCurr.getData().value = argNew.getData().value; - } + onVisit(props: { + args: { + currValue: TPrimitive; + newValue: TPrimitive; + }; + }) { + props.args.currValue.value = props.args.newValue.value; } } diff --git a/src/.prototype/syntax-core/program-elements/loopElements.test.ts b/src/.prototype/syntax-core/program-elements/loopElements.test.ts index af81d1e..700f780 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.test.ts @@ -6,20 +6,34 @@ describe('namespace LoopElement', () => { const repeatElem = new LoopElement.RepeatLoopElement(); test('Repeat 3 times while expecting next instruction to be itself twice and null after 3rd iteration', () => { - repeatElem.argValue = new ValueElement.IntElement(3); + const valueElem = new ValueElement.IntElement(3); for (let i = 0; i < 2; i++) { - repeatElem.onVisit(); + repeatElem.onVisit({ + args: { + value: valueElem.getData() + } + }); repeatElem.onExit(); expect(repeatElem.next).toEqual(repeatElem); } - repeatElem.onVisit(); + repeatElem.onVisit({ + args: { + value: valueElem.getData() + } + }); repeatElem.onExit(); expect(repeatElem.next).toBe(null); }); - test('Repeat with a null value and expect error', () => { - repeatElem.argValue = null; - expect(() => repeatElem.onVisit()).toThrowError('Repeat loop needs a positive value.'); + test('Repeat with a negative value and expect error', () => { + const valueElem = new ValueElement.IntElement(-3); + expect(() => + repeatElem.onVisit({ + args: { + value: valueElem.getData() + } + }) + ).toThrowError('Repeat loop needs a positive value.'); }); }); }); diff --git a/src/.prototype/syntax-core/program-elements/loopElements.ts b/src/.prototype/syntax-core/program-elements/loopElements.ts index d4f73a5..0e00d45 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.ts @@ -1,9 +1,5 @@ -import { - ArgumentElement, - BlockElement, - DummyElement, - InstructionElement -} from '../structureElements'; +import { TPrimitive } from '../@types/primitiveTypes'; +import { BlockElement, DummyElement, InstructionElement } from '../structureElements'; export namespace LoopElement { export class RepeatLoopElement extends BlockElement { @@ -16,19 +12,14 @@ export namespace LoopElement { }); } - set argValue(value: ArgumentElement | null) { - this.args.setArg('value', value); - } - - onVisit() { - const arg = this.args.getArg('value'); - if (arg === null || arg.getData().value < 0) { + onVisit(props: { args: { value: TPrimitive } }) { + if (props.args['value'].value < 0) { throw Error('Repeat loop needs a positive value.'); } else { // Not already repeating. if (this._nextStore !== null && this._nextStore.isDummy) { this._nextStore = this.next; - this._counter = arg.getData().value as number; + this._counter = props.args['value'].value as number; } } this.childHead = this.getChildHead(0); diff --git a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts index 36c7190..844d3ac 100644 --- a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts +++ b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts @@ -1,3 +1,4 @@ +import { TPrimitive } from '../@types/primitiveTypes'; import { ArgumentElement, StatementElement } from '../structureElements'; export namespace MiscellaneousElement { @@ -8,18 +9,9 @@ export namespace MiscellaneousElement { }); } - set argMessage(message: ArgumentElement | null) { - this.args.setArg('message', message); - } - /** @todo logic to be implemented after UI is created. Currently just for demonstration. */ - onVisit() { - const arg = this.args.getArg('message'); - if (arg !== null) { - console.log(`" ${arg.getData().value} "`); - } else { - console.log(`" ${null} "`); - } + onVisit(props: { args: { message: TPrimitive } }) { + console.log(`" ${props.args['message'].value} "`); } } } diff --git a/src/.prototype/syntax-core/program-elements/operationElements.test.ts b/src/.prototype/syntax-core/program-elements/operationElements.test.ts index 3a91879..36c388f 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.test.ts @@ -4,61 +4,77 @@ import { ValueElement } from './valueElements'; describe('arithmetic operations', () => { test('supply two valid ArgumentElements to AddElement and verify', () => { const operElem = new OperationElement.AddElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); test('supply one valid ArgumentElement and type-castable ArgumentElement to AddElement and verify', () => { const operElem = new OperationElement.AddElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.IntElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.IntElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(19.5); }); - test('supply one valid ArgumentElement and a null to AddElement and verify', () => { - const operElem = new OperationElement.AddElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = null; - expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); - }); + // test('supply one valid ArgumentElement and a null to AddElement and verify', () => { + // const operElem = new OperationElement.AddElement(); + // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); + // }); test('supply two valid ArgumentElements to SubtractElement and verify', () => { const operElem = new OperationElement.SubtractElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(11.5); }); test('supply two valid ArgumentElements to MultiplyElement and verify', () => { const operElem = new OperationElement.MultiplyElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(62); }); test('supply two valid ArgumentElements to DivideElement and verify', () => { const operElem = new OperationElement.DivideElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.875); }); test('supply two valid ArgumentElements to ModElement and verify', () => { const operElem = new OperationElement.ModElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TFloat'); expect(resElem.value).toBe(3.5); }); @@ -67,43 +83,55 @@ describe('arithmetic operations', () => { describe('relation operations', () => { test('supply two valid ArgumentElements to EqualsElement and verify', () => { const operElem = new OperationElement.EqualsElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(15.5); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(15.5).getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); test('supply one valid ArgumentElement and type-castable ArgumentElement to EqualsElement and verify', () => { const operElem = new OperationElement.EqualsElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.0); - operElem.argOperand_2 = new ValueElement.IntElement(15); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.0).getData(), + operand_2: new ValueElement.IntElement(15).getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); - test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { - const operElem = new OperationElement.EqualsElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = null; - expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); - }); + // test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { + // const operElem = new OperationElement.EqualsElement(); + // operElem.argOperand_1 = new ValueElement.FloatElement(15.5); + // operElem.argOperand_2 = null; + // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); + // }); test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { const operElem = new OperationElement.GreaterThanElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); test('supply two valid ArgumentElements to LessThanElement and verify', () => { const operElem = new OperationElement.LessThanElement(); - operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - operElem.argOperand_2 = new ValueElement.FloatElement(4); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.FloatElement(15.5).getData(), + operand_2: new ValueElement.FloatElement(4).getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(false); }); @@ -112,25 +140,31 @@ describe('relation operations', () => { describe('boolean operations', () => { test('supply two valid ArgumentElements to AndElement and verify', () => { const operElem = new OperationElement.AndElement(); - operElem.argOperand_1 = new ValueElement.TrueElement(); - operElem.argOperand_2 = new ValueElement.TrueElement(); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.TrueElement().getData(), + operand_2: new ValueElement.TrueElement().getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); - test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { - const operElem = new OperationElement.AndElement(); - operElem.argOperand_1 = new ValueElement.TrueElement(); - operElem.argOperand_2 = null; - expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); - }); + // test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { + // const operElem = new OperationElement.AndElement(); + // operElem.argOperand_1 = new ValueElement.TrueElement(); + // operElem.argOperand_2 = null; + // expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); + // }); test('supply two valid ArgumentElements to OrElement and verify', () => { const operElem = new OperationElement.OrElement(); - operElem.argOperand_1 = new ValueElement.TrueElement(); - operElem.argOperand_2 = new ValueElement.FalseElement(); - const resElem = operElem.getData(); + const resElem = operElem.getData({ + args: { + operand_1: new ValueElement.TrueElement().getData(), + operand_2: new ValueElement.FalseElement().getData() + } + }); expect(resElem.type).toBe('TBoolean'); expect(resElem.value).toBe(true); }); diff --git a/src/.prototype/syntax-core/program-elements/operationElements.ts b/src/.prototype/syntax-core/program-elements/operationElements.ts index b156d9b..200e334 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.ts @@ -41,7 +41,9 @@ export namespace OperationElement { return this._operand_2; } - abstract getData(): TPrimitive; + abstract getData(props: { + args: { operand_1: TPrimitive; operand_2: TPrimitive }; + }): TPrimitive; } // -- Arithmetic Operators --------------------------------------------------------------------- @@ -54,54 +56,44 @@ export namespace OperationElement { }); } - getData(): TPrimitive { - if (this._operand_1 === null) { - throw Error(`"operand_1" cannot be null.`); - } - if (this._operand_2 === null) { - throw Error(`"operand_2" cannot be null.`); - } - if ( - !( - this._operand_1.getData() instanceof TInt || - this._operand_1.getData() instanceof TFloat - ) - ) { + getData(props: { + args: { + operand_1: TPrimitive; + operand_2: TPrimitive; + }; + }): TPrimitive { + if (!(props.args.operand_1 instanceof TInt || props.args.operand_1 instanceof TFloat)) { throw Error(`"operand_1" can only be of type TInt or TFloat.`); } - if ( - !( - this._operand_2.getData() instanceof TInt || - this._operand_2.getData() instanceof TFloat - ) - ) { + if (!(props.args.operand_2 instanceof TInt || props.args.operand_2 instanceof TFloat)) { throw Error(`"operand_2" can only be of type TInt or TFloat.`); } + switch (this._operator) { case '+': return TFloat.add( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '-': return TFloat.subtract( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '*': return TFloat.multiply( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '/': return TFloat.divide( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '%': return TFloat.mod( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); default: throw Error(`Should not be reached.`); @@ -149,44 +141,34 @@ export namespace OperationElement { }); } - getData(): TBoolean { - if (this._operand_1 === null) { - throw Error(`"operand_1" cannot be null.`); - } - if (this._operand_2 === null) { - throw Error(`"operand_2" cannot be null.`); - } - if ( - !( - this._operand_1.getData() instanceof TInt || - this._operand_1.getData() instanceof TFloat - ) - ) { + getData(props: { + args: { + operand_1: TPrimitive; + operand_2: TPrimitive; + }; + }): TPrimitive { + if (!(props.args.operand_1 instanceof TInt || props.args.operand_1 instanceof TFloat)) { throw Error(`"operand_1" can only be of type TInt or TFloat.`); } - if ( - !( - this._operand_2.getData() instanceof TInt || - this._operand_2.getData() instanceof TFloat - ) - ) { + if (!(props.args.operand_2 instanceof TInt || props.args.operand_2 instanceof TFloat)) { throw Error(`"operand_2" can only be of type TInt or TFloat.`); } + switch (this._operator) { case '==': return TFloat.equals( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '>': return TFloat.greaterThan( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); case '<': return TFloat.lessThan( - this._operand_1.getData() as TInt | TFloat, - this._operand_2.getData() as TInt | TFloat + props.args.operand_1 as TInt | TFloat, + props.args.operand_2 as TInt | TFloat ); default: throw Error(`Should not be reached.`); @@ -222,29 +204,29 @@ export namespace OperationElement { }); } - getData(): TBoolean { - if (this._operand_1 === null) { - throw Error(`"operand_1" cannot be null.`); - } - if (this._operand_2 === null) { - throw Error(`"operand_2" cannot be null.`); - } - if (!(this._operand_1.getData() instanceof TBoolean)) { + getData(props: { + args: { + operand_1: TPrimitive; + operand_2: TPrimitive; + }; + }): TPrimitive { + if (!(props.args.operand_1 instanceof TBoolean)) { throw Error(`"operand_1" can only be of type TBoolean.`); } - if (!(this._operand_2.getData() instanceof TBoolean)) { + if (!(props.args.operand_2 instanceof TBoolean)) { throw Error(`"operand_2" can only be of type TBoolean.`); } + switch (this._operator) { case '&&': return TBoolean.and( - this._operand_1.getData() as TBoolean, - this._operand_2.getData() as TBoolean + props.args.operand_1 as TBoolean, + props.args.operand_2 as TBoolean ); case '||': return TBoolean.or( - this._operand_1.getData() as TBoolean, - this._operand_2.getData() as TBoolean + props.args.operand_1 as TBoolean, + props.args.operand_2 as TBoolean ); default: throw Error(`Should not be reached.`); diff --git a/src/.prototype/syntax-core/program-elements/valueElements.ts b/src/.prototype/syntax-core/program-elements/valueElements.ts index 59eb8c7..226924c 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.ts @@ -23,6 +23,7 @@ export namespace ValueElement { this._data = data; } + /** @override */ getData() { return this._data; } diff --git a/src/.prototype/syntax-core/structureElements.test.ts b/src/.prototype/syntax-core/structureElements.test.ts index be4cd1b..208426d 100644 --- a/src/.prototype/syntax-core/structureElements.test.ts +++ b/src/.prototype/syntax-core/structureElements.test.ts @@ -37,7 +37,7 @@ describe('class ArgumentDataElement', () => { expect(argData.elementName).toBe('myArgData'); expect(argData.type).toBe('TInt'); expect(argData.argType).toBe('data'); - expect(argData.getData().value).toBe(5); + expect(argData.getData({}).value).toBe(5); }); }); @@ -47,7 +47,7 @@ describe('class ArgumentExpressionElement', () => { expect(argExpr.elementName).toBe('myArgExpression'); expect(argExpr.type).toBe('TInt'); expect(argExpr.argType).toBe('expression'); - expect(argExpr.getData().value).toBe(5); + expect(argExpr.getData({}).value).toBe(5); }); }); @@ -78,7 +78,7 @@ describe('class StatementElement', () => { stmntElem.args.setArg('arg_1', argData); const arg = stmntElem.args.getArg('arg_1'); if (arg !== null) { - expect(arg.getData().value).toEqual(5); + expect(arg.getData({}).value).toEqual(5); } } catch (e) { console.error(e); diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 3ae07ec..844289a 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -111,7 +111,7 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum elementName: string, argType: 'data' | 'expression', type: TPrimitiveName, - requiresContext?: boolean + requiresContext: boolean ) { super(elementName, requiresContext); this._argType = argType; @@ -126,7 +126,10 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum return this._type; } - abstract getData(context?: Context): TPrimitive; + abstract getData(props: { + context?: Context; + args?: { [key: string]: TPrimitive }; + }): TPrimitive; } export abstract class ArgumentDataElement @@ -167,6 +170,7 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn constructor( elementName: string, requiresContext: boolean, + // Certain instructions might not take arguments, instead could work on the context. constraints?: { [key: string]: TPrimitiveName[] } ) { super(elementName, requiresContext); @@ -186,15 +190,15 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn } /** Executes when element is encountered by MB program interpretor. */ - abstract onVisit(context?: Context): void; + abstract onVisit(props: { context?: Context; args?: { [key: string]: TPrimitive } }): void; - /** Whether current instruction is a dummy instruction */ + /** Whether current instruction is a dummy instruction. */ get isDummy() { return this.elementName === 'dummy'; } } -/** To be treated as a terminating or non-existing instruction */ +/** To be treated as a terminating or non-existing instruction. */ export class DummyElement extends InstructionElement { constructor() { super('dummy', false); @@ -252,6 +256,7 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo return this._childHeads[index]; } + /** @param childHead must always be one of the values of `_childHeads`. */ set childHead(childHead: InstructionElement | null) { this._childHead = childHead; } @@ -261,5 +266,5 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo } /** Executes after instructions inside the block have been executed. */ - abstract onExit(context?: Context): void; + abstract onExit(props: { context?: Context; args?: { [key: string]: TPrimitive } }): void; } From ba27e801f68a6e47e3d5869f5630f851b51e38a8 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 6 Feb 2021 11:21:33 +0530 Subject: [PATCH 056/176] Remove requiresContext flag --- .../syntax-core/@types/structureElements.d.ts | 2 - src/.prototype/syntax-core/AST.ts | 4 +- .../conditionalElements.test.ts | 4 +- .../program-elements/conditionalElements.ts | 2 +- .../program-elements/dataElements.ts | 11 +++-- .../program-elements/loopElements.ts | 2 +- .../program-elements/miscellaneousElements.ts | 2 +- .../program-elements/operationElements.ts | 2 +- .../program-elements/valueElements.ts | 4 +- .../syntax-core/structureElements.test.ts | 10 ++--- .../syntax-core/structureElements.ts | 40 +++++-------------- .../syntax-core/syntaxElementFactory.test.ts | 2 - 12 files changed, 34 insertions(+), 51 deletions(-) diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index 565596e..9879143 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -15,8 +15,6 @@ import { IContext } from './context'; export interface ISyntaxElement { /** Name of the supported syntax element. Different from identifiers. */ elementName: string; - /** Whether argument requires a context. */ - requiresContext: boolean; } export interface IDataElement {} diff --git a/src/.prototype/syntax-core/AST.ts b/src/.prototype/syntax-core/AST.ts index d34a500..f0f7acb 100644 --- a/src/.prototype/syntax-core/AST.ts +++ b/src/.prototype/syntax-core/AST.ts @@ -8,7 +8,7 @@ export class StartBlock extends BlockElement implements IStartBlock { private _context: Context; constructor() { - super('start', 1, false); + super('start', 1); this._context = new Context(); } @@ -23,7 +23,7 @@ export class StartBlock extends BlockElement implements IStartBlock { export class ActionBlock extends BlockElement implements IActionBlock { constructor() { - super('action', 1, true, { + super('action', 1, { name: ['TString'] }); } diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts index 793bca1..2b3d415 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts @@ -8,8 +8,8 @@ class CStatementElement extends StatementElement { } describe('namespace ConditionalElement', () => { - const statement_1 = new CStatementElement('statement-1', false); - const statement_2 = new CStatementElement('statement-2', false); + const statement_1 = new CStatementElement('statement-1'); + const statement_2 = new CStatementElement('statement-2'); describe('class IfElseElement', () => { const ifElseElem = new ConditionalElement.IfElseElement(); diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.ts index 737dd17..183aebb 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.ts @@ -4,7 +4,7 @@ import { BlockElement } from '../structureElements'; export namespace ConditionalElement { export class IfElseElement extends BlockElement { constructor(elementName?: 'if') { - super(elementName !== undefined ? elementName : 'if-else', 2, false, { + super(elementName !== undefined ? elementName : 'if-else', 2, { condition: ['TBoolean'] }); } diff --git a/src/.prototype/syntax-core/program-elements/dataElements.ts b/src/.prototype/syntax-core/program-elements/dataElements.ts index 1c3eb06..467c4a7 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.ts @@ -15,7 +15,7 @@ export namespace DataElement { private _type: TPrimitiveName; constructor(identifier: string, type: TPrimitiveName) { - super(identifier, false, { + super(identifier, { identifier: ['TString'], value: [type] }); @@ -30,7 +30,12 @@ export namespace DataElement { abstract get dataElementRef(): TPrimitive; - abstract onVisit(): void; + abstract onVisit(props: { + args: { + identifier: TPrimitive; + value: TPrimitive; + }; + }): void; } export class IntDataElement extends DataElement { @@ -180,7 +185,7 @@ export namespace DataElement { newValue: [TPrimitiveName]; } ) { - super(elementName, false, constraints); + super(elementName, constraints); } onVisit(props: { diff --git a/src/.prototype/syntax-core/program-elements/loopElements.ts b/src/.prototype/syntax-core/program-elements/loopElements.ts index 0e00d45..334152a 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.ts @@ -7,7 +7,7 @@ export namespace LoopElement { private _counter: number = 0; constructor() { - super('repeat', 1, false, { + super('repeat', 1, { value: ['TInt', 'TFloat'] }); } diff --git a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts index 844d3ac..dc31943 100644 --- a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts +++ b/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts @@ -4,7 +4,7 @@ import { ArgumentElement, StatementElement } from '../structureElements'; export namespace MiscellaneousElement { export class PrintElement extends StatementElement { constructor() { - super('print', false, { + super('print', { message: ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'] }); } diff --git a/src/.prototype/syntax-core/program-elements/operationElements.ts b/src/.prototype/syntax-core/program-elements/operationElements.ts index 200e334..3104055 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.ts @@ -19,7 +19,7 @@ export namespace OperationElement { operator: TArithOp | TRelnOp | TBoolOp, constraints: { operand_1: TPrimitiveName[]; operand_2: TPrimitiveName[] } ) { - super(elementName, type, false, constraints); + super(elementName, type, constraints); this._operator = operator; } diff --git a/src/.prototype/syntax-core/program-elements/valueElements.ts b/src/.prototype/syntax-core/program-elements/valueElements.ts index 226924c..937d783 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.ts @@ -19,7 +19,7 @@ export namespace ValueElement { private _data: TPrimitive; constructor(elementName: string, data: TPrimitive) { - super(elementName, data.type, false); + super(elementName, data.type); this._data = data; } @@ -91,7 +91,7 @@ export namespace ValueElement { private _dataElementRef: dataElemType; constructor(elementName: string, dataElement: dataElemType) { - super(elementName, dataElement.type, false); + super(elementName, dataElement.type); this._dataElementRef = dataElement; } diff --git a/src/.prototype/syntax-core/structureElements.test.ts b/src/.prototype/syntax-core/structureElements.test.ts index 208426d..4d3dc00 100644 --- a/src/.prototype/syntax-core/structureElements.test.ts +++ b/src/.prototype/syntax-core/structureElements.test.ts @@ -33,7 +33,7 @@ let argExpr: ArgumentExpressionElement; describe('class ArgumentDataElement', () => { test("intialize dummy ArgumentDataElement's subclass with valid arbitrary arguments and verify contents", () => { - argData = new CArgumentDataElement('myArgData', 'TInt', false); + argData = new CArgumentDataElement('myArgData', 'TInt'); expect(argData.elementName).toBe('myArgData'); expect(argData.type).toBe('TInt'); expect(argData.argType).toBe('data'); @@ -43,7 +43,7 @@ describe('class ArgumentDataElement', () => { describe('class ArgumentExpressionElement', () => { test("initialize dummy ArgumentExpressionElement's subclass with valid arbitrary arguments and verify contents", () => { - argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt', false); + argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); expect(argExpr.elementName).toBe('myArgExpression'); expect(argExpr.type).toBe('TInt'); expect(argExpr.argType).toBe('expression'); @@ -55,14 +55,14 @@ let stmntElem: StatementElement; describe('class StatementElement', () => { test('initialize object with no argument constraints and expect error on fetching argument labels', () => { - stmntElem = new CStatementElement('yourStatement', false); + stmntElem = new CStatementElement('yourStatement'); expect(() => stmntElem.args.argLabels).toThrowError( `"yourStatement" does not take arguments.` ); }); test('initialize object with argument constraints and verify initial contents', () => { - stmntElem = new CStatementElement('myStatement', false, { + stmntElem = new CStatementElement('myStatement', { arg_1: ['TInt', 'TChar'], arg_2: ['TString'] }); @@ -117,7 +117,7 @@ describe('class BlockElement', () => { let blockElem: BlockElement; test('initialize object with argument constraints and verify initial contents', () => { - blockElem = new CBlockElement('myBlock', 1, false, { arg_1: ['TBoolean'] }); + blockElem = new CBlockElement('myBlock', 1, { arg_1: ['TBoolean'] }); expect(blockElem.next).toBe(null); if (blockElem.args !== null) { expect(blockElem.args.argLabels).toEqual(['arg_1']); diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 844289a..9baa54f 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -10,20 +10,14 @@ import { Context } from './context'; */ export abstract class SyntaxElement implements TS.ISyntaxElement { private _elementName: string; - private _requiresContext: boolean; - constructor(elementName: string, requiresContext: boolean) { + constructor(elementName: string) { this._elementName = elementName; - this._requiresContext = requiresContext; } get elementName() { return this._elementName; } - - get requiresContext() { - return this._requiresContext; - } } // ---- Argument Map ------------------------------------------------------------------------------- @@ -107,13 +101,8 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum private _argType: 'data' | 'expression'; private _type: TPrimitiveName; - constructor( - elementName: string, - argType: 'data' | 'expression', - type: TPrimitiveName, - requiresContext: boolean - ) { - super(elementName, requiresContext); + constructor(elementName: string, argType: 'data' | 'expression', type: TPrimitiveName) { + super(elementName); this._argType = argType; this._type = type; } @@ -135,8 +124,8 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum export abstract class ArgumentDataElement extends ArgumentElement implements TS.IArgumentDataElement { - constructor(elementName: string, type: TPrimitiveName, requiresContext: boolean) { - super(elementName, 'data', type, requiresContext); + constructor(elementName: string, type: TPrimitiveName) { + super(elementName, 'data', type); } } @@ -148,11 +137,10 @@ export abstract class ArgumentExpressionElement constructor( elementName: string, type: TPrimitiveName, - requiresContext: boolean, // Certain argument expressions might not take arguments, instead could work on the context. constraints?: { [key: string]: TPrimitiveName[] } ) { - super(elementName, 'expression', type, requiresContext); + super(elementName, 'expression', type); this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } @@ -169,11 +157,10 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn constructor( elementName: string, - requiresContext: boolean, // Certain instructions might not take arguments, instead could work on the context. constraints?: { [key: string]: TPrimitiveName[] } ) { - super(elementName, requiresContext); + super(elementName); this._args = new ArgumentMap(elementName, !constraints ? null : constraints); } @@ -201,19 +188,15 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn /** To be treated as a terminating or non-existing instruction. */ export class DummyElement extends InstructionElement { constructor() { - super('dummy', false); + super('dummy'); } onVisit() {} } export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { - constructor( - elementName: string, - requiresContext: boolean, - constraints?: { [key: string]: TPrimitiveName[] } - ) { - super(elementName, requiresContext, constraints); + constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { + super(elementName, constraints); } } @@ -226,10 +209,9 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo constructor( elementName: string, blocksCount: number, - requiresContext: boolean, constraints?: { [key: string]: TPrimitiveName[] } ) { - super(elementName, requiresContext, constraints); + super(elementName, constraints); if (blocksCount < 1) { throw Error('Number of inner blocks cannot be less than 1.'); } diff --git a/src/.prototype/syntax-core/syntaxElementFactory.test.ts b/src/.prototype/syntax-core/syntaxElementFactory.test.ts index 65f6cbf..f2d238f 100644 --- a/src/.prototype/syntax-core/syntaxElementFactory.test.ts +++ b/src/.prototype/syntax-core/syntaxElementFactory.test.ts @@ -5,14 +5,12 @@ describe('createSyntaxElement utililty', () => { test("instantiate an element that doesn't take arguments and verify object and type", () => { const elem = createSyntaxElement('start'); expect(elem.element.elementName).toBe('start'); - expect(elem.element.requiresContext).toBe(false); expect(elem.type).toBe('block'); }); test('instantiate (with valid arguments) an element that takes arguments and verify object and type', () => { const elem = createSyntaxElement('int', 5); expect(elem.element.elementName).toBe('int'); - expect(elem.element.requiresContext).toBe(false); expect(elem.type).toBe('arg-data'); expect((elem.element as ValueElement.IntElement).getData().value).toBe(5); }); From 54dde3895cb752d0669759855bf2286ff3c2a3a7 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 6 Feb 2021 13:59:13 +0530 Subject: [PATCH 057/176] Create symbol table and add to props --- .../syntax-core/@types/structureElements.d.ts | 7 +- .../syntax-core/@types/symbolTable.d.ts | 8 + .../conditionalElements.test.ts | 8 +- .../program-elements/dataElements.test.ts | 174 ++++++++++-------- .../program-elements/dataElements.ts | 92 +++------ .../program-elements/loopElements.test.ts | 6 +- .../operationElements.test.ts | 50 ++--- .../program-elements/valueElements.test.ts | 20 +- .../program-elements/valueElements.ts | 50 ++--- .../syntax-core/structureElements.ts | 16 +- src/.prototype/syntax-core/symbolTable.ts | 38 ++++ .../syntax-core/syntaxElementFactory.test.ts | 4 +- 12 files changed, 253 insertions(+), 220 deletions(-) create mode 100644 src/.prototype/syntax-core/@types/symbolTable.d.ts create mode 100644 src/.prototype/syntax-core/symbolTable.ts diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/.prototype/syntax-core/@types/structureElements.d.ts index 9879143..687ffa6 100644 --- a/src/.prototype/syntax-core/@types/structureElements.d.ts +++ b/src/.prototype/syntax-core/@types/structureElements.d.ts @@ -1,5 +1,6 @@ import { TPrimitive, TPrimitiveName } from './primitiveTypes'; import { IContext } from './context'; +import { ISymbolTable } from './symbolTable'; /** * There are two categories of syntax elements: Arguments and Instructions. @@ -43,7 +44,7 @@ export interface IArgumentElement extends ISyntaxElement { /** Return type of the argument element. */ type: TPrimitiveName; /** Returns the primitive element that the argument element returns. */ - getData: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => TPrimitive; + getData: Function; } /** @@ -70,7 +71,7 @@ interface IInstructionElement extends ISyntaxElement { /** Stores the reference to the next instruction in stack. */ next: IInstructionElement | null; /** Triggered before instruction is executed. */ - onVisit: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => void; + onVisit: Function; } /** @@ -91,5 +92,5 @@ export interface IBlockElement extends IInstructionElement { /** Initial head instruction. */ childHead: IInstructionElement | null; /** Triggered after block instruction is executed. */ - onExit: (props: { context?: IContext; args?: { [key: string]: TPrimitive } }) => void; + onExit: Function; } diff --git a/src/.prototype/syntax-core/@types/symbolTable.d.ts b/src/.prototype/syntax-core/@types/symbolTable.d.ts new file mode 100644 index 0000000..f487897 --- /dev/null +++ b/src/.prototype/syntax-core/@types/symbolTable.d.ts @@ -0,0 +1,8 @@ +import { TBoolean, TString } from '../primitiveElements'; +import { TPrimitive, TPrimitiveName } from './primitiveTypes'; + +export interface ISymbolTable { + symbolExists: (symbol: TString) => TBoolean; + addSymbol: (symbol: TString, data: TPrimitive) => void; + getSymbolData: (symbol: TString) => TPrimitive; +} diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts index 2b3d415..b25ba2f 100644 --- a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts @@ -21,7 +21,7 @@ describe('namespace ConditionalElement', () => { ifElseElem.args.setArg('condition', argElem); ifElseElem.onVisit({ args: { - condition: argElem.getData() + condition: argElem.getData({}) } }); const childHead = ifElseElem.childHead; @@ -37,7 +37,7 @@ describe('namespace ConditionalElement', () => { ifElseElem.args.setArg('condition', argElem); ifElseElem.onVisit({ args: { - condition: argElem.getData() + condition: argElem.getData({}) } }); const childHead = ifElseElem.childHead; @@ -65,7 +65,7 @@ describe('namespace ConditionalElement', () => { IfThenElem.args.setArg('condition', argElem); IfThenElem.onVisit({ args: { - condition: argElem.getData() + condition: argElem.getData({}) } }); const childHead = IfThenElem.childHead; @@ -81,7 +81,7 @@ describe('namespace ConditionalElement', () => { IfThenElem.args.setArg('condition', argElem); IfThenElem.onVisit({ args: { - condition: argElem.getData() + condition: argElem.getData({}) } }); const childHead = IfThenElem.childHead; diff --git a/src/.prototype/syntax-core/program-elements/dataElements.test.ts b/src/.prototype/syntax-core/program-elements/dataElements.test.ts index 83dcdb6..aff464e 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.test.ts @@ -1,3 +1,4 @@ +import { SymbolTable } from '../symbolTable'; import { DataElement } from './dataElements'; import { ValueElement } from './valueElements'; @@ -116,112 +117,131 @@ describe('namespace DataElement', () => { // }); }); + const symbolTable = new SymbolTable(); + describe('value element verification', () => { test('verify reference in created DataValueElement after assigning a IntDataElement', () => { const dataElem = new DataElement.IntDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.IntElement(5)); + const argIdentifier = new ValueElement.StringElement('myIntBox'); + const argValue = new ValueElement.IntElement(5); + dataElem.args.setArg('identifier', argIdentifier); + dataElem.args.setArg('value', argValue); + dataElem.onVisit({ + args: { + identifier: argIdentifier.getData({}), + value: argValue.getData({}) + }, + symbolTable + }); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.IntDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe(5); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + expect(valueElement.getData({ symbolTable }).value).toBe(5); + const dataElement = valueElement.getData({ symbolTable }); + expect(dataElement).toEqual(argValue.getData({})); }); - test('attempt to fetch TInt reference while assigning a null as value and expect error', () => { - const dataElem = new DataElement.IntDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', null); - expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - }); + // test('attempt to fetch TInt reference while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.IntDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', null); + // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); + // }); test('verify reference in created DataValueElement after assigning a FloatDataElement', () => { const dataElem = new DataElement.FloatDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.FloatElement(2.71828)); - dataElem.onVisit(); + const argIdentifier = new ValueElement.StringElement('myFloatBox'); + const argValue = new ValueElement.FloatElement(2.71828); + dataElem.args.setArg('identifier', argIdentifier); + dataElem.args.setArg('value', argValue); + dataElem.onVisit({ + args: { + identifier: argIdentifier.getData({}), + value: argValue.getData({}) + }, + symbolTable + }); const valueElement = dataElem.valueElement; expect(valueElement instanceof ValueElement.FloatDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe(2.71828); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + expect(valueElement.getData({ symbolTable }).value).toBe(2.71828); + const dataElement = valueElement.getData({ symbolTable }); + expect(dataElement).toEqual(argValue.getData({})); }); - test('attempt to fetch TFloat reference while assigning a null as value and expect error', () => { - const dataElem = new DataElement.FloatDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', null); - expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - }); + // test('attempt to fetch TFloat reference while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.FloatDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', null); + // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); + // }); test('verify reference in created DataValueElement after assigning a CharDataElement', () => { - const dataElem = new DataElement.CharDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.CharElement(97)); - dataElem.onVisit(); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe('a'); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + // const dataElem = new DataElement.CharDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', new ValueElement.CharElement(97)); + // dataElem.onVisit(); + // const valueElement = dataElem.valueElement; + // expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); + // expect(valueElement.getData({ symbolTable }).value).toBe('a'); + // const dataElement = valueElement.getData({ symbolTable }); + // expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to fetch TChar reference while assigning a null as value and expect error', () => { - const dataElem = new DataElement.CharDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', null); - expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - }); + // test('attempt to fetch TChar reference while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.CharDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', null); + // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); + // }); test('verify reference in created DataValueElement after assigning a StringDataElement', () => { - const dataElem = new DataElement.StringDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.StringElement('string')); - dataElem.onVisit(); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe('string'); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + // const dataElem = new DataElement.StringDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', new ValueElement.StringElement('string')); + // dataElem.onVisit(); + // const valueElement = dataElem.valueElement; + // expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); + // expect(valueElement.getData({ symbolTable }).value).toBe('string'); + // const dataElement = valueElement.getData({ symbolTable }); + // expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to fetch TString reference while assigning a null as value and expect error', () => { - const dataElem = new DataElement.StringDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', null); - expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - }); + // test('attempt to fetch TString reference while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.StringDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', null); + // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); + // }); test('verify reference in created DataValueElement after assigning a BooleanDataElement with TrueElement', () => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - dataElem.onVisit(); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe(true); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + // const dataElem = new DataElement.BooleanDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', new ValueElement.TrueElement()); + // dataElem.onVisit(); + // const valueElement = dataElem.valueElement; + // expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); + // expect(valueElement.getData({ symbolTable }).value).toBe(true); + // const dataElement = valueElement.getData({ symbolTable }); + // expect(dataElement).toEqual(dataElem.dataElementRef); }); test('verify reference in created DataValueElement after assigning a BooleanDataElement with FalseElement', () => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.FalseElement()); - dataElem.onVisit(); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - expect(valueElement.getData().value).toBe(false); - const dataElement = valueElement.getData(); - expect(dataElement).toEqual(dataElem.dataElementRef); + // const dataElem = new DataElement.BooleanDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', new ValueElement.FalseElement()); + // dataElem.onVisit(); + // const valueElement = dataElem.valueElement; + // expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); + // expect(valueElement.getData({ symbolTable }).value).toBe(false); + // const dataElement = valueElement.getData({ symbolTable }); + // expect(dataElement).toEqual(dataElem.dataElementRef); }); - test('attempt to fetch TBoolean reference while assigning a null as value and expect error', () => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', null); - expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - }); + // test('attempt to fetch TBoolean reference while assigning a null as value and expect error', () => { + // const dataElem = new DataElement.BooleanDataElement(); + // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); + // dataElem.args.setArg('value', null); + // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); + // }); // test('verify created ValueElement after executing a AnyDataElement', () => { // const dataElem = new DataElement.AnyDataElement(); diff --git a/src/.prototype/syntax-core/program-elements/dataElements.ts b/src/.prototype/syntax-core/program-elements/dataElements.ts index 467c4a7..3b79229 100644 --- a/src/.prototype/syntax-core/program-elements/dataElements.ts +++ b/src/.prototype/syntax-core/program-elements/dataElements.ts @@ -1,9 +1,10 @@ import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; -import { TBoolean, TChar, TFloat, TInt, TString } from '../primitiveElements'; -import { ArgumentElement, StatementElement } from '../structureElements'; +import { TString } from '../primitiveElements'; +import { StatementElement } from '../structureElements'; +import { SymbolTable } from '../symbolTable'; import { ValueElement } from './valueElements'; -type dataValueType = +type TDataValue = | ValueElement.IntDataValueElement | ValueElement.FloatDataValueElement | ValueElement.CharDataValueElement @@ -26,16 +27,26 @@ export namespace DataElement { return this._type; } - abstract get valueElement(): dataValueType; + get argIdentifier() { + const arg = this.args.getArg('identifier'); + if (arg === null) { + throw Error('Invalid data element: missing identifier.'); + } else { + return arg.getData({}) as TString; + } + } - abstract get dataElementRef(): TPrimitive; + abstract get valueElement(): TDataValue; - abstract onVisit(props: { + onVisit(props: { args: { identifier: TPrimitive; value: TPrimitive; }; - }): void; + symbolTable: SymbolTable; + }) { + props.symbolTable.addSymbol(props.args.identifier as TString, props.args.value); + } } export class IntDataElement extends DataElement { @@ -44,19 +55,8 @@ export namespace DataElement { } get valueElement() { - return new ValueElement.IntDataValueElement(this); + return new ValueElement.IntDataValueElement(this.argIdentifier); } - - get dataElementRef() { - const arg = this.args.getArg('value'); - if (arg === null) { - throw Error('Value cannot be null.'); - } else { - return (arg as ValueElement.IntElement).getData() as TInt; - } - } - - onVisit() {} } export class FloatDataElement extends DataElement { @@ -65,19 +65,8 @@ export namespace DataElement { } get valueElement() { - return new ValueElement.FloatDataValueElement(this); + return new ValueElement.FloatDataValueElement(this.argIdentifier); } - - get dataElementRef() { - const arg = this.args.getArg('value'); - if (arg === null) { - throw Error('Value cannot be null.'); - } else { - return (arg as ValueElement.FloatElement).getData() as TFloat; - } - } - - onVisit() {} } export class CharDataElement extends DataElement { @@ -86,19 +75,8 @@ export namespace DataElement { } get valueElement() { - return new ValueElement.CharDataValueElement(this); + return new ValueElement.CharDataValueElement(this.argIdentifier); } - - get dataElementRef() { - const arg = this.args.getArg('value'); - if (arg === null) { - throw Error('Value cannot be null.'); - } else { - return (arg as ValueElement.CharElement).getData() as TChar; - } - } - - onVisit() {} } export class StringDataElement extends DataElement { @@ -107,19 +85,8 @@ export namespace DataElement { } get valueElement() { - return new ValueElement.StringDataValueElement(this); - } - - get dataElementRef() { - const arg = this.args.getArg('value'); - if (arg === null) { - throw Error('Value cannot be null.'); - } else { - return (arg as ValueElement.StringElement).getData() as TString; - } + return new ValueElement.StringDataValueElement(this.argIdentifier); } - - onVisit() {} } export class BooleanDataElement extends DataElement { @@ -128,21 +95,8 @@ export namespace DataElement { } get valueElement() { - return new ValueElement.BooleanDataValueElement(this); + return new ValueElement.BooleanDataValueElement(this.argIdentifier); } - - get dataElementRef() { - const arg = this.args.getArg('value'); - if (arg === null) { - throw Error('Value cannot be null.'); - } else { - return (arg as - | ValueElement.TrueElement - | ValueElement.FalseElement).getData() as TBoolean; - } - } - - onVisit() {} } // export class AnyDataElement extends DataElement { diff --git a/src/.prototype/syntax-core/program-elements/loopElements.test.ts b/src/.prototype/syntax-core/program-elements/loopElements.test.ts index 700f780..0092d97 100644 --- a/src/.prototype/syntax-core/program-elements/loopElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/loopElements.test.ts @@ -10,7 +10,7 @@ describe('namespace LoopElement', () => { for (let i = 0; i < 2; i++) { repeatElem.onVisit({ args: { - value: valueElem.getData() + value: valueElem.getData({}) } }); repeatElem.onExit(); @@ -18,7 +18,7 @@ describe('namespace LoopElement', () => { } repeatElem.onVisit({ args: { - value: valueElem.getData() + value: valueElem.getData({}) } }); repeatElem.onExit(); @@ -30,7 +30,7 @@ describe('namespace LoopElement', () => { expect(() => repeatElem.onVisit({ args: { - value: valueElem.getData() + value: valueElem.getData({}) } }) ).toThrowError('Repeat loop needs a positive value.'); diff --git a/src/.prototype/syntax-core/program-elements/operationElements.test.ts b/src/.prototype/syntax-core/program-elements/operationElements.test.ts index 36c388f..f46a014 100644 --- a/src/.prototype/syntax-core/program-elements/operationElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/operationElements.test.ts @@ -6,8 +6,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.AddElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -18,8 +18,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.AddElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.IntElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.IntElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -35,8 +35,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.SubtractElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -47,8 +47,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.MultiplyElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -59,8 +59,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.DivideElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -71,8 +71,8 @@ describe('arithmetic operations', () => { const operElem = new OperationElement.ModElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TFloat'); @@ -85,8 +85,8 @@ describe('relation operations', () => { const operElem = new OperationElement.EqualsElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(15.5).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(15.5).getData({}) } }); expect(resElem.type).toBe('TBoolean'); @@ -97,8 +97,8 @@ describe('relation operations', () => { const operElem = new OperationElement.EqualsElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.0).getData(), - operand_2: new ValueElement.IntElement(15).getData() + operand_1: new ValueElement.FloatElement(15.0).getData({}), + operand_2: new ValueElement.IntElement(15).getData({}) } }); expect(resElem.type).toBe('TBoolean'); @@ -116,8 +116,8 @@ describe('relation operations', () => { const operElem = new OperationElement.GreaterThanElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TBoolean'); @@ -128,8 +128,8 @@ describe('relation operations', () => { const operElem = new OperationElement.LessThanElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.FloatElement(15.5).getData(), - operand_2: new ValueElement.FloatElement(4).getData() + operand_1: new ValueElement.FloatElement(15.5).getData({}), + operand_2: new ValueElement.FloatElement(4).getData({}) } }); expect(resElem.type).toBe('TBoolean'); @@ -142,8 +142,8 @@ describe('boolean operations', () => { const operElem = new OperationElement.AndElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.TrueElement().getData(), - operand_2: new ValueElement.TrueElement().getData() + operand_1: new ValueElement.TrueElement().getData({}), + operand_2: new ValueElement.TrueElement().getData({}) } }); expect(resElem.type).toBe('TBoolean'); @@ -154,15 +154,15 @@ describe('boolean operations', () => { // const operElem = new OperationElement.AndElement(); // operElem.argOperand_1 = new ValueElement.TrueElement(); // operElem.argOperand_2 = null; - // expect(() => operElem.getData()).toThrowError('"operand_2" cannot be null.'); + // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); // }); test('supply two valid ArgumentElements to OrElement and verify', () => { const operElem = new OperationElement.OrElement(); const resElem = operElem.getData({ args: { - operand_1: new ValueElement.TrueElement().getData(), - operand_2: new ValueElement.FalseElement().getData() + operand_1: new ValueElement.TrueElement().getData({}), + operand_2: new ValueElement.FalseElement().getData({}) } }); expect(resElem.type).toBe('TBoolean'); diff --git a/src/.prototype/syntax-core/program-elements/valueElements.test.ts b/src/.prototype/syntax-core/program-elements/valueElements.test.ts index de3a119..f9ee090 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.test.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.test.ts @@ -9,47 +9,47 @@ describe('namespace ValueElement', () => { describe('instantiation and value verification', () => { test('instantiate a IntElement with 5 and expect 5 to be data', () => { intValElem = new ValueElement.IntElement(5); - expect(intValElem.getData().value).toBe(5); + expect(intValElem.getData({}).value).toBe(5); }); test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { floatValElem = new ValueElement.FloatElement(2.71828); - expect(floatValElem.getData().value).toBe(2.71828); + expect(floatValElem.getData({}).value).toBe(2.71828); }); test('instantiate a CharElement with 97 and expect "a" to be data', () => { charValElem = new ValueElement.CharElement(97); - expect(charValElem.getData().value).toBe('a'); + expect(charValElem.getData({}).value).toBe('a'); }); test('instantiate a StringElement with "string" and expect "string" to be data', () => { stringValElem = new ValueElement.StringElement('string'); - expect(stringValElem.getData().value).toBe('string'); + expect(stringValElem.getData({}).value).toBe('string'); }); test('instantiate a TrueElement and expect true to be data', () => { - expect(new ValueElement.TrueElement().getData().value).toBe(true); + expect(new ValueElement.TrueElement().getData({}).value).toBe(true); }); test('instantiate a FalseElement and expect false to be data', () => { - expect(new ValueElement.FalseElement().getData().value).toBe(false); + expect(new ValueElement.FalseElement().getData({}).value).toBe(false); }); }); describe('value updation', () => { test('update IntElement value to 2 and expect 2 to be data', () => { intValElem.update(2); - expect(intValElem.getData().value).toBe(2); + expect(intValElem.getData({}).value).toBe(2); }); test('update FloatElement value to 3.1415 and expect 3.1415 to be data', () => { floatValElem.update(3.1415); - expect(floatValElem.getData().value).toBe(3.1415); + expect(floatValElem.getData({}).value).toBe(3.1415); }); test('update CharElement value to "x" and expect "x" to be data', () => { charValElem.update('x'); - expect(charValElem.getData().value).toBe('x'); + expect(charValElem.getData({}).value).toBe('x'); }); test('update StringElement value to "another" and expect "another" to be data', () => { stringValElem.update('another'); - expect(stringValElem.getData().value).toBe('another'); + expect(stringValElem.getData({}).value).toBe('another'); }); }); }); diff --git a/src/.prototype/syntax-core/program-elements/valueElements.ts b/src/.prototype/syntax-core/program-elements/valueElements.ts index 937d783..a9d6b01 100644 --- a/src/.prototype/syntax-core/program-elements/valueElements.ts +++ b/src/.prototype/syntax-core/program-elements/valueElements.ts @@ -1,9 +1,10 @@ import { TPrimitive } from '../@types/primitiveTypes'; import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; import { ArgumentDataElement } from '../structureElements'; +import { SymbolTable } from '../symbolTable'; import { DataElement } from './dataElements'; -type dataElemType = +type TDataElem = | DataElement.IntDataElement | DataElement.FloatDataElement | DataElement.CharDataElement @@ -16,7 +17,7 @@ type dataElemType = */ export namespace ValueElement { abstract class ValueElement extends ArgumentDataElement { - private _data: TPrimitive; + protected _data: TPrimitive; constructor(elementName: string, data: TPrimitive) { super(elementName, data.type); @@ -24,7 +25,7 @@ export namespace ValueElement { } /** @override */ - getData() { + getData(props: { symbolTable?: SymbolTable }) { return this._data; } } @@ -36,7 +37,7 @@ export namespace ValueElement { } update(value: number) { - this.getData().value = value; + this._data.value = value; } } @@ -47,7 +48,7 @@ export namespace ValueElement { } update(value: number) { - this.getData().value = value; + this._data.value = value; } } @@ -58,7 +59,7 @@ export namespace ValueElement { } update(value: string | number) { - this.getData().value = value; + this._data.value = value; } } @@ -69,7 +70,7 @@ export namespace ValueElement { } update(value: string) { - this.getData().value = value; + this._data.value = value; } } @@ -87,47 +88,48 @@ export namespace ValueElement { } } - abstract class DataValueElement extends ArgumentDataElement { - private _dataElementRef: dataElemType; + abstract class DataValueElement extends ValueElement { + constructor(elementName: string, symbol: TString) { + super(elementName, symbol); + } - constructor(elementName: string, dataElement: dataElemType) { - super(elementName, dataElement.type); - this._dataElementRef = dataElement; + update(value: string) { + this._data.value = value; } /** @override */ - getData() { - return this._dataElementRef.dataElementRef; + getData(props: { symbolTable: SymbolTable }) { + return props.symbolTable.getSymbolData(this._data as TString); } } export class IntDataValueElement extends DataValueElement { - constructor(dataElement: DataElement.IntDataElement) { - super('data-value-int', dataElement); + constructor(symbol: TString) { + super('data-value-int', symbol); } } export class FloatDataValueElement extends DataValueElement { - constructor(dataElement: DataElement.FloatDataElement) { - super('data-value-float', dataElement); + constructor(symbol: TString) { + super('data-value-float', symbol); } } export class CharDataValueElement extends DataValueElement { - constructor(dataElement: DataElement.CharDataElement) { - super('data-value-char', dataElement); + constructor(symbol: TString) { + super('data-value-char', symbol); } } export class StringDataValueElement extends DataValueElement { - constructor(dataElement: DataElement.StringDataElement) { - super('data-value-string', dataElement); + constructor(symbol: TString) { + super('data-value-string', symbol); } } export class BooleanDataValueElement extends DataValueElement { - constructor(dataElement: DataElement.BooleanDataElement) { - super('data-value-boolean', dataElement); + constructor(symbol: TString) { + super('data-value-boolean', symbol); } } } diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/.prototype/syntax-core/structureElements.ts index 9baa54f..bdc8e78 100644 --- a/src/.prototype/syntax-core/structureElements.ts +++ b/src/.prototype/syntax-core/structureElements.ts @@ -1,6 +1,7 @@ import { TPrimitiveName, TPrimitive } from './@types/primitiveTypes'; import * as TS from './@types/structureElements'; import { Context } from './context'; +import { SymbolTable } from './symbolTable'; // ---- Syntax Element ----------------------------------------------------------------------------- @@ -116,8 +117,9 @@ export abstract class ArgumentElement extends SyntaxElement implements TS.IArgum } abstract getData(props: { - context?: Context; args?: { [key: string]: TPrimitive }; + context?: Context; + symbolTable?: SymbolTable; }): TPrimitive; } @@ -177,7 +179,11 @@ export abstract class InstructionElement extends SyntaxElement implements TS.IIn } /** Executes when element is encountered by MB program interpretor. */ - abstract onVisit(props: { context?: Context; args?: { [key: string]: TPrimitive } }): void; + abstract onVisit(props: { + args?: { [key: string]: TPrimitive }; + context?: Context; + symbolTable?: SymbolTable; + }): void; /** Whether current instruction is a dummy instruction. */ get isDummy() { @@ -248,5 +254,9 @@ export abstract class BlockElement extends InstructionElement implements TS.IBlo } /** Executes after instructions inside the block have been executed. */ - abstract onExit(props: { context?: Context; args?: { [key: string]: TPrimitive } }): void; + abstract onExit(props: { + args?: { [key: string]: TPrimitive }; + context?: Context; + symbolTable?: SymbolTable; + }): void; } diff --git a/src/.prototype/syntax-core/symbolTable.ts b/src/.prototype/syntax-core/symbolTable.ts new file mode 100644 index 0000000..5068ea8 --- /dev/null +++ b/src/.prototype/syntax-core/symbolTable.ts @@ -0,0 +1,38 @@ +import { TPrimitive, TPrimitiveName } from './@types/primitiveTypes'; +import { ISymbolTable } from './@types/symbolTable'; +import { TBoolean, TString } from './primitiveElements'; + +export class SymbolTable implements ISymbolTable { + private _table: { + [key: string]: { + type: TPrimitiveName; + data: TPrimitive; + }; + } = {}; + + constructor() {} + + symbolExists(symbol: TString) { + return new TBoolean(symbol.value in this._table); + } + + addSymbol(symbol: TString, data: TPrimitive) { + if (symbol.value in this._table) { + throw Error(`Duplicate symbol: symbol "${symbol.value}" already exists.`); + } + this._table[symbol.value] = { + type: data.type, + data + }; + } + + getSymbolData(symbol: TString) { + if (!(symbol.value in this._table)) { + throw Error(`Invalid symbol: symbol "${symbol}" does not exist.`); + } + return (this._table[symbol.value] as { + type: TPrimitiveName; + data: TPrimitive; + }).data; + } +} diff --git a/src/.prototype/syntax-core/syntaxElementFactory.test.ts b/src/.prototype/syntax-core/syntaxElementFactory.test.ts index f2d238f..dd37ae4 100644 --- a/src/.prototype/syntax-core/syntaxElementFactory.test.ts +++ b/src/.prototype/syntax-core/syntaxElementFactory.test.ts @@ -12,13 +12,13 @@ describe('createSyntaxElement utililty', () => { const elem = createSyntaxElement('int', 5); expect(elem.element.elementName).toBe('int'); expect(elem.type).toBe('arg-data'); - expect((elem.element as ValueElement.IntElement).getData().value).toBe(5); + expect((elem.element as ValueElement.IntElement).getData({}).value).toBe(5); }); test('attempt to instantiate (with invalid arguments) an element that takes arguments and expect error', () => { expect(() => { const elem = createSyntaxElement('int', 'string'); - const v = (elem.element as ValueElement.IntElement).getData(); + const v = (elem.element as ValueElement.IntElement).getData({}); expect(v.value).toBe('string'); }).toThrowError('Instantiation failed: invalid argument supplied for element "int".'); }); From dba028e15af07b29876eb33a541739c4ae07a919 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 6 Feb 2021 14:01:14 +0530 Subject: [PATCH 058/176] Add symbol table instance to syntax handler --- src/.prototype/broker/syntaxHandler.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/.prototype/broker/syntaxHandler.ts index e30a7fb..e9886fa 100644 --- a/src/.prototype/broker/syntaxHandler.ts +++ b/src/.prototype/broker/syntaxHandler.ts @@ -10,6 +10,7 @@ import { } from '../syntax-core/structureElements'; import * as Factory from '../syntax-core/syntaxElementFactory'; import { AST, StartBlock } from '../syntax-core/AST'; +import { SymbolTable } from '../syntax-core/symbolTable'; export default class SyntaxHandler implements ISyntaxHandler { private _elementMap: { @@ -20,9 +21,11 @@ export default class SyntaxHandler implements ISyntaxHandler { }; } = {}; private _AST: AST; + private _symbolTable: SymbolTable; constructor() { this._AST = new AST(); + this._symbolTable = new SymbolTable(); } // -- Utilities ------------------------------------------------------------ @@ -197,4 +200,8 @@ export default class SyntaxHandler implements ISyntaxHandler { get AST(): AST { return this._AST; } + + get symbolTable(): SymbolTable { + return this._symbolTable; + } } From 099e8a8d16631c37f4c85215fe6ea144d30aed1e Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:13:24 +0530 Subject: [PATCH 059/176] docs: add contributor guidelines --- README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/README.md b/README.md index 3b80159..3d9dc83 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,61 @@ # musicblocks.js The core of the new Music Blocks 2 application. + +## Contributing + +Programmers, please follow these general +[guidelines for contributions](https://github.com/sugarlabs/sugar-docs/blob/master/src/contributing.md). + +### New Contributors + +Use the [discussions](https://github.com/sugarlabs/musicblocks/discussions) tab at the top of the +repository to: + +- Ask questions you’re wondering about. +- Share ideas. +- Engage with other community members. + +Feel free. But, please don't spam :p. + +### Keep in Mind + +1. Your contributions need not necessarily have to address any discovered issue. If you encounter +any, feel free to add a fix through a PR, or create a new issue ticket. + +2. Use [labels](https://github.com/sugarlabs/musicblocks/labels) on your issues and PRs. + +3. Do not spam with lots of PRs with little changes. + +4. If you are addressing a bulk change, divide your commits across multiple PRs, and send them one +at a time. The fewer the number of files addressed per PR, the better. + +5. Communicate effectively. Go straight to the point. You don't need to address anyone using +'_sir_'. Don't write unnecessary comments; don't be over-apologetic. There is no superiority +hierarchy. Every single contribution is welcome, as long as it doesn't spam or distract the flow. + +6. Write useful, brief commit messages. Add commit descriptions if necessary. PR name should speak +about what it is addressing and not the issue. In case a PR fixes an issue, use `fixes #ticketno` or +`closes #ticketno` in the PR's comment. Briefly explain what your PR is doing. + +7. Always test your changes extensively before creating a PR. There's no sense in merging broken +code. If a PR is a _work in progress (WIP)_, convert it to draft. It'll let the maintainers know it +isn't ready for merging. + +8. Read and revise the concepts about programming constructs you're dealing with. You must be clear +about the behavior of the language or compiler/transpiler. See +[JavaScript docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript) and +[TypeScript docs](https://www.typescriptlang.org/docs/). + +9. If you have a question, do a _web search_ first. If you don't find any satisfactory answer, then +ask it in a comment. If it is a general question about Music Blocks, please use the new +[discussions](https://github.com/sugarlabs/musicblocks/discussions) tab on top the the repository, +or the _Sugar-dev Devel <[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@lists.sugarlabs.org)>_ +mailing list. Don't ask silly questions (unless you don't know it is silly ;p) before searching it +on the web. + +_Please note there is no need to ask permission to work on an issue. You should check for pull +requests linked to an issue you are addressing; if there are none, then assume nobody has done +anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull +request. Mention an issue number in the pull request, but not the commit message. These practices +allow the competition of ideas (Sugar Labs is a meritocracy)._ From f1842150d34129c42f87aa524d45e0921763d138 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:19:19 +0530 Subject: [PATCH 060/176] docs: add guide to setup development environment --- README.md | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 178 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d9dc83..c7f101c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # musicblocks.js -The core of the new Music Blocks 2 application. +The core of the new Music Blocks 2.0 application. + +## Tech Stack + +This core of Music Blocks 2.0 uses `TypeScript 4`. In addition, `ts-jest` shall be used for testing. +`Webpack` has been configured to transpile and bundle the source code, for deployment on a web +browser. ## Contributing @@ -59,3 +65,174 @@ requests linked to an issue you are addressing; if there are none, then assume n anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull request. Mention an issue number in the pull request, but not the commit message. These practices allow the competition of ideas (Sugar Labs is a meritocracy)._ + +## Setup Development Environment + +_This project is containerized using [**docker**](https://www.docker.com/). Therefore, it requires +**docker** to be installed on the development machine._ + +1. Setup _docker_. + + - For _Linux_, [install _Docker Engine_](https://docs.docker.com/engine/install/). + - For _Windows_ or _Mac_ (_x86_64 / amd64_), + [install _Docker Desktop_](https://www.docker.com/products/docker-desktop). + +2. Open a teminal and navigate to working directory (where the source code will reside). + +3. _Git Clone_ (additional [installation](https://git-scm.com/downloads) of _Git_ required on +Windows) this repository using + + ```bash + git clone https://github.com/sugarlabs/musicblocks-2.git + ``` + +4. Build _docker image_ and launch _docker network_. + + _**Note:**_ A + [built initial development image](https://github.com/orgs/sugarlabs/packages/container/musicblocks/531083) + has been published to + [_Sugar Labs GitHub Container Registry_ (_GHCR_)](https://github.com/orgs/sugarlabs/packages?ecosystem=container), + which can be pulled directly, so you don't have to build it again. Pull using + + ```bash + docker pull ghcr.io/sugarlabs/musicblocks:initial + ``` + + Nagivate inside the project directory and launch the _docker network_ using + + ```bash + docker-compose up -d + ``` + + If you haven't pulled the image from the _GitHub Container Registry_ (_GHCR_), it'll first build + the image using the `Dockerfile`, then launch the _docker network_. If an image already exists + locally, it'll not be rebuilt. To force a rebuild from the `Dockerfile` before launching the + _docker network_, add the `--build` flag. + +5. In another terminal, run + + ```bash + docker attach musicblocks + ``` + +6. The _Linux Debian 10.7_ (_buster_) _shell_ in the _docker container_ named _musicblocks_ is +spawned and standard input/output is connected to the terminal. + + _**Node**_ (_Node.js Runtime_), _**npm**_ (_Node Package Manager_), _**tsc**_ (_TypeScript + Compiler_), and _**ts-node**_ (_Node executable for TypeScript_) should be installed. Check + using + + ```bash + node --version && npm --version && tsc --version && ts-node --version + ``` + + Output should look like + + ```bash + v14.15.3 + 6.14.10 + Version 4.1.3 + v9.1.1 + ``` + +7. To shut down the _docker network_, run (in the terminal where you ran `docker-compose up -d`) + + ```bash + docker-compose down + ``` + +8. To install all the dependencies (in `package.json`), run + + ```bash + npm ci + ``` + +9. To spawn a _HTTP Server_ (uses _Python 3_'s `http.server`), run + + ```bash + npm run serve + ``` + + This is spawned on `0.0.0.0:80` inside the container, but mapped to `localhost:5001` on host. + Visit `localhost:5001` in a browser to view the webpage served. + +10. Run _React scripts_. + + - For unoptimized development serving, run + + ```bash + npm start + ``` + + This is spawned on `127.0.0.1:3000` inside the container, but mapped to `localhost:5000` on + host. Visit `localhost:5000` in a browser to view the webpage served. + + - For testing, run + + ```bash + npm run test + ``` + + - For generating a production build, run + + ```bash + npm run build + ``` + + _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience + longer execution times for these scripts. This happens due to cross-file-system communication. + Duration varies across machines; duration primarily depends on hard drive read/write speed. + +11. Miscellaneous commands. + + - To launch the _Node runtime_, run + + ```bash + node + ``` + + - To run a _JavaScript_ file, say `file.js`, run + + ```bash + node file.js + ``` + + - To transpile a _TypeScipt_ file, say `file.ts`, to _JavaScript_, run + + ```bash + tsc file.ts + ``` + + This transpilation produces `file.js`. + + - To run a _TypeScript_ file directly, say `file.ts`, run + + ```bash + ts-node file.ts + ``` + +## Editor + +_All code is just plain text, so it doesn't really matter what you use to edit them._ However, +using modern, feature-rich IDEs/text-editors like [_**Atom**_](https://atom.io/), +[_**Brackets**_](http://brackets.io/), [_**WebStorm**_](https://www.jetbrains.com/webstorm/), +[_**Sublime Text**_](https://www.sublimetext.com/), +[_**Visual Studio Code**_](https://code.visualstudio.com/), etc. makes life way easier. These come +with a directory-tree explorer, and an integrated terminal, at the very least, while having support +for plugins/extensions to expand their functionality. + +Some (non-exhaustive) benefits of using these are _syntax highlighting_, +_warning/error annotations_, _formatting_, _auto-refactoring_, tons of customizable +_keyboard shortcuts_, etc. + +_**Visual Studio Code**_ (_**VSCode**_) is currently the most-popular code editor for reasons like +being _lightweight_, _cleaner_, large marketplace of _extensions_, integrated _Source Control_ +features, _debugger_, _remote explorer_ support, _Regular Expression_ (_regex_) based find/replace, +etc. + +In fact, a workspace configuration file for _vscode_`.vscode/settings.json` has already been added. +Recommended extensions for this project are `Babel JavaScript`, `Docker`, `ESLint`, `Git Graph`, +`GitLens`, `markdownlint`, `Prettier`, `SCSS IntelliSense`, and `SVG`. + +All that, however, shouldn't necessarily stop you from using _**Emacs**_, _**Nano**_, or _**Vim**_, +if that's your poison :D. Happy coding! From 919de584c8e7b32a1bbaa6f71168b72220a853de Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:22:17 +0530 Subject: [PATCH 061/176] chore: add markdownlint config --- .markdownlint.jsonc | 250 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 .markdownlint.jsonc diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc new file mode 100644 index 0000000..be7f98e --- /dev/null +++ b/.markdownlint.jsonc @@ -0,0 +1,250 @@ +// documentation: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md + +{ + // Default state for all rules + // "default": true, + + // Path to configuration file to extend + // "extends": null, + + // MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time + "MD001": true, + + // MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading + "MD002": { + // Heading level + "level": 1 + }, + + // MD003/heading-style/header-style - Heading style + "MD003": { + // Heading style + "style": "consistent" + }, + + // MD004/ul-style - Unordered list style + "MD004": { + // List style + "style": "consistent" + }, + + // MD005/list-indent - Inconsistent indentation for list items at the same level + "MD005": true, + + // MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line + "MD006": true, + + // MD007/ul-indent - Unordered list indentation + "MD007": { + // Spaces for indent + "indent": 2, + // Whether to indent the first level of the list + "start_indented": false + }, + + // MD009/no-trailing-spaces - Trailing spaces + "MD009": { + // Spaces for line break + "br_spaces": 2, + // Allow spaces for empty lines in list items + "list_item_empty_lines": false, + // Include unnecessary breaks + "strict": false + }, + + // MD010/no-hard-tabs - Hard tabs + "MD010": { + // Include code blocks + "code_blocks": true + }, + + // MD011/no-reversed-links - Reversed link syntax + "MD011": true, + + // MD012/no-multiple-blanks - Multiple consecutive blank lines + "MD012": { + // Consecutive blank lines + "maximum": 1 + }, + + // MD013/line-length - Line length + "MD013": { + // Number of characters + "line_length": 100, + // Number of characters for headings + "heading_line_length": 80, + // Number of characters for code blocks + "code_block_line_length": 100, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": true, + // Include headings + "headings": true, + // Include headings + "headers": true, + // Strict length checking + "strict": false, + // Stern length checking + "stern": false + }, + + // MD014/commands-show-output - Dollar signs used before commands without showing output + "MD014": true, + + // MD018/no-missing-space-atx - No space after hash on atx style heading + "MD018": true, + + // MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading + "MD019": true, + + // MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading + "MD020": true, + + // MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading + "MD021": true, + + // MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines + "MD022": { + // Blank lines above heading + "lines_above": 1, + // Blank lines below heading + "lines_below": 1 + }, + + // MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line + "MD023": true, + + // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content + "MD024": { + // Only check sibling headings + "allow_different_nesting": false, + // Only check sibling headings + "siblings_only": false + }, + + // MD025/single-title/single-h1 - Multiple top-level headings in the same document + "MD025": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD026/no-trailing-punctuation - Trailing punctuation in heading + "MD026": { + // Punctuation characters + "punctuation": ".,;:!。,;:!" + }, + + // MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol + "MD027": true, + + // MD028/no-blanks-blockquote - Blank line inside blockquote + "MD028": true, + + // MD029/ol-prefix - Ordered list item prefix + "MD029": { + // List style + "style": "one_or_ordered" + }, + + // MD030/list-marker-space - Spaces after list markers + "MD030": { + // Spaces for single-line unordered list items + "ul_single": 1, + // Spaces for single-line ordered list items + "ol_single": 1, + // Spaces for multi-line unordered list items + "ul_multi": 1, + // Spaces for multi-line ordered list items + "ol_multi": 1 + }, + + // MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines + "MD031": { + // Include list items + "list_items": true + }, + + // MD032/blanks-around-lists - Lists should be surrounded by blank lines + "MD032": true, + + // MD033/no-inline-html - Inline HTML + "MD033": { + // Allowed elements + "allowed_elements": [] + }, + + // MD034/no-bare-urls - Bare URL used + "MD034": true, + + // MD035/hr-style - Horizontal rule style + "MD035": { + // Horizontal rule style + "style": "consistent" + }, + + // MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading + "MD036": { + // Punctuation characters + "punctuation": ".,;:!?。,;:!?" + }, + + // MD037/no-space-in-emphasis - Spaces inside emphasis markers + "MD037": true, + + // MD038/no-space-in-code - Spaces inside code span elements + "MD038": true, + + // MD039/no-space-in-links - Spaces inside link text + "MD039": true, + + // MD040/fenced-code-language - Fenced code blocks should have a language specified + "MD040": true, + + // MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading + "MD041": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD042/no-empty-links - No empty links + "MD042": true, + + // MD043/required-headings/required-headers - Required heading structure + // "MD043": { + // // List of headings + // "headings": [], + // // List of headings + // "headers": [] + // }, + + // MD044/proper-names - Proper names should have the correct capitalization + // "MD044": { + // // List of proper names + // "names": [], + // // Include code blocks + // "code_blocks": true + // }, + + // MD045/no-alt-text - Images should have alternate text (alt text) + "MD045": true, + + // MD046/code-block-style - Code block style + "MD046": { + // Block style + "style": "consistent" + }, + + // MD047/single-trailing-newline - Files should end with a single newline character + "MD047": true, + + // MD048/code-fence-style - Code fence style + "MD048": { + // Code fence syle + "style": "consistent" + } +} From cdc2defba325b3c4f032f7734180d60e8152d825 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:24:21 +0530 Subject: [PATCH 062/176] docs: add link to musicblocks-2 repository --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c7f101c..dee36dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # musicblocks.js -The core of the new Music Blocks 2.0 application. +The core of the new [Music Blocks 2.0](https://github.com/sugarlabs/musicblocks-2) application. ## Tech Stack From 3f80e1ecbe6b3a6b3ddf0754ac64b192c1cfdd11 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:27:08 +0530 Subject: [PATCH 063/176] docs: add guidelines for code quality --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index dee36dc..63e8442 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,12 @@ or the _Sugar-dev Devel <[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@li mailing list. Don't ask silly questions (unless you don't know it is silly ;p) before searching it on the web. +10. Sticking to _TypeScript_ conventions, use _PascalCase_ for filenames, _CAPITALCASE_ for +constants, _camelCase_ for identifiers. Linting has been strictly configured. A `super-linter` is +configured to lint check the files on a pull request. In fact, the _TypeScript_ watcher or build +will throw errors/warnings if there are linting problems. This has been done to maintain code +quality. + _Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull From 53cb348b9fd20bd9e46b9312f06b0cd1d83d7a6c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:36:53 +0530 Subject: [PATCH 064/176] docs: add notes for workflows --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 63e8442..6981f11 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,20 @@ or the _Sugar-dev Devel <[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@li mailing list. Don't ask silly questions (unless you don't know it is silly ;p) before searching it on the web. -10. Sticking to _TypeScript_ conventions, use _PascalCase_ for filenames, _CAPITALCASE_ for +### Notes + +1. Sticking to _TypeScript_ conventions, use _PascalCase_ for filenames, _CAPITALCASE_ for constants, _camelCase_ for identifiers. Linting has been strictly configured. A `super-linter` is configured to lint check the files on a pull request. In fact, the _TypeScript_ watcher or build will throw errors/warnings if there are linting problems. This has been done to maintain code quality. +2. At any point, when new components are created or existing components are modified, unit tests +(passing) reflecting the changes need to be part of the PR before being reviewed. + +3. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been +configured. Each PR must pass the checks before being reviewed. + _Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull From 5fb9a86b80ef29cfa4820102d848984377541c79 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:37:47 +0530 Subject: [PATCH 065/176] chore: copy markdownlint config file to super linter workflow --- .github/linters/.markdownlint.jsonc | 250 ++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 .github/linters/.markdownlint.jsonc diff --git a/.github/linters/.markdownlint.jsonc b/.github/linters/.markdownlint.jsonc new file mode 100644 index 0000000..be7f98e --- /dev/null +++ b/.github/linters/.markdownlint.jsonc @@ -0,0 +1,250 @@ +// documentation: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md + +{ + // Default state for all rules + // "default": true, + + // Path to configuration file to extend + // "extends": null, + + // MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time + "MD001": true, + + // MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading + "MD002": { + // Heading level + "level": 1 + }, + + // MD003/heading-style/header-style - Heading style + "MD003": { + // Heading style + "style": "consistent" + }, + + // MD004/ul-style - Unordered list style + "MD004": { + // List style + "style": "consistent" + }, + + // MD005/list-indent - Inconsistent indentation for list items at the same level + "MD005": true, + + // MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line + "MD006": true, + + // MD007/ul-indent - Unordered list indentation + "MD007": { + // Spaces for indent + "indent": 2, + // Whether to indent the first level of the list + "start_indented": false + }, + + // MD009/no-trailing-spaces - Trailing spaces + "MD009": { + // Spaces for line break + "br_spaces": 2, + // Allow spaces for empty lines in list items + "list_item_empty_lines": false, + // Include unnecessary breaks + "strict": false + }, + + // MD010/no-hard-tabs - Hard tabs + "MD010": { + // Include code blocks + "code_blocks": true + }, + + // MD011/no-reversed-links - Reversed link syntax + "MD011": true, + + // MD012/no-multiple-blanks - Multiple consecutive blank lines + "MD012": { + // Consecutive blank lines + "maximum": 1 + }, + + // MD013/line-length - Line length + "MD013": { + // Number of characters + "line_length": 100, + // Number of characters for headings + "heading_line_length": 80, + // Number of characters for code blocks + "code_block_line_length": 100, + // Include code blocks + "code_blocks": true, + // Include tables + "tables": true, + // Include headings + "headings": true, + // Include headings + "headers": true, + // Strict length checking + "strict": false, + // Stern length checking + "stern": false + }, + + // MD014/commands-show-output - Dollar signs used before commands without showing output + "MD014": true, + + // MD018/no-missing-space-atx - No space after hash on atx style heading + "MD018": true, + + // MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading + "MD019": true, + + // MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading + "MD020": true, + + // MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading + "MD021": true, + + // MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines + "MD022": { + // Blank lines above heading + "lines_above": 1, + // Blank lines below heading + "lines_below": 1 + }, + + // MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line + "MD023": true, + + // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content + "MD024": { + // Only check sibling headings + "allow_different_nesting": false, + // Only check sibling headings + "siblings_only": false + }, + + // MD025/single-title/single-h1 - Multiple top-level headings in the same document + "MD025": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD026/no-trailing-punctuation - Trailing punctuation in heading + "MD026": { + // Punctuation characters + "punctuation": ".,;:!。,;:!" + }, + + // MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol + "MD027": true, + + // MD028/no-blanks-blockquote - Blank line inside blockquote + "MD028": true, + + // MD029/ol-prefix - Ordered list item prefix + "MD029": { + // List style + "style": "one_or_ordered" + }, + + // MD030/list-marker-space - Spaces after list markers + "MD030": { + // Spaces for single-line unordered list items + "ul_single": 1, + // Spaces for single-line ordered list items + "ol_single": 1, + // Spaces for multi-line unordered list items + "ul_multi": 1, + // Spaces for multi-line ordered list items + "ol_multi": 1 + }, + + // MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines + "MD031": { + // Include list items + "list_items": true + }, + + // MD032/blanks-around-lists - Lists should be surrounded by blank lines + "MD032": true, + + // MD033/no-inline-html - Inline HTML + "MD033": { + // Allowed elements + "allowed_elements": [] + }, + + // MD034/no-bare-urls - Bare URL used + "MD034": true, + + // MD035/hr-style - Horizontal rule style + "MD035": { + // Horizontal rule style + "style": "consistent" + }, + + // MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading + "MD036": { + // Punctuation characters + "punctuation": ".,;:!?。,;:!?" + }, + + // MD037/no-space-in-emphasis - Spaces inside emphasis markers + "MD037": true, + + // MD038/no-space-in-code - Spaces inside code span elements + "MD038": true, + + // MD039/no-space-in-links - Spaces inside link text + "MD039": true, + + // MD040/fenced-code-language - Fenced code blocks should have a language specified + "MD040": true, + + // MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading + "MD041": { + // Heading level + "level": 1, + // RegExp for matching title in front matter + "front_matter_title": "^\\s*title\\s*[:=]" + }, + + // MD042/no-empty-links - No empty links + "MD042": true, + + // MD043/required-headings/required-headers - Required heading structure + // "MD043": { + // // List of headings + // "headings": [], + // // List of headings + // "headers": [] + // }, + + // MD044/proper-names - Proper names should have the correct capitalization + // "MD044": { + // // List of proper names + // "names": [], + // // Include code blocks + // "code_blocks": true + // }, + + // MD045/no-alt-text - Images should have alternate text (alt text) + "MD045": true, + + // MD046/code-block-style - Code block style + "MD046": { + // Block style + "style": "consistent" + }, + + // MD047/single-trailing-newline - Files should end with a single newline character + "MD047": true, + + // MD048/code-fence-style - Code fence style + "MD048": { + // Code fence syle + "style": "consistent" + } +} From 19fc429b9223c181eac6e29a74d4092f7adf1eb3 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:44:33 +0530 Subject: [PATCH 066/176] docs: add notes for PR and commit names --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6981f11..eb8edf8 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,17 @@ configured to lint check the files on a pull request. In fact, the _TypeScript_ will throw errors/warnings if there are linting problems. This has been done to maintain code quality. -2. At any point, when new components are created or existing components are modified, unit tests +2. If a PR is addressing an issue, prefix the branch name with the issue number. For example, say a +PR is addressing issue `100`, a branch name could be `100-patch-foobar`. + +3. Follow +[conventional commit messages specification](https://www.conventionalcommits.org/en/v1.0.0-beta.2/) +to help issue tracking. + +4. At any point, when new components are created or existing components are modified, unit tests (passing) reflecting the changes need to be part of the PR before being reviewed. -3. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been +5. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been configured. Each PR must pass the checks before being reviewed. _Please note there is no need to ask permission to work on an issue. You should check for pull From 547bbfda013f4ff453946697c61da0adabe63db4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:56:14 +0530 Subject: [PATCH 067/176] docs: replace react script with scripts configured here --- README.md | 65 +++++++++++++++++++++++++++++++++------------------- package.json | 1 - 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index eb8edf8..a5b329b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ The core of the new [Music Blocks 2.0](https://github.com/sugarlabs/musicblocks- ## Tech Stack -This core of Music Blocks 2.0 uses `TypeScript 4`. In addition, `ts-jest` shall be used for testing. +This core of Music Blocks 2.0 uses `TypeScript 4`. In addition, `Jest` shall be used for testing. `Webpack` has been configured to transpile and bundle the source code, for deployment on a web browser. @@ -177,61 +177,80 @@ spawned and standard input/output is connected to the terminal. This is spawned on `0.0.0.0:80` inside the container, but mapped to `localhost:5001` on host. Visit `localhost:5001` in a browser to view the webpage served. -10. Run _React scripts_. + _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience + longer execution times for these scripts. This happens due to cross-file-system communication. + Duration varies across machines; duration primarily depends on hard drive read/write speed. - - For unoptimized development serving, run +10. Miscellaneous commands. + + - To launch the _Node runtime_, run ```bash - npm start + node ``` - This is spawned on `127.0.0.1:3000` inside the container, but mapped to `localhost:5000` on - host. Visit `localhost:5000` in a browser to view the webpage served. + - To run a _JavaScript_ file, say `file.js`, run - - For testing, run + ```bash + node file.js + ``` + + - To transpile a _TypeScipt_ file, say `file.ts`, to _JavaScript_, run ```bash - npm run test + tsc file.ts ``` - - For generating a production build, run + This transpilation produces `file.js`. + + - To run a _TypeScript_ file directly, say `file.ts`, run ```bash - npm run build + ts-node file.ts ``` - _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience - longer execution times for these scripts. This happens due to cross-file-system communication. - Duration varies across machines; duration primarily depends on hard drive read/write speed. +11. Configured scripts. -11. Miscellaneous commands. + - For testing, run - - To launch the _Node runtime_, run + ```bash + npm run test + ``` + + To run a specific path ```bash - node + npm run test -- "test/path" ``` - - To run a _JavaScript_ file, say `file.js`, run + To run in watch mode ```bash - node file.js + npm run test -- "test/path" --watch ``` - - To transpile a _TypeScipt_ file, say `file.ts`, to _JavaScript_, run + - For generating a production build, run ```bash - tsc file.ts + npm run build ``` - This transpilation produces `file.js`. + - For checking linting problems - - To run a _TypeScript_ file directly, say `file.ts`, run + ```bash + npm run lint + ``` + + To autofix fixable problems ```bash - ts-node file.ts + npm run lint -- --fix ``` + _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience + longer execution times for these scripts. This happens due to cross-file-system communication. + Duration varies across machines; duration primarily depends on hard drive read/write speed. + ## Editor _All code is just plain text, so it doesn't really matter what you use to edit them._ However, diff --git a/package.json b/package.json index e398b3a..0504117 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "scripts": { "build": "webpack", "lint": "eslint src/**/*.ts", - "start": "webpack serve --host 0.0.0.0 --open", "test": "jest --passWithNoTests", "watch": "webpack --watch" } From 25196133e3b69303e420f721050b73af05a8a149 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 07:57:30 +0530 Subject: [PATCH 068/176] docs: remove unnecessary note --- README.md | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index a5b329b..f32d703 100644 --- a/README.md +++ b/README.md @@ -168,20 +168,7 @@ spawned and standard input/output is connected to the terminal. npm ci ``` -9. To spawn a _HTTP Server_ (uses _Python 3_'s `http.server`), run - - ```bash - npm run serve - ``` - - This is spawned on `0.0.0.0:80` inside the container, but mapped to `localhost:5001` on host. - Visit `localhost:5001` in a browser to view the webpage served. - - _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience - longer execution times for these scripts. This happens due to cross-file-system communication. - Duration varies across machines; duration primarily depends on hard drive read/write speed. - -10. Miscellaneous commands. +9. Miscellaneous commands. - To launch the _Node runtime_, run @@ -209,7 +196,7 @@ spawned and standard input/output is connected to the terminal. ts-node file.ts ``` -11. Configured scripts. +10. Configured scripts. - For testing, run From 407645f8f3c24c789f7b9a62dfe9c60b665c0e19 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 18:28:12 +0530 Subject: [PATCH 069/176] docs: update code quality notes --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f32d703..bcdeff7 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ or the _Sugar-dev Devel <[sugar-devel@lists.sugarlabs.org](mailto:sugar-devel@li mailing list. Don't ask silly questions (unless you don't know it is silly ;p) before searching it on the web. -### Notes +### Code Quality Notes 1. Sticking to _TypeScript_ conventions, use _PascalCase_ for filenames, _CAPITALCASE_ for constants, _camelCase_ for identifiers. Linting has been strictly configured. A `super-linter` is @@ -73,7 +73,7 @@ PR is addressing issue `100`, a branch name could be `100-patch-foobar`. 3. Follow [conventional commit messages specification](https://www.conventionalcommits.org/en/v1.0.0-beta.2/) -to help issue tracking. +to help issue tracking. More often than not, take time to add meaningful commit descriptions. 4. At any point, when new components are created or existing components are modified, unit tests (passing) reflecting the changes need to be part of the PR before being reviewed. @@ -81,6 +81,8 @@ to help issue tracking. 5. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been configured. Each PR must pass the checks before being reviewed. +6. For any new functions/methods or classes, add extensive [TSDoc](https://tsdoc.org/) documentation. + _Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull From 2dea31df8633f873d47df1328e8ed193743a55eb Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 18:36:06 +0530 Subject: [PATCH 070/176] docs: add note about meaningful commits separation --- README.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bcdeff7..22166cc 100644 --- a/README.md +++ b/README.md @@ -71,17 +71,20 @@ quality. 2. If a PR is addressing an issue, prefix the branch name with the issue number. For example, say a PR is addressing issue `100`, a branch name could be `100-patch-foobar`. -3. Follow +3. Meaningfully separate code across commits. Don't create arbitrary commits. In case it gets +dirty, please do an _interactive rebase_ with _squash_ and _reword_ to improve. + +4. Follow [conventional commit messages specification](https://www.conventionalcommits.org/en/v1.0.0-beta.2/) to help issue tracking. More often than not, take time to add meaningful commit descriptions. -4. At any point, when new components are created or existing components are modified, unit tests +5. At any point, when new components are created or existing components are modified, unit tests (passing) reflecting the changes need to be part of the PR before being reviewed. -5. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been +6. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been configured. Each PR must pass the checks before being reviewed. -6. For any new functions/methods or classes, add extensive [TSDoc](https://tsdoc.org/) documentation. +7. For any new functions/methods or classes, add extensive [TSDoc](https://tsdoc.org/) documentation. _Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done From cf4f6a83fd3432e40354aa457354767d44e5d324 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 16 Mar 2021 18:47:38 +0530 Subject: [PATCH 071/176] docs: add note about tests in PR Code Quality Notes point 8 mandating unit tests or description about other testing methods in each PR. --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 22166cc..cac98bf 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,10 @@ configured. Each PR must pass the checks before being reviewed. 7. For any new functions/methods or classes, add extensive [TSDoc](https://tsdoc.org/) documentation. +8. Each PR needs to have supporting unit tests covering all (or as much practical) use cases to +qualify for review. In case testing is done via some non-standard method, adequate description of +the method/s need/s to be specified in the PR body. + _Please note there is no need to ask permission to work on an issue. You should check for pull requests linked to an issue you are addressing; if there are none, then assume nobody has done anything. Begin to fix the problem, test, make your commits, push your commits, then make a pull From 5cd86214d9114777b2c241c4ebf54dbe91f20118 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Mar 2021 23:02:11 +0530 Subject: [PATCH 072/176] docs: update names to refer to Music Blocks v4 This new instalment of Music Blocks will be Music Blocks major release version 4 instead of Music Blocks 2.0. Hence, the repositories musicblocks-2 and musicblocks-lib will be named musicblocks-v4 and musicblocks-v4-lib, respectively. This commit updates the said references in the root README. --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cac98bf..f94e884 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# musicblocks.js +# Core (engine) of musicblocks-v4 -The core of the new [Music Blocks 2.0](https://github.com/sugarlabs/musicblocks-2) application. +The core of the new [Music Blocks (v4)](https://github.com/sugarlabs/musicblocks-v4) application. ## Tech Stack -This core of Music Blocks 2.0 uses `TypeScript 4`. In addition, `Jest` shall be used for testing. +This core of Music Blocks v4 uses `TypeScript 4`. In addition, `Jest` shall be used for testing. `Webpack` has been configured to transpile and bundle the source code, for deployment on a web browser. @@ -15,7 +15,7 @@ Programmers, please follow these general ### New Contributors -Use the [discussions](https://github.com/sugarlabs/musicblocks/discussions) tab at the top of the +Use the [discussions](https://github.com/sugarlabs/musicblocks-v4-lib/discussions) tab at the top of the repository to: - Ask questions you’re wondering about. @@ -29,7 +29,7 @@ Feel free. But, please don't spam :p. 1. Your contributions need not necessarily have to address any discovered issue. If you encounter any, feel free to add a fix through a PR, or create a new issue ticket. -2. Use [labels](https://github.com/sugarlabs/musicblocks/labels) on your issues and PRs. +2. Use [labels](https://github.com/sugarlabs/musicblocks-v4-lib/labels) on your issues and PRs. 3. Do not spam with lots of PRs with little changes. @@ -113,7 +113,7 @@ _This project is containerized using [**docker**](https://www.docker.com/). Ther Windows) this repository using ```bash - git clone https://github.com/sugarlabs/musicblocks-2.git + git clone https://github.com/sugarlabs/musicblocks-v4-lib.git ``` 4. Build _docker image_ and launch _docker network_. From 924c9e3433d343e4e5569af76d1fe596f545313a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 20 Mar 2021 23:21:57 +0530 Subject: [PATCH 073/176] docs (code quality): update naming conventions Supposed to use camelCase for filenames and not PascalCase. PascalCase is meant for class names. --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f94e884..40bf13f 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,11 @@ on the web. ### Code Quality Notes -1. Sticking to _TypeScript_ conventions, use _PascalCase_ for filenames, _CAPITALCASE_ for -constants, _camelCase_ for identifiers. Linting has been strictly configured. A `super-linter` is -configured to lint check the files on a pull request. In fact, the _TypeScript_ watcher or build -will throw errors/warnings if there are linting problems. This has been done to maintain code -quality. +1. Sticking to _TypeScript_ conventions, use _camelCase_ for filenames, _CAPITALCASE_ for +constants, _camelCase_ for identifiers, and _PascalCase for classes_. Linting has been strictly +configured. A `super-linter` is configured to lint check the files on a pull request. In fact, the +_TypeScript_ watcher or build will throw errors/warnings if there are linting problems. This has +been done to maintain code quality. 2. If a PR is addressing an issue, prefix the branch name with the issue number. For example, say a PR is addressing issue `100`, a branch name could be `100-patch-foobar`. From c7e1a944cced420f985d84964e7a04e87cf534fc Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 1 Apr 2021 18:45:03 +0530 Subject: [PATCH 074/176] chore: allow header duplication for non siblings Parameter "allow_different_nesting" of rule MD024 set as true. Redundant parameter "siblings_only" of the same rule is removed. --- .github/linters/.markdownlint.jsonc | 4 +--- .markdownlint.jsonc | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/linters/.markdownlint.jsonc b/.github/linters/.markdownlint.jsonc index be7f98e..19f5412 100644 --- a/.github/linters/.markdownlint.jsonc +++ b/.github/linters/.markdownlint.jsonc @@ -118,9 +118,7 @@ // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content "MD024": { // Only check sibling headings - "allow_different_nesting": false, - // Only check sibling headings - "siblings_only": false + "allow_different_nesting": true }, // MD025/single-title/single-h1 - Multiple top-level headings in the same document diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc index be7f98e..19f5412 100644 --- a/.markdownlint.jsonc +++ b/.markdownlint.jsonc @@ -118,9 +118,7 @@ // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content "MD024": { // Only check sibling headings - "allow_different_nesting": false, - // Only check sibling headings - "siblings_only": false + "allow_different_nesting": true }, // MD025/single-title/single-h1 - Multiple top-level headings in the same document From 1dcd4e540915670ee7cfbd5de28f45d0b54e538b Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 1 Apr 2021 18:05:16 +0530 Subject: [PATCH 075/176] chore: lint .prototype directory Prevent skipping dot folder '.prototype' by adding negated path matching to '.eslintignore' --- .eslintignore | 2 ++ .github/linters/.eslintignore | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 .eslintignore create mode 100644 .github/linters/.eslintignore diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..295b70a --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +# Don't ignore contents of .prototype directory +!src/.prototype diff --git a/.github/linters/.eslintignore b/.github/linters/.eslintignore new file mode 100644 index 0000000..295b70a --- /dev/null +++ b/.github/linters/.eslintignore @@ -0,0 +1,2 @@ +# Don't ignore contents of .prototype directory +!src/.prototype From 94d5e61121857dbd72e9e6d6dd9fa933450eb29a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 1 Apr 2021 18:40:18 +0530 Subject: [PATCH 076/176] chore: update ESLint rules Disables removal of inferable types. Disables stock 'no-unused-vars' rule while allowing 'typescript-eslint/no-unused-vars' except for throwable underscore variable. --- .eslintrc.json | 25 +++++++++++++++++++++--- .github/linters/.eslintrc.json | 35 +++++++++++++++++++++++++++++----- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index a146fbb..47e167d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,11 +10,24 @@ }, "plugins": ["@typescript-eslint"], "rules": { + "@typescript-eslint/no-inferrable-types": "off", "no-mixed-spaces-and-tabs": "warn", - "no-unused-vars": "warn", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "varsIgnorePattern": "_" + } + ], "no-use-before-define": "off", "@typescript-eslint/no-use-before-define": ["error"], - "quotes": ["warn", "single", { "avoidEscape": true }], + "quotes": [ + "warn", + "single", + { + "avoidEscape": true + } + ], "semi": ["error", "always"], "prefer-const": ["warn"], // "no-console": "warn", @@ -28,7 +41,13 @@ "ignoreTemplateLiterals": true } ], - "no-trailing-spaces": ["warn", { "skipBlankLines": true, "ignoreComments": true }], + "no-trailing-spaces": [ + "warn", + { + "skipBlankLines": true, + "ignoreComments": true + } + ], "no-duplicate-case": "error", "no-irregular-whitespace": "warn" }, diff --git a/.github/linters/.eslintrc.json b/.github/linters/.eslintrc.json index 96752fe..47e167d 100644 --- a/.github/linters/.eslintrc.json +++ b/.github/linters/.eslintrc.json @@ -1,14 +1,33 @@ { - "env": { "browser": true, "es2021": true }, + "env": { + "browser": true, + "es2021": true + }, "parser": "@typescript-eslint/parser", - "parserOptions": { "ecmaVersion": 12, "sourceType": "module" }, + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, "plugins": ["@typescript-eslint"], "rules": { + "@typescript-eslint/no-inferrable-types": "off", "no-mixed-spaces-and-tabs": "warn", - "no-unused-vars": "warn", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "varsIgnorePattern": "_" + } + ], "no-use-before-define": "off", "@typescript-eslint/no-use-before-define": ["error"], - "quotes": ["warn", "single", { "avoidEscape": true }], + "quotes": [ + "warn", + "single", + { + "avoidEscape": true + } + ], "semi": ["error", "always"], "prefer-const": ["warn"], // "no-console": "warn", @@ -22,7 +41,13 @@ "ignoreTemplateLiterals": true } ], - "no-trailing-spaces": ["warn", { "skipBlankLines": true, "ignoreComments": true }], + "no-trailing-spaces": [ + "warn", + { + "skipBlankLines": true, + "ignoreComments": true + } + ], "no-duplicate-case": "error", "no-irregular-whitespace": "warn" }, From e671494854a93c10f09ce8e021562e04c4de9ba8 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 1 Apr 2021 19:14:23 +0530 Subject: [PATCH 077/176] docs: update docs for docker compose Docker v1.28 and above have Docker Compose in the Docker CLI itself. --- README.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 40bf13f..76bd455 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,8 @@ Programmers, please follow these general ### New Contributors -Use the [discussions](https://github.com/sugarlabs/musicblocks-v4-lib/discussions) tab at the top of the -repository to: +Use the [discussions](https://github.com/sugarlabs/musicblocks-v4-lib/discussions) tab at the top of +the repository to: - Ask questions you’re wondering about. - Share ideas. @@ -134,6 +134,12 @@ Windows) this repository using docker-compose up -d ``` + or (for _Docker v1.28_ and above) + + ```bash + docker compose up -d + ``` + If you haven't pulled the image from the _GitHub Container Registry_ (_GHCR_), it'll first build the image using the `Dockerfile`, then launch the _docker network_. If an image already exists locally, it'll not be rebuilt. To force a rebuild from the `Dockerfile` before launching the @@ -165,12 +171,19 @@ spawned and standard input/output is connected to the terminal. v9.1.1 ``` -7. To shut down the _docker network_, run (in the terminal where you ran `docker-compose up -d`) +7. To shut down the _docker network_, run (in the terminal where you ran `docker-compose up -d` or +`docker compose up -d`) ```bash docker-compose down ``` + or (for _Docker v1.28_ and above) + + ```bash + docker compose down + ``` + 8. To install all the dependencies (in `package.json`), run ```bash From 44e05fbd81ffafe6704d0ee5b6528cde4c3844f6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 13 Apr 2021 09:27:29 +0530 Subject: [PATCH 078/176] docs: update versions of utilities Versions of Node, NPM, and TypeScript Compiler (tsc) updated according to updated image. --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 76bd455..a4e73e4 100644 --- a/README.md +++ b/README.md @@ -165,9 +165,9 @@ spawned and standard input/output is connected to the terminal. Output should look like ```bash - v14.15.3 - 6.14.10 - Version 4.1.3 + v14.16.1 + 7.9.0 + Version 4.2.4 v9.1.1 ``` From 0d3664ac5258622a87a190a123d1dcad6defea2c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 13 Apr 2021 19:53:12 +0530 Subject: [PATCH 079/176] chore: update project name --- package-lock.json | 2 +- package.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index bfc0e7d..99dba4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "musicblocks.js", + "name": "musicblocks-v4-lib", "version": "0.1.0", "lockfileVersion": 1, "requires": true, diff --git a/package.json b/package.json index 0504117..25ee167 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { - "name": "musicblocks.js", + "name": "musicblocks-v4-lib", "version": "0.1.0", - "description": "The core of the new Music Blocks 2 application", + "description": "The core of the new Music Blocks (v4) application", "private": true, "repository": { "type": "git", - "url": "git+https://github.com/meganindya/musicblocks.js.git" + "url": "git+https://github.com/meganindya/musicblocks-v4-lib.git" }, "keywords": [ "musicblocks" From b7a6852ed1dcc1bb1181c026939be912afa54928 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 14 Apr 2021 10:36:31 +0530 Subject: [PATCH 080/176] docs (code quality): fix grammatical typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4e73e4..cd78876 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ to help issue tracking. More often than not, take time to add meaningful commit 5. At any point, when new components are created or existing components are modified, unit tests (passing) reflecting the changes need to be part of the PR before being reviewed. -6. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_) has been +6. Two workflows — a _Continuous Integration_ (_CI_) and a _Linter_ (_Super Linter_), have been configured. Each PR must pass the checks before being reviewed. 7. For any new functions/methods or classes, add extensive [TSDoc](https://tsdoc.org/) documentation. From 2e409e866833312be1a03a4c7c0947fcfb8c9573 Mon Sep 17 00:00:00 2001 From: ricknjacky Date: Wed, 17 Feb 2021 14:39:15 +0530 Subject: [PATCH 081/176] operations on String --- .../syntax-core/primitiveElements.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/.prototype/syntax-core/primitiveElements.ts b/src/.prototype/syntax-core/primitiveElements.ts index 0da4bc3..9c1d78a 100644 --- a/src/.prototype/syntax-core/primitiveElements.ts +++ b/src/.prototype/syntax-core/primitiveElements.ts @@ -343,6 +343,64 @@ export class TString extends PrimitiveElement { return new TString(primitive.value.toString()); } } + + + length(): TInt { + return new TInt(this.value.length); +} + + charAt(index: TInt): TChar { + const thisStr = this.value; + const indxInt = index.value; + if (indxInt < 0 || indxInt >= thisStr.length) { + throw Error(`String index "${indxInt}" out of bounds`); + } + return new TChar(thisStr.charAt(indxInt)); + }; + + indexOf(substring: TChar | TString): TInt { + const thisStr = this.value; + return new TInt(thisStr.indexOf(substring.value.toString())); + }; + + substring(startIndex: TInt, length?: TInt): TString { + const thisStr = this.value; + const indxInt = startIndex.value; + if (typeof length === "undefined"){ + if (indxInt < 0 || indxInt >= thisStr.length) { + throw Error(`String index "${indxInt}" out of bounds`); + } + return new TString(thisStr.substring(indxInt)); + } + else { + const endInt = length.value; + if (indxInt < 0 || endInt >= thisStr.length){ + throw Error(`String index "${endInt}" out of bounds or "${indxInt} is less than 0"`); + } + return new TString(thisStr.substring(indxInt, endInt)); + } + }; + + equals(operand: TChar | TString): TBoolean{ + const thisStr = this.value; + return new TBoolean(thisStr === operand.value.toString()); + }; + + static equals(operand_1: TChar | TString, operand_2: TChar | TString): TBoolean{ + const operand1 = operand_1.value.toString(); + const operand2 = operand_2.value.toString(); + return new TBoolean(operand1 === operand2); + }; + + compareTo(operand: TChar | TString): TInt{ + return new TInt(this.compareTo(operand).value) + }; + + static compare(operand_1: TChar | TString, operand_2: TChar | TString): TInt{ + const operand1 = operand_1.value.toString(); + const operand2 = operand_2.value.toString(); + return new TInt(operand1.length - operand2.length); + }; } /** From 64209e3ebb7876ac64e6ed01a812bce18680c69c Mon Sep 17 00:00:00 2001 From: ricknjacky Date: Wed, 17 Feb 2021 18:17:47 +0530 Subject: [PATCH 082/176] minor bugfixes--typo --- src/.prototype/syntax-core/primitiveElements.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/.prototype/syntax-core/primitiveElements.ts b/src/.prototype/syntax-core/primitiveElements.ts index 9c1d78a..bcea43b 100644 --- a/src/.prototype/syntax-core/primitiveElements.ts +++ b/src/.prototype/syntax-core/primitiveElements.ts @@ -393,7 +393,7 @@ export class TString extends PrimitiveElement { }; compareTo(operand: TChar | TString): TInt{ - return new TInt(this.compareTo(operand).value) + return new TInt(this.value.length - operand.value.length); }; static compare(operand_1: TChar | TString, operand_2: TChar | TString): TInt{ From 8863950cc5c3c2f7853d7460f69bf567e269b40b Mon Sep 17 00:00:00 2001 From: ricknjacky Date: Wed, 17 Feb 2021 18:18:11 +0530 Subject: [PATCH 083/176] tests for string methods --- .../syntax-core/primitiveElements.test.ts | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/src/.prototype/syntax-core/primitiveElements.test.ts b/src/.prototype/syntax-core/primitiveElements.test.ts index 027c078..620cf6b 100644 --- a/src/.prototype/syntax-core/primitiveElements.test.ts +++ b/src/.prototype/syntax-core/primitiveElements.test.ts @@ -381,6 +381,98 @@ describe('operations on type elements', () => { }); }); + describe('class TString', () => { + test('test to check lenghth of string `"Hello World"` to be 11', () => { + const myString = new TString("hello world"); + expect(myString.length().value).toBe(11); + }); + + test('test to find the character at index 3 for string `"hello world"`', () => { + const myString = new TString("hello world"); + const index = new TInt(3); + expect(myString.charAt(index).value).toBe("l"); + }); + + test('test to find the index of character `"e"` in string `"hello world"`', () => { + const myString = new TString("hello world"); + const indexS = new TString("e"); + expect(myString.indexOf(indexS).value).toBe(1); + }); + + test('test for substring method that starts at index 1', () => { + const myString = new TString("hello world"); + const index = new TInt(1); + expect(myString.substring(index).value).toBe("ello world"); + }); + + test('test for substring method that starts at index 1 to index 4', () => { + const myString = new TString("hello world"); + const index = new TInt(1); + const endIndex = new TInt(4); + expect(myString.substring(index, endIndex).value).toBe("ell"); + }); + + test('test to compare equality of two strings using equals method to return true', () => { + const myString = new TString("hello world"); + const MyString = new TString("hello world"); + expect(myString.equals(MyString).value).toBe(true); + }); + + test('test to compare equality of two strings using equals method to return false', () => { + const myString = new TString("hello world"); + const MyString = new TString("llo world"); + expect(myString.equals(MyString).value).toBe(false); + }); + + test('test to compare equality of two strings using equals method to return true using static method', () => { + const myString = new TString("hello world"); + const MyString = new TString("hello world"); + expect(TString.equals(myString, MyString).value).toBe(true); + }); + + test('test to compare equality of two strings using equals method to return false using static method', () => { + const myString = new TString("hello world"); + const MyString = new TString("llo world"); + expect(TString.equals(myString, MyString).value).toBe(false); + }); + + test('test to compare two strings using compareTo method and expect -2', () => { + const myString = new TString("llo world"); + const MyString = new TString("hello world"); + expect(myString.compareTo(MyString).value).toBe(-2); + }); + + test('test to compare two strings using compareTo method and expect 0', () => { + const myString = new TString("hello world"); + const MyString = new TString("hello world"); + expect(myString.compareTo(MyString).value).toBe(0); + }); + + test('test to compare two strings using compareTo method and expect 1', () => { + const myString = new TString("hello worldd"); + const MyString = new TString("hello world"); + expect(myString.compareTo(MyString).value).toBe(1); + }); + + test('test to compare two strings using static compare method and expect -2', () => { + const myString = new TString("llo world"); + const MyString = new TString("hello world"); + expect(TString.compare(myString, MyString).value).toBe(-2); + }); + + test('test to compare two strings using static compare method and expect 0', () => { + const myString = new TString("hello world"); + const MyString = new TString("hello world"); + expect(TString.compare(myString, MyString).value).toBe(0); + }); + + test('test to compare two strings using static compare method and expect 1', () => { + const myString = new TString("hello worldd"); + const MyString = new TString("hello world"); + expect(TString.compare(myString, MyString).value).toBe(1); + }); + }); + const operand_4 = new TBoolean(true); const operand_5 = new TBoolean(false); From 49ab8b4bfe6642ab0859b239bf606a80b58b646a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 3 Nov 2021 03:21:42 +0530 Subject: [PATCH 084/176] refactor: reorganize project as an npm library --- .vscode/settings.json | 13 +- package-lock.json | 16822 +++++++++++++++++++++++++++++++++------- package.json | 9 +- tsconfig.json | 6 +- webpack.config.js | 7 +- 5 files changed, 13992 insertions(+), 2865 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index ad2548e..ca61bda 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,8 @@ "editor.selectionHighlight": true, "editor.tabSize": 4, "[json]": { - "editor.tabSize": 2 + "editor.tabSize": 2, + "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[html]": { "editor.tabSize": 2, @@ -18,16 +19,6 @@ "[scss]": { "editor.tabSize": 2 }, - "[typescriptreact]": { - "editor.tabSize": 2 - }, - "[dart]": { - "editor.selectionHighlight": false, - "editor.suggest.snippetsPreventQuickSuggestions": false, - "editor.suggestSelection": "first", - "editor.tabCompletion": "onlySnippets", - "editor.wordBasedSuggestions": false - }, "[markdown]": { "editor.wordWrap": "on", "editor.quickSuggestions": false, diff --git a/package-lock.json b/package-lock.json index 99dba4c..d41cefd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,11640 @@ { "name": "musicblocks-v4-lib", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "0.1.0", + "license": "AGPL-3.0", + "devDependencies": { + "@types/jest": "^26.0.19", + "@typescript-eslint/eslint-plugin": "^4.11.1", + "@typescript-eslint/parser": "^4.11.1", + "clean-webpack-plugin": "^3.0.0", + "eslint": "^7.17.0", + "eslint-config-prettier": "^7.1.0", + "html-webpack-plugin": "^4.5.0", + "jest": "^26.6.3", + "ts-jest": "^26.4.4", + "ts-loader": "^8.0.13", + "typescript": "^4.1.3", + "webpack": "^5.11.1", + "webpack-cli": "^4.3.1", + "webpack-dev-server": "^3.11.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/eslint": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", + "dev": true, + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "dev": true + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", + "dev": true + }, + "node_modules/@types/uglify-js": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/webpack": { + "version": "4.41.31", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", + "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "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/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001274", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", + "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "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" + } + }, + "node_modules/chokidar/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/chokidar/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "dependencies": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + }, + "engines": { + "node": ">=8.9.0" + }, + "peerDependencies": { + "webpack": "*" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/default-gateway/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.887", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.887.tgz", + "integrity": "sha512-QQUumrEjFDKSVYVdaeBmFdyQGoaV+fCSMyWHvfx/u22bRHSTeBQYt6P4jMY+gFd4kgKB9nqk7RMtWkDB49OYPA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "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": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "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-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "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/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "dependencies": { + "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "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": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "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/portfinder/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "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/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "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", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/readdirp/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.3" + } + }, + "node_modules/sockjs-client/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/sockjs/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "dev": true, + "dependencies": { + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "jest": ">=26 <27", + "typescript": ">=3.8 <5.0" + } + }, + "node_modules/ts-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "*" + } + }, + "node_modules/ts-loader/node_modules/loader-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.1.tgz", + "integrity": "sha512-g4miPa9uUrZz4iElkaVJgDFwKJGh8aQGM7pUL4ejXl6cu7kSb30seQOVGNMP6sW8j7DW77X68hJZ+GM7UGhXeQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.61.0.tgz", + "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-cli/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/webpack-cli/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-cli/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "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.3.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.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/webpack-dev-server/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-log/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.11", @@ -13,42 +11645,48 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/compat-data": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", + "dev": true + }, "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "@babel/highlight": "^7.16.0" } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "source-map": { @@ -60,12 +11698,12 @@ } }, "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "requires": { - "@babel/types": "^7.12.11", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -78,134 +11716,177 @@ } } }, + "@babel/helper-compilation-targets": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.16.0" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -216,13 +11897,49 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -244,12 +11961,12 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-import-meta": { @@ -325,50 +12042,62 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + } } }, "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" + "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -378,13 +12107,12 @@ } }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, @@ -405,25 +12133,24 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", "dev": true }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -436,6 +12163,23 @@ } } }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -449,43 +12193,6 @@ "resolve-from": "^5.0.0" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -495,9 +12202,9 @@ } }, "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/console": { @@ -704,35 +12411,35 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -747,16 +12454,16 @@ "@sinonjs/commons": "^1.7.0" } }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -767,18 +12474,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -786,18 +12493,18 @@ } }, "@types/babel__traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz", - "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/eslint": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", - "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "requires": { "@types/estree": "*", @@ -805,9 +12512,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", "dev": true, "requires": { "@types/eslint": "*", @@ -815,15 +12522,15 @@ } }, "@types/estree": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", - "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -831,18 +12538,18 @@ } }, "@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { "@types/node": "*" } }, "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", + "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", "dev": true }, "@types/istanbul-lib-coverage": { @@ -861,18 +12568,18 @@ } }, "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/jest": { - "version": "26.0.19", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.19.tgz", - "integrity": "sha512-jqHoirTG61fee6v6rwbnEuKhpSKih0tuhqeFbCmMmErhtu3BYlOZaXWjffgOstMM4S/3iQD31lI5bGLTrs97yQ==", + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", "dev": true, "requires": { "jest-diff": "^26.0.0", @@ -880,33 +12587,33 @@ } }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/node": { - "version": "14.14.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", - "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@types/prettier": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.6.tgz", - "integrity": "sha512-6gOkRe7OIioWAXfnO/2lFiv+SJichKVSys1mSsgyrYHSEjk8Ctv4tSR/Odvnu+HWlH2C8j53dahU03XmQdd5fA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "@types/source-list-map": { @@ -916,44 +12623,44 @@ "dev": true }, "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, "@types/tapable": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", - "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", + "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, "@types/uglify-js": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz", - "integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", + "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", "dev": true, "requires": { "source-map": "^0.6.1" } }, "@types/webpack": { - "version": "4.41.25", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz", - "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==", + "version": "4.41.31", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", + "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", "dev": true, "requires": { - "@types/anymatch": "*", "@types/node": "*", - "@types/tapable": "*", + "@types/tapable": "^1", "@types/uglify-js": "*", "@types/webpack-sources": "*", + "anymatch": "^3.0.0", "source-map": "^0.6.0" } }, "@types/webpack-sources": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", - "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", + "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", "dev": true, "requires": { "@types/node": "*", @@ -970,292 +12677,271 @@ } }, "@types/yargs": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.12.tgz", - "integrity": "sha512-f+fD/fQAo3BCbCDlrUpznF1A5Zp9rB0noS5vnoormHSIPFKL0Z2DcUJ3Gxp5ytH4uLRNxy7AwYUC9exZzqGMAw==", + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.11.1.tgz", - "integrity": "sha512-fABclAX2QIEDmTMk6Yd7Muv1CzFLwWM4505nETzRHpP3br6jfahD9UUJkhnJ/g2m7lwfz8IlswcwGGPGiq9exw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.11.1", - "@typescript-eslint/scope-manager": "4.11.1", - "debug": "^4.1.1", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.11.1.tgz", - "integrity": "sha512-mAlWowT4A6h0TC9F+J5pdbEhjNiEMO+kqPKQ4sc3fVieKL71dEqfkKgtcFVSX3cjSBwYwhImaQ/mXQF0oaI38g==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.11.1", - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/typescript-estree": "4.11.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, "@typescript-eslint/parser": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.11.1.tgz", - "integrity": "sha512-BJ3jwPQu1jeynJ5BrjLuGfK/UJu6uwHxJ/di7sanqmUmxzmyIcd3vz58PMR7wpi8k3iWq2Q11KMYgZbUpRoIPw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.11.1", - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/typescript-estree": "4.11.1", - "debug": "^4.1.1" + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" } }, "@typescript-eslint/scope-manager": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz", - "integrity": "sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/visitor-keys": "4.11.1" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.11.1.tgz", - "integrity": "sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz", - "integrity": "sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.11.1", - "@typescript-eslint/visitor-keys": "4.11.1", - "debug": "^4.1.1", - "globby": "^11.0.1", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz", - "integrity": "sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.11.1", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, "@webassemblyjs/ast": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz", - "integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz", - "integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz", - "integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz", - "integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz", - "integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.1" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz", - "integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz", - "integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz", - "integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz", - "integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz", - "integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz", - "integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz", - "integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz", - "integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/helper-wasm-section": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-opt": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "@webassemblyjs/wast-printer": "1.9.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz", - "integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz", - "integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz", - "integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz", - "integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==", + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/floating-point-hex-parser": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-code-frame": "1.9.1", - "@webassemblyjs/helper-fsm": "1.9.1", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz", - "integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==", + "@webpack-cli/configtest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1", - "@xtuc/long": "4.2.2" - } + "requires": {} }, "@webpack-cli/info": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.1.tgz", - "integrity": "sha512-fLnDML5HZ5AEKzHul8xLAksoKN2cibu6MgonkUj8R9V7bbeVRkd1XbGEGWrAUNYHbX1jcqCsDEpBviE5StPMzQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.1.tgz", - "integrity": "sha512-Zj1z6AyS+vqV6Hfi7ngCjFGdHV5EwZNIHo6QfFTNe9PyW+zBU1zJ9BiOW1pmUEq950RC4+Dym6flyA/61/vhyw==", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", @@ -1302,10 +12988,11 @@ } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -1313,6 +13000,15 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "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" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1329,13 +13025,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-colors": { "version": "4.1.1", @@ -1344,18 +13042,18 @@ "dev": true }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } @@ -1367,142 +13065,28 @@ "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -1551,24 +13135,9 @@ "dev": true }, "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "assign-symbols": { @@ -1616,27 +13185,6 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "automation-events": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-3.0.3.tgz", - "integrity": "sha512-iFZcgSVwp8JnSXCv15LQ/tyKEAm+ToBTseD3bYWwIUUUzWQGwUMKMmIm2hM+KlfC0qBZu1xj/WqidhqvGvA3sA==", - "requires": { - "@babel/runtime": "^7.12.5", - "tslib": "^2.0.3" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, "babel-jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", @@ -1654,16 +13202,37 @@ } }, "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-instrument": "^5.0.4", "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "babel-plugin-jest-hoist": { @@ -1709,9 +13278,9 @@ } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base": { @@ -1775,15 +13344,6 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1893,16 +13453,16 @@ "dev": true }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" } }, "bs-logger": { @@ -1924,9 +13484,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-indexof": { @@ -1959,13 +13519,13 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "callsites": { @@ -1991,9 +13551,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001171", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001171.tgz", - "integrity": "sha512-5Alrh8TTYPG9IH4UkRqEBZoEToWRLvPbSQokvzSz0lii8/FOWKG4keO1HoYfPWs8IF/NH/dyNPg1cmJGvV3Zlg==", + "version": "1.0.30001274", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", + "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", "dev": true }, "capture-exit": { @@ -2005,61 +13565,14 @@ "rsvp": "^4.8.4" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "char-regex": { @@ -2088,6 +13601,27 @@ "upath": "^1.1.1" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -2106,13 +13640,14 @@ "to-regex": "^3.0.1" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, "fill-range": { @@ -2127,6 +13662,17 @@ "to-regex-range": "^2.1.0" } }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -2148,6 +13694,44 @@ } } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2155,15 +13739,50 @@ "dev": true, "requires": { "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "to-regex-range": { @@ -2179,21 +13798,10 @@ } }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "ci-info": { "version": "2.0.0", @@ -2214,90 +13822,50 @@ "dev": true, "requires": { "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + } + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "co": { @@ -2323,24 +13891,24 @@ } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "combined-stream": { @@ -2402,12 +13970,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true } } }, @@ -2430,14 +13992,6 @@ "dev": true, "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "content-type": { @@ -2447,20 +14001,12 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } } }, "cookie": { @@ -2482,9 +14028,9 @@ "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cross-spawn": { @@ -2499,21 +14045,22 @@ } }, "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "cssom": { @@ -2539,15 +14086,6 @@ } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -2560,9 +14098,9 @@ } }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -2575,9 +14113,9 @@ "dev": true }, "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, "decode-uri-component": { @@ -2601,9 +14139,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -2722,44 +14260,12 @@ } }, "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^0.1.0" } }, "del": { @@ -2834,9 +14340,9 @@ "dev": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "diff-sequences": { @@ -2861,9 +14367,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -2898,27 +14404,20 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "dev": true - } } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domexception": { @@ -2939,22 +14438,23 @@ } }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.2.0" } }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, "dot-case": { @@ -2967,16 +14467,6 @@ "tslib": "^2.0.3" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2984,9 +14474,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.633", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz", - "integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==", + "version": "1.3.887", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.887.tgz", + "integrity": "sha512-QQUumrEjFDKSVYVdaeBmFdyQGoaV+fCSMyWHvfx/u22bRHSTeBQYt6P4jMY+gFd4kgKB9nqk7RMtWkDB49OYPA==", "dev": true }, "emittery": { @@ -3023,9 +14513,9 @@ } }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -3043,15 +14533,15 @@ } }, "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, "errno": { @@ -3073,25 +14563,39 @@ } }, "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { + "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3116,24 +14620,30 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" }, "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -3176,29 +14686,32 @@ } }, "eslint": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", - "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", - "esquery": "^1.2.0", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^6.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -3206,7 +14719,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -3215,11 +14728,28 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -3229,10 +14759,11 @@ } }, "eslint-config-prettier": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", - "integrity": "sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA==", - "dev": true + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "dev": true, + "requires": {} }, "eslint-scope": { "version": "5.1.1", @@ -3245,26 +14776,18 @@ } }, "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { @@ -3293,18 +14816,18 @@ "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3319,9 +14842,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -3351,40 +14874,40 @@ "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, "requires": { "original": "^1.0.0" } }, "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", "dev": true }, "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } }, @@ -3418,24 +14941,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3456,32 +14961,6 @@ "jest-matcher-utils": "^26.6.2", "jest-message-util": "^26.6.2", "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "express": { @@ -3542,40 +15021,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-extendable": "^0.1.0" } }, "extglob": { @@ -3603,15 +15058,6 @@ "is-descriptor": "^1.0.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -3643,12 +15089,6 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3656,17 +15096,16 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -3688,18 +15127,18 @@ "dev": true }, "fastq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", - "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -3715,9 +15154,9 @@ } }, "file-entry-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz", - "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" @@ -3772,12 +15211,12 @@ } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, @@ -3803,15 +15242,15 @@ } }, "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", "dev": true }, "for-in": { @@ -3820,27 +15259,21 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fragment-cache": { @@ -3865,15 +15298,11 @@ "dev": true }, "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "optional": true }, "function-bind": { "version": "1.1.1", @@ -3900,9 +15329,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -3917,10 +15346,23 @@ "dev": true }, "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true + "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" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "get-value": { "version": "2.0.6", @@ -3928,19 +15370,10 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3952,9 +15385,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -3967,18 +15400,18 @@ "dev": true }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" } }, "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -3990,9 +15423,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "growly": { @@ -4008,22 +15441,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4033,18 +15450,33 @@ "function-bind": "^1.1.1" } }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4104,9 +15536,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "hpack.js": { @@ -4119,38 +15551,6 @@ "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "html-encoding-sniffer": { @@ -4190,9 +15590,9 @@ } }, "html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", "dev": true, "requires": { "@types/html-minifier-terser": "^5.0.0", @@ -4200,32 +15600,22 @@ "@types/webpack": "^4.41.8", "html-minifier-terser": "^5.0.1", "loader-utils": "^1.2.3", - "lodash": "^4.17.15", + "lodash": "^4.17.20", "pretty-error": "^2.1.1", "tapable": "^1.1.3", "util.promisify": "1.0.0" } }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, "http-deceiver": { @@ -4272,6 +15662,17 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "http-proxy-middleware": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", @@ -4300,17 +15701,16 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, "fill-range": { @@ -4323,17 +15723,44 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" } }, "is-number": { @@ -4375,6 +15802,18 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "to-regex-range": { @@ -4389,21 +15828,20 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "agent-base": "6", + "debug": "4" } }, "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "iconv-lite": { @@ -4432,61 +15870,13 @@ } }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } } }, "imurmurhash": { @@ -4521,6 +15911,17 @@ "ipaddr.js": "^1.9.0" } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -4572,12 +15973,13 @@ } }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-arrayish": { @@ -4586,6 +15988,15 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -4595,6 +16006,16 @@ "binary-extensions": "^1.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4602,9 +16023,9 @@ "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-ci": { @@ -4617,9 +16038,9 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" @@ -4646,10 +16067,13 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-descriptor": { "version": "0.1.6", @@ -4671,9 +16095,9 @@ } }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "optional": true }, @@ -4702,9 +16126,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4722,6 +16146,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -4756,33 +16189,49 @@ } }, "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-typedarray": { @@ -4791,6 +16240,15 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -4798,10 +16256,14 @@ "dev": true }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } }, "isarray": { "version": "1.0.0", @@ -4818,19 +16280,13 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { @@ -4862,29 +16318,12 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -4893,9 +16332,9 @@ } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -4911,141 +16350,6 @@ "@jest/core": "^26.6.3", "import-local": "^3.0.2", "jest-cli": "^26.6.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } } }, "jest-changed-files": { @@ -5057,40 +16361,27 @@ "@jest/types": "^26.6.2", "execa": "^4.0.0", "throat": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "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" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - } + } + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" } }, "jest-config": { @@ -5208,25 +16499,6 @@ "micromatch": "^4.0.2", "sane": "^4.0.3", "walker": "^1.0.7" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "optional": true - } } }, "jest-jasmine2": { @@ -5308,7 +16580,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "dev": true, + "requires": {} }, "jest-regex-util": { "version": "26.0.0", @@ -5404,120 +16677,6 @@ "slash": "^3.0.0", "strip-bom": "^4.0.0", "yargs": "^15.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } } }, "jest-serializer": { @@ -5614,23 +16773,6 @@ "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "js-tokens": { @@ -5649,50 +16791,45 @@ "esprima": "^4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "abab": "^2.0.3", - "acorn": "^7.1.1", + "abab": "^2.0.5", + "acorn": "^8.2.4", "acorn-globals": "^6.0.0", "cssom": "^0.4.4", - "cssstyle": "^2.2.0", + "cssstyle": "^2.3.0", "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", + "decimal.js": "^10.2.1", "domexception": "^2.0.1", - "escodegen": "^1.14.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", + "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", "w3c-xmlserializer": "^2.0.0", "webidl-conversions": "^6.1.0", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", "xml-name-validator": "^3.0.0" }, "dependencies": { - "ws": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", - "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true } } @@ -5715,12 +16852,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -5733,12 +16864,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -5746,24 +16871,12 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "minimist": "^1.2.5" } }, "killable": { @@ -5807,9 +16920,9 @@ "dev": true }, "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, "loader-utils": { @@ -5821,33 +16934,50 @@ "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "loglevel": { @@ -5898,12 +17028,12 @@ "dev": true }, "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "requires": { - "tmpl": "1.0.x" + "tmpl": "1.0.5" } }, "map-cache": { @@ -5935,38 +17065,6 @@ "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "merge-descriptors": { @@ -5994,13 +17092,13 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "mime": { @@ -6010,18 +17108,18 @@ "dev": true }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { - "mime-db": "1.45.0" + "mime-db": "1.50.0" } }, "mimic-fn": { @@ -6073,13 +17171,10 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "ms": { "version": "2.1.2", @@ -6104,9 +17199,9 @@ "dev": true }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true, "optional": true }, @@ -6127,6 +17222,66 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "natural-compare": { @@ -6182,9 +17337,9 @@ "dev": true }, "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", "dev": true, "optional": true, "requires": { @@ -6194,31 +17349,12 @@ "shellwords": "^0.1.1", "uuid": "^8.3.0", "which": "^2.0.2" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - } } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "normalize-package-data": { @@ -6257,12 +17393,12 @@ } }, "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "boolbase": "^1.0.0" } }, "nwsapi": { @@ -6271,12 +17407,6 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6294,15 +17424,6 @@ "kind-of": "^3.0.3" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6315,18 +17436,18 @@ } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -6358,14 +17479,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.1" } }, "object.pick": { @@ -6423,6 +17544,14 @@ "dev": true, "requires": { "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } } }, "optionator": { @@ -6461,21 +17590,21 @@ "dev": true }, "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" } }, "p-map": { @@ -6519,9 +17648,9 @@ } }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "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", @@ -6531,9 +17660,9 @@ } }, "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "parseurl": { @@ -6589,9 +17718,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -6606,16 +17735,16 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -6649,12 +17778,12 @@ } }, "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^5.0.0" + "find-up": "^4.0.0" } }, "portfinder": { @@ -6676,6 +17805,15 @@ "requires": { "ms": "^2.1.1" } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } } } }, @@ -6711,32 +17849,6 @@ "ansi-regex": "^5.0.0", "ansi-styles": "^4.0.0", "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "process-nextick-args": { @@ -6752,9 +17864,9 @@ "dev": true }, "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { "kleur": "^3.0.3", @@ -6762,12 +17874,12 @@ } }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -6817,6 +17929,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6853,9 +17971,9 @@ } }, "react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "read-pkg": { @@ -6889,54 +18007,27 @@ "type-fest": "^0.8.1" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -6966,40 +18057,66 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-plain-object": "^2.0.4" } }, "is-number": { @@ -7041,36 +18158,18 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "to-regex-range": { @@ -7086,19 +18185,14 @@ } }, "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { "resolve": "^1.9.0" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -7107,43 +18201,43 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" }, "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "is-plain-object": "^2.0.4" } } } }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "relateurl": { @@ -7159,16 +18253,16 @@ "dev": true }, "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dev": true, "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -7189,9 +18283,9 @@ } }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -7200,84 +18294,6 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7303,12 +18319,12 @@ "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "is-core-module": "^2.1.0", + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -7375,15 +18391,18 @@ "dev": true }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safe-regex": { @@ -7418,6 +18437,16 @@ "walker": "~1.0.5" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", @@ -7434,17 +18463,6 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "cross-spawn": { @@ -7460,6 +18478,16 @@ "which": "^1.2.9" } }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -7485,17 +18513,6 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "get-stream": { @@ -7507,6 +18524,44 @@ "pump": "^3.0.0" } }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -7552,6 +18607,27 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -7621,12 +18697,12 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -7638,18 +18714,18 @@ "dev": true }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "requires": { "node-forge": "^0.10.0" } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -7702,9 +18778,9 @@ } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -7794,17 +18870,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "setprototypeof": { @@ -7813,6 +18878,15 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7835,10 +18909,21 @@ "dev": true, "optional": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "sisteransi": { @@ -7862,32 +18947,6 @@ "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } } }, "snapdragon": { @@ -7915,24 +18974,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8027,12 +19068,20 @@ "faye-websocket": "^0.11.3", "uuid": "^3.4.0", "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "sockjs-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", - "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", + "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", "dev": true, "requires": { "debug": "^3.2.6", @@ -8040,7 +19089,7 @@ "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.4.7" + "url-parse": "^1.5.3" }, "dependencies": { "debug": { @@ -8054,12 +19103,6 @@ } } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8080,9 +19123,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -8090,9 +19133,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "spdx-correct": { @@ -8122,9 +19165,9 @@ } }, "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "spdy": { @@ -8152,6 +19195,19 @@ "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "split-string": { @@ -8161,6 +19217,27 @@ "dev": true, "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "sprintf-js": { @@ -8169,27 +19246,10 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -8203,16 +19263,6 @@ } } }, - "standardized-audio-context": { - "version": "25.1.6", - "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.1.6.tgz", - "integrity": "sha512-iHvPiwbDctxpmP9sufnADBeiBpYc8km6i53TFGVGkc5usBmAJ8YNhATXXrSFZYR4MGxIImZGWCCH4LrPatPFrQ==", - "requires": { - "@babel/runtime": "^7.12.5", - "automation-events": "^3.0.2", - "tslib": "^2.0.3" - } - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -8221,17 +19271,6 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "statuses": { @@ -8240,16 +19279,19 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stealthy-require": { + "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } }, "string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { "char-regex": "^1.0.2", @@ -8257,52 +19299,43 @@ } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -8330,39 +19363,22 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "symbol-tree": { @@ -8372,21 +19388,23 @@ "dev": true }, "table": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.6.tgz", - "integrity": "sha512-OInCtPmDNieVBkVFi6C8RwU2S2H0h8mF3e3TQK4nreaUNCpooQUkI+A/KuEkm5FawfhWIfNqG+qfelVVR+V00g==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", "dev": true, "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.0.3.tgz", - "integrity": "sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -8439,17 +19457,17 @@ } }, "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", "dev": true, "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "jest-worker": "^27.0.6", + "p-limit": "^3.1.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", - "terser": "^5.3.8" + "terser": "^5.7.2" }, "dependencies": { "commander": { @@ -8458,15 +19476,44 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "source-map": { @@ -8509,9 +19556,9 @@ "dev": true }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-fast-properties": { @@ -8550,6 +19597,66 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "to-regex-range": { @@ -8567,118 +19674,80 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, - "tone": { - "version": "14.7.58", - "resolved": "https://registry.npmjs.org/tone/-/tone-14.7.58.tgz", - "integrity": "sha512-OzXsCkmaU/tLcNBc4M4dzHAjBzUGm+29DbWmAkAcCvpzWkLqo61RTcJa8tmS63F/7JHPiAJEOpuInMXw3mCvIg==", - "requires": { - "standardized-audio-context": "^25.0.4", - "tslib": "^2.0.1" - } - }, "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } }, "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "requires": { "punycode": "^2.1.1" } }, "ts-jest": { - "version": "26.4.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.4.4.tgz", - "integrity": "sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg==", + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", "dev": true, "requires": { - "@types/jest": "26.x", "bs-logger": "0.x", "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", "jest-util": "^26.1.0", "json5": "2.x", - "lodash.memoize": "4.x", + "lodash": "4.x", "make-error": "1.x", "mkdirp": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } } }, "ts-loader": { - "version": "8.0.13", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.13.tgz", - "integrity": "sha512-1o1nO6aqouA23d2nlcMSEyPMAWRhnYUU0EQUJSc60E0TUyBNX792RHFYUN1ZM29vhMUNayrsbj2UVdZwKhXCDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", "dev": true, "requires": { - "chalk": "^2.3.0", + "chalk": "^4.1.0", "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", + "loader-utils": "^2.0.0", "micromatch": "^4.0.0", - "semver": "^6.0.0" + "semver": "^7.3.4" }, "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "loader-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.1.tgz", + "integrity": "sha512-g4miPa9uUrZz4iElkaVJgDFwKJGh8aQGM7pUL4ejXl6cu7kSb30seQOVGNMP6sW8j7DW77X68hJZ+GM7UGhXeQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true } } }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true }, "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -8692,21 +19761,6 @@ } } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -8723,9 +19777,9 @@ "dev": true }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -8748,11 +19802,23 @@ } }, "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -8765,6 +19831,12 @@ "set-value": "^2.0.1" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -8818,9 +19890,9 @@ "dev": true }, "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -8851,9 +19923,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", + "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -8895,21 +19967,22 @@ "dev": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz", - "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -8941,17 +20014,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -8971,18 +20033,18 @@ } }, "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "requires": { - "makeerror": "1.0.x" + "makeerror": "1.0.12" } }, "watchpack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz", - "integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -9005,47 +20067,54 @@ "dev": true }, "webpack": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz", - "integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==", + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.61.0.tgz", + "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/wasm-edit": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "acorn": "^8.0.4", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.3.1", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.8.3", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", + "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "pkg-dir": "^5.0.0", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.0.3", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.2.0", + "webpack-sources": "^3.2.0" }, "dependencies": { "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, "enhanced-resolve": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.4.1.tgz", - "integrity": "sha512-4GbyIMzYktTFoRSmkbgZ1LU+RXwf4AQ8Z+rSuuh1dC8plp0PPeaWvx6+G4hh4KnUJ48VoxKbNyA1QQQIUpXjYA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -9053,38 +20122,66 @@ } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true } } }, "webpack-cli": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.1.tgz", - "integrity": "sha512-/F4+9QNZM/qKzzL9/06Am8NXIkGV+/NqQ62Dx7DSqudxxpAgBqYn6V7+zp+0Y7JuWksKUbczRY3wMTd+7Uj6OA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/info": "^1.2.1", - "@webpack-cli/serve": "^1.2.1", - "colorette": "^1.2.1", - "commander": "^6.2.0", - "enquirer": "^2.3.6", + "@webpack-cli/configtest": "^1.1.0", + "@webpack-cli/info": "^1.4.0", + "@webpack-cli/serve": "^1.6.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^4.2.2" + "webpack-merge": "^5.7.3" }, "dependencies": { "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true } } @@ -9113,47 +20210,26 @@ } }, "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "minimist": "^1.2.5" } } } }, "webpack-dev-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", - "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -9197,6 +20273,64 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -9206,6 +20340,12 @@ "locate-path": "^3.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -9216,6 +20356,12 @@ "resolve-cwd": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -9226,15 +20372,6 @@ "path-exists": "^3.0.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -9291,6 +20428,34 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -9308,6 +20473,71 @@ "requires": { "has-flag": "^3.0.0" } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -9326,27 +20556,30 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { - "lodash": "^4.17.15" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "dev": true }, "websocket-driver": { "version": "0.7.4", @@ -9381,13 +20614,13 @@ "dev": true }, "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", + "lodash": "^4.7.0", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -9400,12 +20633,31 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -9413,54 +20665,14 @@ "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -9482,13 +20694,11 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -9503,9 +20713,9 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -9515,115 +20725,41 @@ "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^3.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "yargs-parser": "^18.1.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 25ee167..c4950e3 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,8 @@ ], "author": "Anindya Kundu (https://github.com/meganindya/)", "license": "AGPL-3.0", - "dependencies": { - "tone": "^14.7.58" - }, + "main": "dist/index.js", + "types": "dist", "devDependencies": { "@types/jest": "^26.0.19", "@typescript-eslint/eslint-plugin": "^4.11.1", @@ -32,9 +31,9 @@ "webpack-dev-server": "^3.11.1" }, "scripts": { - "build": "webpack", + "build": "rm -rf dist/* && tsc -p .", "lint": "eslint src/**/*.ts", "test": "jest --passWithNoTests", - "watch": "webpack --watch" + "serve": "webpack serve" } } diff --git a/tsconfig.json b/tsconfig.json index 7f38067..93506e7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["./src/"], + "include": ["./src/index.ts"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ @@ -11,8 +11,8 @@ "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ "outDir": "./dist/", /* Redirect output structure to the directory. */ diff --git a/webpack.config.js b/webpack.config.js index b48f596..539e2ef 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable no-undef */ + const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); @@ -35,7 +36,7 @@ module.exports = { module: { rules: [ { - test: /\.tsx?$/, + test: /\.ts$/, use: [ { loader: 'ts-loader', @@ -49,10 +50,10 @@ module.exports = { ] }, resolve: { - extensions: ['.tsx', '.ts', '.js'] + extensions: ['.ts', '.js'] }, output: { - filename: 'bundle.js', + filename: 'index.js', path: path.resolve(__dirname, 'dist'), pathinfo: false } From 3bae4f3394021cbc410f25a391b3b89ac63a79e2 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 3 Nov 2021 03:22:34 +0530 Subject: [PATCH 085/176] refactor: rename .prototype folder to prototype --- src/{.prototype => prototype}/broker/@types/broker.d.ts | 0 src/{.prototype => prototype}/broker/@types/syntaxHandler.d.ts | 0 src/{.prototype => prototype}/broker/broker.ts | 0 src/{.prototype => prototype}/broker/syntaxHandler.test.ts | 0 src/{.prototype => prototype}/broker/syntaxHandler.ts | 0 src/{.prototype => prototype}/syntax-core/@types/AST.d.ts | 0 src/{.prototype => prototype}/syntax-core/@types/context.d.ts | 0 .../syntax-core/@types/primitiveElements.d.ts | 0 .../syntax-core/@types/primitiveTypes.d.ts | 0 .../syntax-core/@types/structureElements.d.ts | 0 src/{.prototype => prototype}/syntax-core/@types/symbolTable.d.ts | 0 src/{.prototype => prototype}/syntax-core/AST.ts | 0 src/{.prototype => prototype}/syntax-core/context.ts | 0 .../syntax-core/primitiveElements.test.ts | 0 src/{.prototype => prototype}/syntax-core/primitiveElements.ts | 0 .../syntax-core/program-elements/conditionalElements.test.ts | 0 .../syntax-core/program-elements/conditionalElements.ts | 0 .../syntax-core/program-elements/dataElements.test.ts | 0 .../syntax-core/program-elements/dataElements.ts | 0 .../syntax-core/program-elements/loopElements.test.ts | 0 .../syntax-core/program-elements/loopElements.ts | 0 .../syntax-core/program-elements/miscellaneousElements.ts | 0 .../syntax-core/program-elements/operationElements.test.ts | 0 .../syntax-core/program-elements/operationElements.ts | 0 .../syntax-core/program-elements/valueElements.test.ts | 0 .../syntax-core/program-elements/valueElements.ts | 0 src/{.prototype => prototype}/syntax-core/sample.ts | 0 .../syntax-core/structureElements.test.ts | 0 src/{.prototype => prototype}/syntax-core/structureElements.ts | 0 src/{.prototype => prototype}/syntax-core/symbolTable.ts | 0 .../syntax-core/syntaxElementFactory.test.ts | 0 src/{.prototype => prototype}/syntax-core/syntaxElementFactory.ts | 0 32 files changed, 0 insertions(+), 0 deletions(-) rename src/{.prototype => prototype}/broker/@types/broker.d.ts (100%) rename src/{.prototype => prototype}/broker/@types/syntaxHandler.d.ts (100%) rename src/{.prototype => prototype}/broker/broker.ts (100%) rename src/{.prototype => prototype}/broker/syntaxHandler.test.ts (100%) rename src/{.prototype => prototype}/broker/syntaxHandler.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/AST.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/context.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/primitiveElements.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/primitiveTypes.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/structureElements.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/@types/symbolTable.d.ts (100%) rename src/{.prototype => prototype}/syntax-core/AST.ts (100%) rename src/{.prototype => prototype}/syntax-core/context.ts (100%) rename src/{.prototype => prototype}/syntax-core/primitiveElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/primitiveElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/conditionalElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/conditionalElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/dataElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/dataElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/loopElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/loopElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/miscellaneousElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/operationElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/operationElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/valueElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/program-elements/valueElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/sample.ts (100%) rename src/{.prototype => prototype}/syntax-core/structureElements.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/structureElements.ts (100%) rename src/{.prototype => prototype}/syntax-core/symbolTable.ts (100%) rename src/{.prototype => prototype}/syntax-core/syntaxElementFactory.test.ts (100%) rename src/{.prototype => prototype}/syntax-core/syntaxElementFactory.ts (100%) diff --git a/src/.prototype/broker/@types/broker.d.ts b/src/prototype/broker/@types/broker.d.ts similarity index 100% rename from src/.prototype/broker/@types/broker.d.ts rename to src/prototype/broker/@types/broker.d.ts diff --git a/src/.prototype/broker/@types/syntaxHandler.d.ts b/src/prototype/broker/@types/syntaxHandler.d.ts similarity index 100% rename from src/.prototype/broker/@types/syntaxHandler.d.ts rename to src/prototype/broker/@types/syntaxHandler.d.ts diff --git a/src/.prototype/broker/broker.ts b/src/prototype/broker/broker.ts similarity index 100% rename from src/.prototype/broker/broker.ts rename to src/prototype/broker/broker.ts diff --git a/src/.prototype/broker/syntaxHandler.test.ts b/src/prototype/broker/syntaxHandler.test.ts similarity index 100% rename from src/.prototype/broker/syntaxHandler.test.ts rename to src/prototype/broker/syntaxHandler.test.ts diff --git a/src/.prototype/broker/syntaxHandler.ts b/src/prototype/broker/syntaxHandler.ts similarity index 100% rename from src/.prototype/broker/syntaxHandler.ts rename to src/prototype/broker/syntaxHandler.ts diff --git a/src/.prototype/syntax-core/@types/AST.d.ts b/src/prototype/syntax-core/@types/AST.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/AST.d.ts rename to src/prototype/syntax-core/@types/AST.d.ts diff --git a/src/.prototype/syntax-core/@types/context.d.ts b/src/prototype/syntax-core/@types/context.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/context.d.ts rename to src/prototype/syntax-core/@types/context.d.ts diff --git a/src/.prototype/syntax-core/@types/primitiveElements.d.ts b/src/prototype/syntax-core/@types/primitiveElements.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/primitiveElements.d.ts rename to src/prototype/syntax-core/@types/primitiveElements.d.ts diff --git a/src/.prototype/syntax-core/@types/primitiveTypes.d.ts b/src/prototype/syntax-core/@types/primitiveTypes.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/primitiveTypes.d.ts rename to src/prototype/syntax-core/@types/primitiveTypes.d.ts diff --git a/src/.prototype/syntax-core/@types/structureElements.d.ts b/src/prototype/syntax-core/@types/structureElements.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/structureElements.d.ts rename to src/prototype/syntax-core/@types/structureElements.d.ts diff --git a/src/.prototype/syntax-core/@types/symbolTable.d.ts b/src/prototype/syntax-core/@types/symbolTable.d.ts similarity index 100% rename from src/.prototype/syntax-core/@types/symbolTable.d.ts rename to src/prototype/syntax-core/@types/symbolTable.d.ts diff --git a/src/.prototype/syntax-core/AST.ts b/src/prototype/syntax-core/AST.ts similarity index 100% rename from src/.prototype/syntax-core/AST.ts rename to src/prototype/syntax-core/AST.ts diff --git a/src/.prototype/syntax-core/context.ts b/src/prototype/syntax-core/context.ts similarity index 100% rename from src/.prototype/syntax-core/context.ts rename to src/prototype/syntax-core/context.ts diff --git a/src/.prototype/syntax-core/primitiveElements.test.ts b/src/prototype/syntax-core/primitiveElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/primitiveElements.test.ts rename to src/prototype/syntax-core/primitiveElements.test.ts diff --git a/src/.prototype/syntax-core/primitiveElements.ts b/src/prototype/syntax-core/primitiveElements.ts similarity index 100% rename from src/.prototype/syntax-core/primitiveElements.ts rename to src/prototype/syntax-core/primitiveElements.ts diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/prototype/syntax-core/program-elements/conditionalElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/conditionalElements.test.ts rename to src/prototype/syntax-core/program-elements/conditionalElements.test.ts diff --git a/src/.prototype/syntax-core/program-elements/conditionalElements.ts b/src/prototype/syntax-core/program-elements/conditionalElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/conditionalElements.ts rename to src/prototype/syntax-core/program-elements/conditionalElements.ts diff --git a/src/.prototype/syntax-core/program-elements/dataElements.test.ts b/src/prototype/syntax-core/program-elements/dataElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/dataElements.test.ts rename to src/prototype/syntax-core/program-elements/dataElements.test.ts diff --git a/src/.prototype/syntax-core/program-elements/dataElements.ts b/src/prototype/syntax-core/program-elements/dataElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/dataElements.ts rename to src/prototype/syntax-core/program-elements/dataElements.ts diff --git a/src/.prototype/syntax-core/program-elements/loopElements.test.ts b/src/prototype/syntax-core/program-elements/loopElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/loopElements.test.ts rename to src/prototype/syntax-core/program-elements/loopElements.test.ts diff --git a/src/.prototype/syntax-core/program-elements/loopElements.ts b/src/prototype/syntax-core/program-elements/loopElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/loopElements.ts rename to src/prototype/syntax-core/program-elements/loopElements.ts diff --git a/src/.prototype/syntax-core/program-elements/miscellaneousElements.ts b/src/prototype/syntax-core/program-elements/miscellaneousElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/miscellaneousElements.ts rename to src/prototype/syntax-core/program-elements/miscellaneousElements.ts diff --git a/src/.prototype/syntax-core/program-elements/operationElements.test.ts b/src/prototype/syntax-core/program-elements/operationElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/operationElements.test.ts rename to src/prototype/syntax-core/program-elements/operationElements.test.ts diff --git a/src/.prototype/syntax-core/program-elements/operationElements.ts b/src/prototype/syntax-core/program-elements/operationElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/operationElements.ts rename to src/prototype/syntax-core/program-elements/operationElements.ts diff --git a/src/.prototype/syntax-core/program-elements/valueElements.test.ts b/src/prototype/syntax-core/program-elements/valueElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/valueElements.test.ts rename to src/prototype/syntax-core/program-elements/valueElements.test.ts diff --git a/src/.prototype/syntax-core/program-elements/valueElements.ts b/src/prototype/syntax-core/program-elements/valueElements.ts similarity index 100% rename from src/.prototype/syntax-core/program-elements/valueElements.ts rename to src/prototype/syntax-core/program-elements/valueElements.ts diff --git a/src/.prototype/syntax-core/sample.ts b/src/prototype/syntax-core/sample.ts similarity index 100% rename from src/.prototype/syntax-core/sample.ts rename to src/prototype/syntax-core/sample.ts diff --git a/src/.prototype/syntax-core/structureElements.test.ts b/src/prototype/syntax-core/structureElements.test.ts similarity index 100% rename from src/.prototype/syntax-core/structureElements.test.ts rename to src/prototype/syntax-core/structureElements.test.ts diff --git a/src/.prototype/syntax-core/structureElements.ts b/src/prototype/syntax-core/structureElements.ts similarity index 100% rename from src/.prototype/syntax-core/structureElements.ts rename to src/prototype/syntax-core/structureElements.ts diff --git a/src/.prototype/syntax-core/symbolTable.ts b/src/prototype/syntax-core/symbolTable.ts similarity index 100% rename from src/.prototype/syntax-core/symbolTable.ts rename to src/prototype/syntax-core/symbolTable.ts diff --git a/src/.prototype/syntax-core/syntaxElementFactory.test.ts b/src/prototype/syntax-core/syntaxElementFactory.test.ts similarity index 100% rename from src/.prototype/syntax-core/syntaxElementFactory.test.ts rename to src/prototype/syntax-core/syntaxElementFactory.test.ts diff --git a/src/.prototype/syntax-core/syntaxElementFactory.ts b/src/prototype/syntax-core/syntaxElementFactory.ts similarity index 100% rename from src/.prototype/syntax-core/syntaxElementFactory.ts rename to src/prototype/syntax-core/syntaxElementFactory.ts From 5fee04d744dd5a906f0cf8e8bfa74fc79869de64 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 01:50:10 +0530 Subject: [PATCH 086/176] chore: remove webpack --- package-lock.json | 17138 ++++++++++++-------------------------------- package.json | 11 +- webpack.config.js | 60 - 3 files changed, 4486 insertions(+), 12723 deletions(-) delete mode 100644 webpack.config.js diff --git a/package-lock.json b/package-lock.json index d41cefd..d81fc41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,17 +11,11 @@ "@types/jest": "^26.0.19", "@typescript-eslint/eslint-plugin": "^4.11.1", "@typescript-eslint/parser": "^4.11.1", - "clean-webpack-plugin": "^3.0.0", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", - "html-webpack-plugin": "^4.5.0", "jest": "^26.6.3", "ts-jest": "^26.4.4", - "ts-loader": "^8.0.13", - "typescript": "^4.1.3", - "webpack": "^5.11.1", - "webpack-cli": "^4.3.1", - "webpack-dev-server": "^3.11.1" + "typescript": "^4.1.3" } }, "node_modules/@babel/code-frame": { @@ -671,15 +665,6 @@ "node": ">=0.1.95" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -819,21 +804,6 @@ "node": ">= 10.14.2" } }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@jest/environment": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", @@ -1108,42 +1078,6 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -1153,12 +1087,6 @@ "@types/node": "*" } }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -1199,12 +1127,6 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "node_modules/@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", @@ -1223,67 +1145,12 @@ "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "node_modules/@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -1456,219 +1323,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, "node_modules/abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -1737,24 +1397,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -1791,18 +1433,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1876,12 +1506,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1891,15 +1515,6 @@ "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", @@ -1927,27 +1542,6 @@ "node": ">=8" } }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -2119,204 +1713,67 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" + "node": ">= 6" } }, "node_modules/bser": { @@ -2334,21 +1791,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -2369,19 +1811,6 @@ "node": ">=0.10.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2391,16 +1820,6 @@ "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -2411,9 +1830,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001274", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", - "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", + "version": "1.0.30001278", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", + "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", "dev": true, "funding": { "type": "opencollective", @@ -2457,333 +1876,120 @@ "node": ">=10" } }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "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" - } - }, - "node_modules/chokidar/node_modules/anymatch": { + "node_modules/ci-info": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "node_modules/chokidar/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "dependencies": { - "remove-trailing-separator": "^1.0.1" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "kind-of": "^3.0.2" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 4.0" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "is-buffer": "^1.1.5" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/chokidar/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "dependencies": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - }, - "engines": { - "node": ">=8.9.0" - }, - "peerDependencies": { - "webpack": "*" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", @@ -2791,20 +1997,6 @@ "wrap-ansi": "^6.2.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2852,12 +2044,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2870,102 +2056,18 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -2975,21 +2077,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -2999,12 +2086,6 @@ "node": ">=0.10.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3019,34 +2100,6 @@ "node": ">= 8" } }, - "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -3126,23 +2179,6 @@ "node": ">=0.10" } }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -3158,240 +2194,28 @@ "node": ">=0.10.0" } }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3401,12 +2225,6 @@ "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -3428,31 +2246,6 @@ "node": ">=8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3465,41 +2258,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, "node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -3521,55 +2279,10 @@ "node": ">=8" } }, - "node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, "node_modules/electron-to-chromium": { - "version": "1.3.887", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.887.tgz", - "integrity": "sha512-QQUumrEjFDKSVYVdaeBmFdyQGoaV+fCSMyWHvfx/u22bRHSTeBQYt6P4jMY+gFd4kgKB9nqk7RMtWkDB49OYPA==", + "version": "1.3.891", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", + "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", "dev": true }, "node_modules/emittery": { @@ -3590,24 +2303,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "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", @@ -3617,20 +2312,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -3643,39 +2324,6 @@ "node": ">=8.6" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3685,63 +2333,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3751,12 +2342,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4089,42 +2674,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -4190,6 +2739,110 @@ "ms": "2.0.0" } }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4213,75 +2866,14 @@ "node": ">= 10.14.2" } }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" @@ -4318,40 +2910,23 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, "engines": { "node": ">=0.10.0" } @@ -4390,12 +2965,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -4405,18 +2974,6 @@ "reusify": "^1.0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -4438,13 +2995,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4457,39 +3007,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -4516,47 +3033,12 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/flatted": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4580,15 +3062,6 @@ "node": ">= 6" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4601,15 +3074,6 @@ "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4660,20 +3124,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -4698,22 +3148,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -4755,12 +3189,6 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "node_modules/globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", @@ -4809,12 +3237,6 @@ "dev": true, "optional": true }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4827,15 +3249,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4845,33 +3258,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4935,33 +3321,12 @@ "node": ">=0.10.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -4974,220 +3339,175 @@ "node": ">=10" } }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dev": true, "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">= 6" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "engines": { + "node": ">=8.12.0" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true + "node_modules/ignore": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, "engines": { - "node": ">=4.0.0" + "node": ">=0.8.19" } }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/http-proxy-middleware/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "kind-of": "^6.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "ci-info": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/http-proxy-middleware/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "has": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-middleware/node_modules/is-data-descriptor": { + "node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", @@ -5199,7 +3519,7 @@ "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-descriptor": { + "node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", @@ -5213,7 +3533,23 @@ "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-extendable": { + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", @@ -5225,2084 +3561,2192 @@ "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/http-proxy-middleware/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "engines": { - "node": ">=8.12.0" + "node": ">=0.10.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" }, "engines": { "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=0.8.19" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 0.10" + "node": ">= 10.14.2" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">= 10.14.2" } }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 10.14.2" } }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "dependencies": { - "binary-extensions": "^1.0.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" + "engines": { + "node": ">= 10.14.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "^2.1.2" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.14.2" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.14.2" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.14.2" } }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">= 10.14.2" } }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@types/node": "*", + "graceful-fs": "^4.2.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "dependencies": { - "is-path-inside": "^2.1.0" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "dependencies": { - "path-is-inside": "^1.0.2" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" }, "engines": { - "node": ">=6" + "node": ">= 10.14.2" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.14.2" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jsdom/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">= 0.4" + "node": ">=0.4.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/is-weakref": { + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "minimist": "^1.2.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "semver": "^6.0.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" + "semver": "bin/semver.js" } }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" + "object-visit": "^1.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "braces": "^3.0.1", + "picomatch": "^2.2.3" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8.6" } }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.6" } }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "mime-db": "1.50.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.6" } }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=6" } }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10.14.2" + "node": "*" } }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 10.14.2" + "node": ">=10" } }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", "dev": true, + "optional": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" } }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "node_modules/node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "bin": { + "semver": "bin/semver" } }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=8" } }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "is-descriptor": "^0.1.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "kind-of": "^3.0.2" }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "isobject": "^3.0.0" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 10.14.2" + "node": ">=0.10.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { - "node": ">= 10.14.2" + "node": ">= 0.8.0" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "p-try": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "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, "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "@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": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { - "node": ">=6.11.5" + "node": ">=8" } }, - "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, "engines": { - "node": ">=4.0.0" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "node-modules-regexp": "^1.0.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">= 6" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "node": ">=0.10.0" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "tslib": "^2.0.3" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "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": { - "tmpl": "1.0.5" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" }, "engines": { - "node": ">=8.6" + "node": ">=0.10.0" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true, - "dependencies": { - "mime-db": "1.50.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.10" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" }, - "engines": { - "node": ">=0.10.0" - } + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/mkdirp": { + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, "bin": { - "mkdirp": "bin/cmd.js" + "rimraf": "bin.js" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, "engines": { - "node": ">=10" + "node": "6.* || >= 7.*" } }, - "node_modules/ms": { + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", "dev": true, "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" }, "bin": { - "multicast-dns": "cli.js" + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "optional": true + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", + "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", "to-regex": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.8" } }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { + "node_modules/sane/node_modules/execa": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-extendable": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "pump": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">=0.10.0" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, - "optional": true, "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/node-releases": { + "node_modules/sane/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "engines": { + "node": ">=4" } }, - "node_modules/normalize-package-data/node_modules/semver": { + "node_modules/sane/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", @@ -7311,822 +5755,744 @@ "semver": "bin/semver" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "dependencies": { - "boolbase": "^1.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "which": "bin/which" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=10" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "dependencies": { - "isobject": "^3.0.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true, - "engines": { - "node": ">= 0.8" - } + "optional": true }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "wrappy": "1" + "engines": { + "node": ">=8" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "dependencies": { - "is-wsl": "^1.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "is-descriptor": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" + "kind-of": "^3.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "ms": "2.0.0" } }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "dependencies": { - "retry": "^0.12.0" + "is-extendable": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "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==", + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "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" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, - "node_modules/path-key": { + "node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, - "engines": { - "node": ">=8.6" + "dependencies": { + "escape-string-regexp": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=10" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "dependencies": { - "pinkie": "^2.0.0" + "is-descriptor": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "dependencies": { - "node-modules-regexp": "^1.0.0" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "kind-of": "^3.0.2" }, "engines": { - "node": ">= 0.12.0" + "node": ">=0.10.0" } }, - "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==", + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "ms": "^2.1.1" + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/portfinder/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" + "node": ">=0.10.0" } }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "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": ">=10" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "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==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=8" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "engines": { - "node": ">=0.6" + "node": ">=6" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { - "node": ">=0.4.x" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", + "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=10.0.0" } }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/table/node_modules/ajv": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", + "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" }, "engines": { "node": ">=8" @@ -8135,6202 +6501,2310 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, "engines": { "node": ">=8" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "is-buffer": "^1.1.5" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/readdirp/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/readdirp/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, - "node_modules/readdirp/node_modules/fill-range": { + "node_modules/tough-cookie": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/readdirp/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/readdirp/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" + }, + "peerDependencies": { + "jest": ">=26 <27", + "typescript": ">=3.8 <5.0" } }, - "node_modules/readdirp/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "tslib": "^1.8.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/readdirp/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/readdirp/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readdirp/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "is-typedarray": "^1.0.0" } }, - "node_modules/readdirp/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.2.0" } }, - "node_modules/readdirp/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "isarray": "1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.10.0" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.10.0" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { - "node": ">=0.10" + "node": ">= 8" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "browser-process-hrtime": "^1.0.0" } }, - "node_modules/require-main-filename": { + "node_modules/w3c-xmlserializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "xml-name-validator": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" + "makeerror": "1.0.12" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10.4" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "iconv-lite": "0.4.24" } }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", "dev": true }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, "engines": { - "node": ">=0.12" + "node": ">=10" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">= 4" + "node": ">= 8" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "engines": { - "node": "6.* || >= 7.*" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "utf-8-validate": { + "optional": true } - ], - "dependencies": { - "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, "engines": { - "node": ">=4.8" + "node": ">=10" } }, - "node_modules/sane/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "@babel/compat-data": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", + "dev": true + }, + "@babel/core": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "@babel/generator": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, - "dependencies": { - "pump": "^3.0.0" + "requires": { + "@babel/types": "^7.16.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" }, - "engines": { - "node": ">=6" + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "node_modules/sane/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "@babel/helper-compilation-targets": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" + "requires": { + "@babel/compat-data": "^7.16.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/sane/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "@babel/helper-function-name": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "@babel/helper-get-function-arity": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "@babel/helper-hoist-variables": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "@babel/helper-member-expression-to-functions": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "@babel/helper-module-imports": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "@babel/helper-module-transforms": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "@babel/helper-optimise-call-expression": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "@babel/helper-replace-supers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "@babel/helper-simple-access": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, - "bin": { - "semver": "bin/semver" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "@babel/helper-split-export-declaration": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.16.0" } }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "@babel/helpers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "@babel/highlight": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { - "node-forge": "^0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "@babel/template": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, - "engines": { - "node": ">=8" + "requires": { + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + } } }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - } - }, - "node_modules/sockjs-client/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/sockjs/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", - "dev": true, - "dependencies": { - "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "jest": ">=26 <27", - "typescript": ">=3.8 <5.0" - } - }, - "node_modules/ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "*" - } - }, - "node_modules/ts-loader/node_modules/loader-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.1.tgz", - "integrity": "sha512-g4miPa9uUrZz4iElkaVJgDFwKJGh8aQGM7pUL4ejXl6cu7kSb30seQOVGNMP6sW8j7DW77X68hJZ+GM7UGhXeQ==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.61.0.tgz", - "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.0" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/webpack-cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "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.3.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.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/webpack-dev-server/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", - "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", - "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", - "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", - "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - } - } - }, - "@babel/traverse": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", - "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/eslint": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", - "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "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" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "@babel/traverse": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "requires": { - "type-fest": "^0.21.3" + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", + "debug": "^4.1.0", + "globals": "^11.1.0" }, "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "@babel/code-frame": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "@babel/types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.15.7", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "arr-flatten": { + "@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { - "lodash": "^4.17.14" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } }, - "babel-jest": { + "@jest/core": { "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", "@jest/transform": "^26.6.2", "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "exit": "^0.1.2", "graceful-fs": "^4.2.4", - "slash": "^3.0.0" + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" } }, - "babel-plugin-jest-hoist": { + "@jest/reporters": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", "dev": true, "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" } }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" } }, - "babel-preset-jest": { + "@jest/test-result": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" } }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, - "optional": true, "requires": { - "file-uri-to-path": "1.0.0" + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" } }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "type-detect": "4.0.8" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" + "@sinonjs/commons": "^1.7.0" } }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, "requires": { - "fast-json-stable-stringify": "2.x" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", "dev": true, "requires": { - "node-int64": "^0.4.0" + "@babel/types": "^7.0.0" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@babel/types": "^7.3.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "@types/node": "*" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001274", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz", - "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==", + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", "dev": true }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "requires": { - "rsvp": "^4.8.4" + "@types/istanbul-lib-coverage": "*" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/istanbul-lib-report": "*" } }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "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" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" } }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/node": { + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", "dev": true }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "@types/yargs-parser": "*" } }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "source-map": "~0.6.0" + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, - "cliui": { + "@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-globals": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "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": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "debug": "4" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", "dev": true, "requires": { - "mime-db": ">= 1.43.0 < 2" + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", "dev": true, "requires": { - "ms": "2.0.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "fill-range": "^7.0.1" } }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "browserslist": { + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", + "escalade": "^3.1.1", + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "fast-json-stable-stringify": "2.x" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "node-int64": "^0.4.0" } }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "ms": "2.1.2" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "caniuse-lite": { + "version": "1.0.30001278", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", + "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", "dev": true }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "rsvp": "^4.8.4" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "is-descriptor": "^0.1.0" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "pump": "^3.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "path-key": "^2.0.0" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "safe-buffer": "~5.1.1" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" + "cssom": "~0.3.6" }, "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "detect-newline": { @@ -14339,12 +8813,6 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -14360,31 +8828,6 @@ "path-type": "^4.0.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -14394,32 +8837,6 @@ "esutils": "^2.0.2" } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", @@ -14437,46 +8854,10 @@ } } }, - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, "electron-to-chromium": { - "version": "1.3.887", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.887.tgz", - "integrity": "sha512-QQUumrEjFDKSVYVdaeBmFdyQGoaV+fCSMyWHvfx/u22bRHSTeBQYt6P4jMY+gFd4kgKB9nqk7RMtWkDB49OYPA==", + "version": "1.3.891", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", + "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", "dev": true }, "emittery": { @@ -14491,18 +8872,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -14512,17 +8881,6 @@ "once": "^1.4.0" } }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -14532,27 +8890,6 @@ "ansi-colors": "^4.1.1" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -14562,63 +8899,12 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -14861,33 +9147,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, "exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -14938,9 +9197,90 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -14963,74 +9303,14 @@ "jest-regex-util": "^26.0.0" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" } }, "extglob": { @@ -15058,34 +9338,20 @@ "is-descriptor": "^1.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "kind-of": "^6.0.0" + "is-extendable": "^0.1.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -15120,12 +9386,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -15135,15 +9395,6 @@ "reusify": "^1.0.4" } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -15162,13 +9413,6 @@ "flat-cache": "^3.0.4" } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15178,38 +9422,6 @@ "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -15228,17 +9440,6 @@ "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "flatted": { @@ -15247,12 +9448,6 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, - "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", - "dev": true - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -15270,12 +9465,6 @@ "mime-types": "^2.1.12" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -15285,12 +9474,6 @@ "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -15328,17 +9511,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -15354,16 +9526,6 @@ "pump": "^3.0.0" } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -15393,12 +9555,6 @@ "is-glob": "^4.0.1" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, "globals": { "version": "13.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", @@ -15435,12 +9591,6 @@ "dev": true, "optional": true }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -15450,319 +9600,33 @@ "function-bind": "^1.1.1" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -15783,51 +9647,49 @@ } } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-buffer": "^1.1.5" } } } }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -15854,9 +9716,9 @@ } }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true }, "import-fresh": { @@ -15901,85 +9763,13 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "kind-of": "^6.0.0" } }, "is-arrayish": { @@ -15988,46 +9778,12 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -16047,51 +9803,23 @@ } }, "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "kind-of": "^6.0.0" } }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-docker": { @@ -16102,10 +9830,13 @@ "optional": true }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } }, "is-extglob": { "version": "2.1.1", @@ -16134,51 +9865,12 @@ "is-extglob": "^2.1.1" } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -16194,61 +9886,18 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -16840,12 +10489,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -16864,12 +10507,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -16879,12 +10516,6 @@ "minimist": "^1.2.5" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -16919,34 +10550,6 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -16962,12 +10565,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -16980,21 +10577,6 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -17051,28 +10633,6 @@ "object-visit": "^1.0.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -17085,12 +10645,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -17101,12 +10655,6 @@ "picomatch": "^2.2.3" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "mime-db": { "version": "1.50.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", @@ -17128,12 +10676,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -17157,17 +10699,6 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "mkdirp": { @@ -17182,29 +10713,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -17222,66 +10730,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "natural-compare": { @@ -17290,40 +10738,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -17392,27 +10812,12 @@ "path-key": "^3.0.0" } }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", @@ -17424,6 +10829,52 @@ "kind-of": "^3.0.3" }, "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -17435,28 +10886,6 @@ } } }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -17466,29 +10895,6 @@ "isobject": "^3.0.0" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -17498,27 +10904,6 @@ "isobject": "^3.0.1" } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -17537,23 +10922,6 @@ "mimic-fn": "^2.1.0" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - } - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -17568,15 +10936,6 @@ "word-wrap": "^1.2.3" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -17599,27 +10958,12 @@ } }, "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "retry": "^0.12.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -17628,16 +10972,6 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17665,34 +10999,12 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -17705,12 +11017,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -17723,12 +11029,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -17747,27 +11047,6 @@ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -17786,37 +11065,6 @@ "find-up": "^4.0.0" } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "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" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -17829,16 +11077,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -17851,12 +11089,6 @@ "react-is": "^17.0.1" } }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -17873,22 +11105,6 @@ "sisteransi": "^1.0.5" } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -17911,65 +11127,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -18015,184 +11178,6 @@ } } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -18201,37 +11186,6 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" } }, "regexpp": { @@ -18240,48 +11194,12 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -18309,13 +11227,7 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve": { @@ -18363,12 +11275,6 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -18376,9 +11282,9 @@ "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -18463,6 +11369,17 @@ "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "cross-spawn": { @@ -18478,16 +11395,6 @@ "which": "^1.2.9" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -18513,6 +11420,17 @@ "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "get-stream": { @@ -18524,43 +11442,11 @@ "pump": "^3.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-number": { "version": "3.0.0", @@ -18607,18 +11493,6 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } } }, "normalize-path": { @@ -18696,32 +11570,6 @@ "xmlchars": "^2.2.0" } }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -18731,129 +11579,6 @@ "lru-cache": "^6.0.0" } }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -18870,21 +11595,23 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, "shebang-command": { @@ -18909,17 +11636,6 @@ "dev": true, "optional": true }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, "signal-exit": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", @@ -18974,6 +11690,87 @@ "ms": "2.0.0" } }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -19007,98 +11804,25 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" + "kind-of": "^3.2.0" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "ms": "^2.1.1" + "is-buffer": "^1.1.5" } } } @@ -19170,46 +11894,6 @@ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -19217,27 +11901,6 @@ "dev": true, "requires": { "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "sprintf-js": { @@ -19271,21 +11934,74 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "string-length": { @@ -19309,26 +12025,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -19388,13 +12084,12 @@ "dev": true }, "table": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", - "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", + "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", "dev": true, "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", @@ -19402,9 +12097,9 @@ }, "dependencies": { "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", + "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -19421,12 +12116,6 @@ } } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -19437,95 +12126,6 @@ "supports-hyperlinks": "^2.0.0" } }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", - "dev": true, - "requires": { - "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "jest-worker": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", - "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - } - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -19549,12 +12149,6 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -19597,66 +12191,6 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "to-regex-range": { @@ -19668,12 +12202,6 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, "tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -19712,36 +12240,10 @@ "yargs-parser": "20.x" } }, - "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.1.tgz", - "integrity": "sha512-g4miPa9uUrZz4iElkaVJgDFwKJGh8aQGM7pUL4ejXl6cu7kSb30seQOVGNMP6sW8j7DW77X68hJZ+GM7UGhXeQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tsutils": { @@ -19751,14 +12253,6 @@ "dev": true, "requires": { "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } } }, "type-check": { @@ -19782,16 +12276,6 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -19807,18 +12291,6 @@ "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -19829,6 +12301,14 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, "universalify": { @@ -19837,12 +12317,6 @@ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -19883,12 +12357,6 @@ } } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -19904,66 +12372,10 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, "uuid": { @@ -20008,12 +12420,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -20041,563 +12447,12 @@ "makeerror": "1.0.12" } }, - "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, - "webpack": { - "version": "5.61.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.61.0.tgz", - "integrity": "sha512-fPdTuaYZ/GMGFm4WrPi2KRCqS1vDp773kj9S0iI5Uc//5cszsFEDgHNaX4Rj1vobUiU1dFIV3mA9k1eHeluFpw==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.0" - }, - "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "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.3.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.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", - "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -20633,31 +12488,12 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -20760,12 +12596,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true } } } diff --git a/package.json b/package.json index c4950e3..7c29a9c 100644 --- a/package.json +++ b/package.json @@ -18,22 +18,15 @@ "@types/jest": "^26.0.19", "@typescript-eslint/eslint-plugin": "^4.11.1", "@typescript-eslint/parser": "^4.11.1", - "clean-webpack-plugin": "^3.0.0", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", - "html-webpack-plugin": "^4.5.0", "jest": "^26.6.3", "ts-jest": "^26.4.4", - "ts-loader": "^8.0.13", - "typescript": "^4.1.3", - "webpack": "^5.11.1", - "webpack-cli": "^4.3.1", - "webpack-dev-server": "^3.11.1" + "typescript": "^4.1.3" }, "scripts": { "build": "rm -rf dist/* && tsc -p .", "lint": "eslint src/**/*.ts", - "test": "jest --passWithNoTests", - "serve": "webpack serve" + "test": "jest --passWithNoTests" } } diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 539e2ef..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,60 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -/* eslint-disable no-undef */ - -const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); - -module.exports = { - mode: 'development', - optimization: { - removeAvailableModules: false, - removeEmptyChunks: false, - splitChunks: false, - usedExports: true - }, - entry: './src/index.ts', - devtool: 'inline-source-map', - devServer: { - contentBase: './dist', - watchContentBase: true, - hot: true, - port: 9000 - }, - plugins: [ - new HtmlWebpackPlugin({ - cleanStaleWebpackAssets: false, - template: './src/index.html', - minify: { - removeComments: true, - collapseWhitespace: true, - removeAttributeQuotes: true - } - }), - new CleanWebpackPlugin() - ], - module: { - rules: [ - { - test: /\.ts$/, - use: [ - { - loader: 'ts-loader', - options: { - transpileOnly: true - } - } - ], - exclude: /node_modules/ - } - ] - }, - resolve: { - extensions: ['.ts', '.js'] - }, - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'dist'), - pathinfo: false - } -}; From d443f339e8fe1af7e7550243abe1c048c03f6628 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 01:53:40 +0530 Subject: [PATCH 087/176] refactor: move prototype files to src/archive --- src/{prototype => archive}/broker/@types/broker.d.ts | 0 .../broker/@types/syntaxHandler.d.ts | 0 src/{prototype => archive}/broker/broker.ts | 0 src/{prototype => archive}/broker/syntaxHandler.test.ts | 0 src/{prototype => archive}/broker/syntaxHandler.ts | 0 src/{prototype => archive}/syntax-core/@types/AST.d.ts | 0 .../syntax-core/@types/context.d.ts | 0 .../syntax-core/@types/primitiveElements.d.ts | 0 .../syntax-core/@types/primitiveTypes.d.ts | 0 .../syntax-core/@types/structureElements.d.ts | 0 .../syntax-core/@types/symbolTable.d.ts | 0 src/{prototype => archive}/syntax-core/AST.ts | 0 src/{prototype => archive}/syntax-core/context.ts | 0 .../syntax-core/primitiveElements.test.ts | 0 .../syntax-core/primitiveElements.ts | 0 .../program-elements/conditionalElements.test.ts | 0 .../syntax-core/program-elements/conditionalElements.ts | 0 .../syntax-core/program-elements/dataElements.test.ts | 0 .../syntax-core/program-elements/dataElements.ts | 0 .../syntax-core/program-elements/loopElements.test.ts | 0 .../syntax-core/program-elements/loopElements.ts | 0 .../program-elements/miscellaneousElements.ts | 0 .../program-elements/operationElements.test.ts | 0 .../syntax-core/program-elements/operationElements.ts | 0 .../syntax-core/program-elements/valueElements.test.ts | 0 .../syntax-core/program-elements/valueElements.ts | 0 src/{prototype => archive}/syntax-core/sample.ts | 0 .../syntax-core/structureElements.test.ts | 0 .../syntax-core/structureElements.ts | 0 src/{prototype => archive}/syntax-core/symbolTable.ts | 0 .../syntax-core/syntaxElementFactory.test.ts | 0 .../syntax-core/syntaxElementFactory.ts | 0 src/index.html | 9 --------- tsconfig.json | 9 ++++++--- 34 files changed, 6 insertions(+), 12 deletions(-) rename src/{prototype => archive}/broker/@types/broker.d.ts (100%) rename src/{prototype => archive}/broker/@types/syntaxHandler.d.ts (100%) rename src/{prototype => archive}/broker/broker.ts (100%) rename src/{prototype => archive}/broker/syntaxHandler.test.ts (100%) rename src/{prototype => archive}/broker/syntaxHandler.ts (100%) rename src/{prototype => archive}/syntax-core/@types/AST.d.ts (100%) rename src/{prototype => archive}/syntax-core/@types/context.d.ts (100%) rename src/{prototype => archive}/syntax-core/@types/primitiveElements.d.ts (100%) rename src/{prototype => archive}/syntax-core/@types/primitiveTypes.d.ts (100%) rename src/{prototype => archive}/syntax-core/@types/structureElements.d.ts (100%) rename src/{prototype => archive}/syntax-core/@types/symbolTable.d.ts (100%) rename src/{prototype => archive}/syntax-core/AST.ts (100%) rename src/{prototype => archive}/syntax-core/context.ts (100%) rename src/{prototype => archive}/syntax-core/primitiveElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/primitiveElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/conditionalElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/conditionalElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/dataElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/dataElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/loopElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/loopElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/miscellaneousElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/operationElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/operationElements.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/valueElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/program-elements/valueElements.ts (100%) rename src/{prototype => archive}/syntax-core/sample.ts (100%) rename src/{prototype => archive}/syntax-core/structureElements.test.ts (100%) rename src/{prototype => archive}/syntax-core/structureElements.ts (100%) rename src/{prototype => archive}/syntax-core/symbolTable.ts (100%) rename src/{prototype => archive}/syntax-core/syntaxElementFactory.test.ts (100%) rename src/{prototype => archive}/syntax-core/syntaxElementFactory.ts (100%) delete mode 100644 src/index.html diff --git a/src/prototype/broker/@types/broker.d.ts b/src/archive/broker/@types/broker.d.ts similarity index 100% rename from src/prototype/broker/@types/broker.d.ts rename to src/archive/broker/@types/broker.d.ts diff --git a/src/prototype/broker/@types/syntaxHandler.d.ts b/src/archive/broker/@types/syntaxHandler.d.ts similarity index 100% rename from src/prototype/broker/@types/syntaxHandler.d.ts rename to src/archive/broker/@types/syntaxHandler.d.ts diff --git a/src/prototype/broker/broker.ts b/src/archive/broker/broker.ts similarity index 100% rename from src/prototype/broker/broker.ts rename to src/archive/broker/broker.ts diff --git a/src/prototype/broker/syntaxHandler.test.ts b/src/archive/broker/syntaxHandler.test.ts similarity index 100% rename from src/prototype/broker/syntaxHandler.test.ts rename to src/archive/broker/syntaxHandler.test.ts diff --git a/src/prototype/broker/syntaxHandler.ts b/src/archive/broker/syntaxHandler.ts similarity index 100% rename from src/prototype/broker/syntaxHandler.ts rename to src/archive/broker/syntaxHandler.ts diff --git a/src/prototype/syntax-core/@types/AST.d.ts b/src/archive/syntax-core/@types/AST.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/AST.d.ts rename to src/archive/syntax-core/@types/AST.d.ts diff --git a/src/prototype/syntax-core/@types/context.d.ts b/src/archive/syntax-core/@types/context.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/context.d.ts rename to src/archive/syntax-core/@types/context.d.ts diff --git a/src/prototype/syntax-core/@types/primitiveElements.d.ts b/src/archive/syntax-core/@types/primitiveElements.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/primitiveElements.d.ts rename to src/archive/syntax-core/@types/primitiveElements.d.ts diff --git a/src/prototype/syntax-core/@types/primitiveTypes.d.ts b/src/archive/syntax-core/@types/primitiveTypes.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/primitiveTypes.d.ts rename to src/archive/syntax-core/@types/primitiveTypes.d.ts diff --git a/src/prototype/syntax-core/@types/structureElements.d.ts b/src/archive/syntax-core/@types/structureElements.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/structureElements.d.ts rename to src/archive/syntax-core/@types/structureElements.d.ts diff --git a/src/prototype/syntax-core/@types/symbolTable.d.ts b/src/archive/syntax-core/@types/symbolTable.d.ts similarity index 100% rename from src/prototype/syntax-core/@types/symbolTable.d.ts rename to src/archive/syntax-core/@types/symbolTable.d.ts diff --git a/src/prototype/syntax-core/AST.ts b/src/archive/syntax-core/AST.ts similarity index 100% rename from src/prototype/syntax-core/AST.ts rename to src/archive/syntax-core/AST.ts diff --git a/src/prototype/syntax-core/context.ts b/src/archive/syntax-core/context.ts similarity index 100% rename from src/prototype/syntax-core/context.ts rename to src/archive/syntax-core/context.ts diff --git a/src/prototype/syntax-core/primitiveElements.test.ts b/src/archive/syntax-core/primitiveElements.test.ts similarity index 100% rename from src/prototype/syntax-core/primitiveElements.test.ts rename to src/archive/syntax-core/primitiveElements.test.ts diff --git a/src/prototype/syntax-core/primitiveElements.ts b/src/archive/syntax-core/primitiveElements.ts similarity index 100% rename from src/prototype/syntax-core/primitiveElements.ts rename to src/archive/syntax-core/primitiveElements.ts diff --git a/src/prototype/syntax-core/program-elements/conditionalElements.test.ts b/src/archive/syntax-core/program-elements/conditionalElements.test.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/conditionalElements.test.ts rename to src/archive/syntax-core/program-elements/conditionalElements.test.ts diff --git a/src/prototype/syntax-core/program-elements/conditionalElements.ts b/src/archive/syntax-core/program-elements/conditionalElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/conditionalElements.ts rename to src/archive/syntax-core/program-elements/conditionalElements.ts diff --git a/src/prototype/syntax-core/program-elements/dataElements.test.ts b/src/archive/syntax-core/program-elements/dataElements.test.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/dataElements.test.ts rename to src/archive/syntax-core/program-elements/dataElements.test.ts diff --git a/src/prototype/syntax-core/program-elements/dataElements.ts b/src/archive/syntax-core/program-elements/dataElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/dataElements.ts rename to src/archive/syntax-core/program-elements/dataElements.ts diff --git a/src/prototype/syntax-core/program-elements/loopElements.test.ts b/src/archive/syntax-core/program-elements/loopElements.test.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/loopElements.test.ts rename to src/archive/syntax-core/program-elements/loopElements.test.ts diff --git a/src/prototype/syntax-core/program-elements/loopElements.ts b/src/archive/syntax-core/program-elements/loopElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/loopElements.ts rename to src/archive/syntax-core/program-elements/loopElements.ts diff --git a/src/prototype/syntax-core/program-elements/miscellaneousElements.ts b/src/archive/syntax-core/program-elements/miscellaneousElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/miscellaneousElements.ts rename to src/archive/syntax-core/program-elements/miscellaneousElements.ts diff --git a/src/prototype/syntax-core/program-elements/operationElements.test.ts b/src/archive/syntax-core/program-elements/operationElements.test.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/operationElements.test.ts rename to src/archive/syntax-core/program-elements/operationElements.test.ts diff --git a/src/prototype/syntax-core/program-elements/operationElements.ts b/src/archive/syntax-core/program-elements/operationElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/operationElements.ts rename to src/archive/syntax-core/program-elements/operationElements.ts diff --git a/src/prototype/syntax-core/program-elements/valueElements.test.ts b/src/archive/syntax-core/program-elements/valueElements.test.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/valueElements.test.ts rename to src/archive/syntax-core/program-elements/valueElements.test.ts diff --git a/src/prototype/syntax-core/program-elements/valueElements.ts b/src/archive/syntax-core/program-elements/valueElements.ts similarity index 100% rename from src/prototype/syntax-core/program-elements/valueElements.ts rename to src/archive/syntax-core/program-elements/valueElements.ts diff --git a/src/prototype/syntax-core/sample.ts b/src/archive/syntax-core/sample.ts similarity index 100% rename from src/prototype/syntax-core/sample.ts rename to src/archive/syntax-core/sample.ts diff --git a/src/prototype/syntax-core/structureElements.test.ts b/src/archive/syntax-core/structureElements.test.ts similarity index 100% rename from src/prototype/syntax-core/structureElements.test.ts rename to src/archive/syntax-core/structureElements.test.ts diff --git a/src/prototype/syntax-core/structureElements.ts b/src/archive/syntax-core/structureElements.ts similarity index 100% rename from src/prototype/syntax-core/structureElements.ts rename to src/archive/syntax-core/structureElements.ts diff --git a/src/prototype/syntax-core/symbolTable.ts b/src/archive/syntax-core/symbolTable.ts similarity index 100% rename from src/prototype/syntax-core/symbolTable.ts rename to src/archive/syntax-core/symbolTable.ts diff --git a/src/prototype/syntax-core/syntaxElementFactory.test.ts b/src/archive/syntax-core/syntaxElementFactory.test.ts similarity index 100% rename from src/prototype/syntax-core/syntaxElementFactory.test.ts rename to src/archive/syntax-core/syntaxElementFactory.test.ts diff --git a/src/prototype/syntax-core/syntaxElementFactory.ts b/src/archive/syntax-core/syntaxElementFactory.ts similarity index 100% rename from src/prototype/syntax-core/syntaxElementFactory.ts rename to src/archive/syntax-core/syntaxElementFactory.ts diff --git a/src/index.html b/src/index.html deleted file mode 100644 index e7e11ba..0000000 --- a/src/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - musicblocks.js - - - diff --git a/tsconfig.json b/tsconfig.json index 93506e7..cfbbd3f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { - "include": ["./src/index.ts"], + "include": ["./src/**/*"], + "exclude": ["./src/archive/*"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ @@ -44,8 +45,10 @@ /* Module Resolution Options */ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ + "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "@/*": ["./*"] + }, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ From f893f9f87901254547ca169f9791e2e33c8ba613 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 15:39:09 +0530 Subject: [PATCH 088/176] docs: Add non-docker approach in README --- README.md | 60 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index cd78876..7562fd1 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ The core of the new [Music Blocks (v4)](https://github.com/sugarlabs/musicblocks ## Tech Stack This core of Music Blocks v4 uses `TypeScript 4`. In addition, `Jest` shall be used for testing. -`Webpack` has been configured to transpile and bundle the source code, for deployment on a web -browser. ## Contributing @@ -62,11 +60,11 @@ on the web. ### Code Quality Notes -1. Sticking to _TypeScript_ conventions, use _camelCase_ for filenames, _CAPITALCASE_ for -constants, _camelCase_ for identifiers, and _PascalCase for classes_. Linting has been strictly -configured. A `super-linter` is configured to lint check the files on a pull request. In fact, the -_TypeScript_ watcher or build will throw errors/warnings if there are linting problems. This has -been done to maintain code quality. +1. Sticking to _TypeScript_ conventions, use _camelCase_ for filenames (_PascalCase_ for _class_ +files), _CAPITALCASE_ for constants, _camelCase_ for identifiers, and _PascalCase_ for _classes_. +Linting has been strictly configured. A `super-linter` is configured to lint check the files on a +pull request. In fact, the _TypeScript_ watcher or build will throw errors/warnings if there are +linting problems. This has been done to maintain code quality. 2. If a PR is addressing an issue, prefix the branch name with the issue number. For example, say a PR is addressing issue `100`, a branch name could be `100-patch-foobar`. @@ -77,6 +75,8 @@ dirty, please do an _interactive rebase_ with _squash_ and _reword_ to improve. 4. Follow [conventional commit messages specification](https://www.conventionalcommits.org/en/v1.0.0-beta.2/) to help issue tracking. More often than not, take time to add meaningful commit descriptions. +However, add specificity by mentioning the component; prefer `mycomponent: [feat] Add button` over +`feat: Add button`, `mycomponent: [fix] Use try-catch` over `fix: Use try-catch`. 5. At any point, when new components are created or existing components are modified, unit tests (passing) reflecting the changes need to be part of the PR before being reviewed. @@ -98,14 +98,48 @@ allow the competition of ideas (Sugar Labs is a meritocracy)._ ## Setup Development Environment -_This project is containerized using [**docker**](https://www.docker.com/). Therefore, it requires -**docker** to be installed on the development machine._ +### Without Docker + +This is a _**TypeScript**_ project that uses _**React**_. You'll need _[**Node.js**](https://nodejs.org/en/)_ +and _**NPM**_ installed on your development machine. You'll need _**tsc**_ (_TypeScript Compiler_) +to manually compile `.ts` files. You'll need _**ts-node**_ (_Node executable for TypeScript_) to manually +execute `.ts` scripts directly. + +Once _**NPM**_ is installed, to install the above, run + +```bash +npm i -g typescript +npm i -g ts-node +``` + +_**Note:**_ Users on _Linux_ and _Mac OS_ are required to add a `sudo` before these commands. + +Check installation using + +```bash +node -v && npm -v && tsc -v && ts-node -v +``` + +Output should look like + +```bash +v14.17.0 +6.14.13 +Version 4.3.2 +v10.0.0 +``` + +### With Docker + +This project development tools have been containerized using [**docker**](https://www.docker.com/). +Therefore, to use an execution sandbox, it requires **docker** to be installed on the development machine. 1. Setup _docker_. - - For _Linux_, [install _Docker Engine_](https://docs.docker.com/engine/install/). - - For _Windows_ or _Mac_ (_x86_64 / amd64_), - [install _Docker Desktop_](https://www.docker.com/products/docker-desktop). + - For _Linux_, [install _Docker Engine_](https://docs.docker.com/engine/install/). You'll also + need to [install _Docker Compose_](https://docs.docker.com/compose/install/). + + - For _Windows_ or _Mac_, [install _Docker Desktop_](https://www.docker.com/products/docker-desktop). 2. Open a teminal and navigate to working directory (where the source code will reside). @@ -256,7 +290,7 @@ spawned and standard input/output is connected to the terminal. npm run lint -- --fix ``` - _**Note:**_ If you're running using _Docker Desktop_ on _Windows_ or _Mac_, you might experience + _**Note:**_ If you're running using _Docker Desktop_ on _Windows_, you might experience longer execution times for these scripts. This happens due to cross-file-system communication. Duration varies across machines; duration primarily depends on hard drive read/write speed. From 52c3724ad0b068c149342ba64f6c4d757d51895d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 17:57:05 +0530 Subject: [PATCH 089/176] syntax: [feat] Create syntax element class with tests Interfaces and definition for class ElementSyntax; and unit tests --- src/@types/elementsStructure.d.ts | 18 ++++++ src/syntax/elements/ElementSyntax.spec.ts | 69 +++++++++++++++++++++++ src/syntax/elements/ElementSyntax.ts | 67 ++++++++++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 src/@types/elementsStructure.d.ts create mode 100644 src/syntax/elements/ElementSyntax.spec.ts create mode 100644 src/syntax/elements/ElementSyntax.ts diff --git a/src/@types/elementsStructure.d.ts b/src/@types/elementsStructure.d.ts new file mode 100644 index 0000000..8ec38a0 --- /dev/null +++ b/src/@types/elementsStructure.d.ts @@ -0,0 +1,18 @@ +/** Data-type of a value. */ +export type TData = 'number' | 'string' | 'boolean'; + +/** Interface for the class that implements the syntax element. */ +export interface IElementSyntax { + /** Name of the syntax element. */ + name: string; + /** Kind (`Argument`, `Instruction`) of the syntax element. */ + kind: 'Argument' | 'Instruction'; + /** Type (`Value`, `Expression`, `Statement`, `Block`) of the syntax element. */ + type: 'Value' | 'Expression' | 'Statement' | 'Block'; + /** Number of arguments the syntax element registers. */ + argCount: number; + /** Names of the arguments the syntax element registers. */ + argLabels: string[]; + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TData[] }; +} diff --git a/src/syntax/elements/ElementSyntax.spec.ts b/src/syntax/elements/ElementSyntax.spec.ts new file mode 100644 index 0000000..c19caec --- /dev/null +++ b/src/syntax/elements/ElementSyntax.spec.ts @@ -0,0 +1,69 @@ +import { TData } from '@/@types/elementsStructure'; +import { ElementSyntax } from './ElementSyntax'; + +class DummyElementSyntax extends ElementSyntax { + constructor( + name: string, + kind: 'Argument' | 'Instruction', + type: 'Value' | 'Expression' | 'Statement' | 'Block', + argMap: { [key: string]: TData[] } + ) { + super(name, kind, type, argMap); + } +} + +describe('class ElementSyntax', () => { + test('instantiate class that extends ElementSyntax with 0 arguments and validate API', () => { + let dummyElementSyntax: DummyElementSyntax; + + dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Value', {}); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Argument'); + expect(dummyElementSyntax.type).toBe('Value'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); + + dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Expression', {}); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Argument'); + expect(dummyElementSyntax.type).toBe('Expression'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); + + dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Statement', {}); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Statement'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); + + dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Block', {}); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Block'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); + }); + + test('instantiate class that extends ElementSyntax with 3 arguments and validate API', () => { + const dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Block', { + arg1: ['number'], + arg2: ['string', 'number'], + arg3: ['boolean'] + }); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Block'); + expect(dummyElementSyntax.argCount).toBe(3); + expect(dummyElementSyntax.argLabels).toEqual(['arg1', 'arg2', 'arg3']); + expect(dummyElementSyntax.argMap).toEqual({ + arg1: ['number'], + arg2: ['string', 'number'], + arg3: ['boolean'] + }); + }); +}); diff --git a/src/syntax/elements/ElementSyntax.ts b/src/syntax/elements/ElementSyntax.ts new file mode 100644 index 0000000..f43535d --- /dev/null +++ b/src/syntax/elements/ElementSyntax.ts @@ -0,0 +1,67 @@ +import { IElementSyntax, TData } from '@/@types/elementsStructure'; + +/** + * @virtual + * @class + * Defines a generic syntax element and it's properties. + * + * @classdesc + * Syntax elements define the building blocks of a Music Blocks program. Every building block + * element need to inherit this class. + */ +export abstract class ElementSyntax implements IElementSyntax { + /** Stores the name of the syntax element. */ + private _name: string; + /** Stores the kind of the syntax element. */ + private _kind: 'Argument' | 'Instruction'; + /** Stores the type of the syntax element. */ + private _type: 'Value' | 'Expression' | 'Statement' | 'Block'; + /** Stores the number of arguments the syntax element registers. */ + private _argCount: number; + /** Stores the names of the arguments the syntax element registers. */ + private _argLabels: string[]; + /** Stores an object describing the type specification of each argument. */ + private _argMap: { [key: string]: TData[] }; + + constructor( + /** Name of the syntax element. */ + name: string, + /** Kind (`Argument`, `Instruction`) of the syntax element. */ + kind: 'Argument' | 'Instruction', + /** Type (`Value`, `Expression`, `Statement`, `Block`) of the syntax element. */ + type: 'Value' | 'Expression' | 'Statement' | 'Block', + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TData[] } + ) { + this._name = name; + this._kind = kind; + this._type = type; + this._argMap = argMap; + this._argLabels = Object.keys(this._argMap); + this._argCount = this.argLabels.length; + } + + public get name(): string { + return this._name; + } + + public get kind(): 'Argument' | 'Instruction' { + return this._kind; + } + + public get type(): 'Value' | 'Expression' | 'Statement' | 'Block' { + return this._type; + } + + public get argCount(): number { + return this._argCount; + } + + public get argLabels(): string[] { + return this._argLabels; + } + + public get argMap(): { [key: string]: TData[] } { + return this._argMap; + } +} From bd0a34f4c7b7cd7aaa6b932ac572355538ad9991 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 17:59:39 +0530 Subject: [PATCH 090/176] syntax: [feat] Create argument element classes with tests Interfaces and definition for classes ElementArgument, ElementValue, ElementExpression; and unit tests --- .eslintrc.json | 1 + src/@types/elementsStructure.d.ts | 29 ++- src/syntax/elements/ElementArgument.spec.ts | 200 ++++++++++++++++++++ src/syntax/elements/ElementArgument.ts | 72 +++++++ 4 files changed, 301 insertions(+), 1 deletion(-) create mode 100644 src/syntax/elements/ElementArgument.spec.ts create mode 100644 src/syntax/elements/ElementArgument.ts diff --git a/.eslintrc.json b/.eslintrc.json index 47e167d..a819d23 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -11,6 +11,7 @@ "plugins": ["@typescript-eslint"], "rules": { "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-empty-interface": "off", "no-mixed-spaces-and-tabs": "warn", "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ diff --git a/src/@types/elementsStructure.d.ts b/src/@types/elementsStructure.d.ts index 8ec38a0..9db401b 100644 --- a/src/@types/elementsStructure.d.ts +++ b/src/@types/elementsStructure.d.ts @@ -1,5 +1,8 @@ /** Data-type of a value. */ -export type TData = 'number' | 'string' | 'boolean'; +export type TData = number | string | boolean; + +/** Data-type name of a value. */ +export type TDataName = 'number' | 'string' | 'boolean'; /** Interface for the class that implements the syntax element. */ export interface IElementSyntax { @@ -16,3 +19,27 @@ export interface IElementSyntax { /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TData[] }; } + +/** Generic interface for the class that implements the argument element. */ +export interface IElementArgument extends IElementSyntax { + /** Value returned by the argument element. */ + value: T; +} + +/** Generic interface for the class that implements the value element. */ +export interface IElementValue extends IElementArgument { + /** + * Updates the value stored in the value element. + * @param value - new value + */ + update(value: T): void; +} + +/** Generic interface for the class that implements the expression element. */ +export interface IElementExpression extends IElementArgument { + /** + * Evalutates the logic of the expression using the supplied parameters and stores the value. + * @param params - An object containing key-value pairs of each argument and it's value + */ + evaluate(params: { [key: string]: TData }): void; +} diff --git a/src/syntax/elements/ElementArgument.spec.ts b/src/syntax/elements/ElementArgument.spec.ts new file mode 100644 index 0000000..ea0689b --- /dev/null +++ b/src/syntax/elements/ElementArgument.spec.ts @@ -0,0 +1,200 @@ +import { TDataName } from '@/@types/elementsStructure'; +import { ElementExpression, ElementValue } from './ElementArgument'; + +class DummyElementValue extends ElementValue { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: T) { + super(name, 'Value', argMap, initialValue); + } +} + +class DummyElementValueOverrideNumber extends ElementValue { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: number) { + super(name, 'Value', argMap, initialValue); + } + + public get value(): number { + return this._value * 2; + } +} + +class DummyElementValueOverrideString extends ElementValue { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: string) { + super(name, 'Value', argMap, initialValue); + } + + public get value(): string { + return `foo ${this._value} bar`; + } +} + +class DummyElementValueOverrideBoolean extends ElementValue { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: boolean) { + super(name, 'Value', argMap, initialValue); + } + + public get value(): boolean { + return !this._value; + } +} + +describe('class ElementValue', () => { + describe('instantiation', () => { + test('instantiate class of type number that extends ElementValue and validate API', () => { + const dummyElementValueNumber1 = new DummyElementValue('dummy', {}, 0); + expect(dummyElementValueNumber1.value).toBe(0); + const dummyElementValueNumber2 = new DummyElementValue('dummy', {}, 5); + expect(dummyElementValueNumber2.value).toBe(5); + const dummyElementValueNumber3 = new DummyElementValue('dummy', {}, -5); + expect(dummyElementValueNumber3.value).toBe(-5); + }); + + test('instantiate class of type string that extends ElementValue and validate API', () => { + const dummyElementValueString1 = new DummyElementValue('dummy', {}, 'foo'); + expect(dummyElementValueString1.value).toBe('foo'); + const dummyElementValueString2 = new DummyElementValue('dummy', {}, ''); + expect(dummyElementValueString2.value).toBe(''); + }); + + test('instantiate class of type boolean that extends ElementValue and validate API', () => { + const dummyElementValueBoolean1 = new DummyElementValue('dummy', {}, true); + expect(dummyElementValueBoolean1.value).toBe(true); + const dummyElementValueBoolean2 = new DummyElementValue('dummy', {}, false); + expect(dummyElementValueBoolean2.value).toBe(false); + }); + }); + + describe('update', () => { + test('update value in instance of class of type number that extends ElementValue and validate', () => { + const dummyElementValueNumber = new DummyElementValue('dummy', {}, 0); + expect(dummyElementValueNumber.value).toBe(0); + dummyElementValueNumber.update(5); + expect(dummyElementValueNumber.value).toBe(5); + dummyElementValueNumber.update(-5); + expect(dummyElementValueNumber.value).toBe(-5); + }); + + test('update value in instance of class of type string that extends ElementValue and validate', () => { + const dummyElementValueString = new DummyElementValue('dummy', {}, ''); + expect(dummyElementValueString.value).toBe(''); + dummyElementValueString.update('foo'); + expect(dummyElementValueString.value).toBe('foo'); + }); + + test('update value in instance of class of type boolean that extends ElementValue and validate', () => { + const dummyElementValueBoolean = new DummyElementValue('dummy', {}, true); + expect(dummyElementValueBoolean.value).toBe(true); + dummyElementValueBoolean.update(false); + expect(dummyElementValueBoolean.value).toBe(false); + }); + }); + + describe('override', () => { + test('override value in instance of class of type number that extends ElementValue and validate', () => { + const dummyElementValueBoolean = new DummyElementValueOverrideNumber('dummy', {}, 5); + expect(dummyElementValueBoolean.value).toBe(10); + dummyElementValueBoolean.update(-5); + expect(dummyElementValueBoolean.value).toBe(-10); + }); + + test('override value in instance of class of type string that extends ElementValue and validate', () => { + const dummyElementValueBoolean = new DummyElementValueOverrideString( + 'dummy', + {}, + 'foobar' + ); + expect(dummyElementValueBoolean.value).toBe('foo foobar bar'); + dummyElementValueBoolean.update(''); + expect(dummyElementValueBoolean.value).toBe('foo bar'); + }); + + test('override value in instance of class of type boolean that extends ElementValue and validate', () => { + const dummyElementValueBoolean = new DummyElementValueOverrideBoolean( + 'dummy', + {}, + true + ); + expect(dummyElementValueBoolean.value).toBe(false); + dummyElementValueBoolean.update(false); + expect(dummyElementValueBoolean.value).toBe(true); + }); + }); +}); + +class DummyElementExpressionNumber extends ElementExpression { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: number) { + super(name, 'Expression', argMap, initialValue); + } + + evaluate(params: { foo: string; bar: number }): void { + this._value = params.foo.length * params.bar; + } +} + +class DummyElementExpressionString extends ElementExpression { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: string) { + super(name, 'Expression', argMap, initialValue); + } + + evaluate(params: { op1: string; op2: string }): void { + this._value = params.op1 + params.op2; + } +} + +class DummyElementExpressionBoolean extends ElementExpression { + constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: boolean) { + super(name, 'Expression', argMap, initialValue); + } + + evaluate(params: { op1: boolean; op2: boolean }): void { + const { op1, op2 } = params; + this._value = (op1 && !op2) || (!op1 && op2); + } +} + +class DummyElementExpressionMixed extends ElementExpression { + constructor( + name: string, + argMap: { [key: string]: TDataName[] }, + initialValue: string | number + ) { + super(name, 'Expression', argMap, initialValue); + } + + evaluate(params: { op1: string; op2: number }): void { + const { op1, op2 } = params; + this._value = op1.length > op2 ? op1 : op2; + } +} + +describe('class ElementExpression', () => { + test('evaluate and validate instance of class that inherits ElementExpression and returns number', () => { + const dummyElementExpressionNumber = new DummyElementExpressionNumber('dummy', {}, 0); + dummyElementExpressionNumber.evaluate({ foo: 'abc', bar: 5 }); + expect(dummyElementExpressionNumber.value).toBe(15); + }); + + test('evaluate and validate instance of class that inherits ElementExpression and returns string', () => { + const dummyElementExpressionString = new DummyElementExpressionString('dummy', {}, ''); + dummyElementExpressionString.evaluate({ op1: 'foo', op2: 'bar' }); + expect(dummyElementExpressionString.value).toBe('foobar'); + }); + + test('evaluate and validate instance of class that inherits ElementExpression and returns boolean', () => { + const dummyElementExpressionNumberBoolean = new DummyElementExpressionBoolean( + 'dummy', + {}, + true + ); + dummyElementExpressionNumberBoolean.evaluate({ op1: true, op2: false }); + expect(dummyElementExpressionNumberBoolean.value).toBe(true); + }); + + test('evaluate and validate instance of class that inherits ElementExpression and returns string or number', () => { + const dummyElementExpressionNumberMixed1 = new DummyElementExpressionMixed('dummy', {}, 0); + dummyElementExpressionNumberMixed1.evaluate({ op1: 'foobar', op2: 5 }); + expect(dummyElementExpressionNumberMixed1.value).toBe('foobar'); + const dummyElementExpressionNumberMixed2 = new DummyElementExpressionMixed('dummy', {}, 0); + dummyElementExpressionNumberMixed2.evaluate({ op1: 'foo', op2: 5 }); + expect(dummyElementExpressionNumberMixed2.value).toBe(5); + }); +}); diff --git a/src/syntax/elements/ElementArgument.ts b/src/syntax/elements/ElementArgument.ts new file mode 100644 index 0000000..5d96123 --- /dev/null +++ b/src/syntax/elements/ElementArgument.ts @@ -0,0 +1,72 @@ +import { + IElementArgument, + IElementExpression, + IElementValue, + TData, + TDataName +} from '@/@types/elementsStructure'; +import { ElementSyntax } from './ElementSyntax'; + +/** + * @virtual + * @class + * Generic class that defines a generic argument element. + * + * @classdesc + * Argument elements return a value which is either stored (value element) or evaluated (expression + * element) from the parameters passed. Every value element and expression element needs to extend + * this class. + */ +export abstract class ElementArgument extends ElementSyntax implements IElementArgument { + /** Stores the value this is returned by the argument element. */ + protected _value: T; + + constructor( + /** Name of the argument element. */ + name: string, + /** Type (`Value`, `Expression`) of the argument element. */ + type: 'Value' | 'Expression', + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] }, + /** Initial return value of the argument. */ + initialValue: T + ) { + super(name, 'Argument', type, argMap); + + this._value = initialValue; + } + + public get value(): T { + return this._value; + } +} + +/** + * @virtual + * @class + * Generic class that defines a generic value element. + * + * @classdesc + * Value elements return a stored value. + */ +export abstract class ElementValue extends ElementArgument implements IElementValue { + public update(value: T): void { + this._value = value; + } +} + +/** + * @virtual + * @class + * Generic class that defines a generic expression element. + * + * @classdesc + * Expression elements evalutate a value based on the provided passed whose shape is in accordance + * with the shape of arguments it registers. + */ +export abstract class ElementExpression + extends ElementArgument + implements IElementExpression +{ + public abstract evaluate(params: { [key: string]: TData }): void; +} From 750e8f25d9da1f05a7a8487a21f46ed2d6fdfa81 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 19:53:43 +0530 Subject: [PATCH 091/176] syntax: [refactor] Add returnType field to argument elements with tests --- src/@types/elementsStructure.d.ts | 4 +- src/syntax/elements/ElementArgument.spec.ts | 197 ++++++++++++++------ src/syntax/elements/ElementArgument.ts | 35 ++++ src/syntax/elements/ElementSyntax.spec.ts | 4 +- src/syntax/elements/ElementSyntax.ts | 8 +- 5 files changed, 187 insertions(+), 61 deletions(-) diff --git a/src/@types/elementsStructure.d.ts b/src/@types/elementsStructure.d.ts index 9db401b..7f3de50 100644 --- a/src/@types/elementsStructure.d.ts +++ b/src/@types/elementsStructure.d.ts @@ -17,11 +17,13 @@ export interface IElementSyntax { /** Names of the arguments the syntax element registers. */ argLabels: string[]; /** An object describing the type specification of each argument as a `argName: type[]` pair. */ - argMap: { [key: string]: TData[] }; + argMap: { [key: string]: TDataName[] }; } /** Generic interface for the class that implements the argument element. */ export interface IElementArgument extends IElementSyntax { + /** Return types of the value returned by the argument element. */ + returnType: TDataName[]; /** Value returned by the argument element. */ value: T; } diff --git a/src/syntax/elements/ElementArgument.spec.ts b/src/syntax/elements/ElementArgument.spec.ts index ea0689b..0a93ed5 100644 --- a/src/syntax/elements/ElementArgument.spec.ts +++ b/src/syntax/elements/ElementArgument.spec.ts @@ -1,37 +1,68 @@ -import { TDataName } from '@/@types/elementsStructure'; -import { ElementExpression, ElementValue } from './ElementArgument'; +import { ElementArgument, ElementExpression, ElementValue } from './ElementArgument'; -class DummyElementValue extends ElementValue { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: T) { - super(name, 'Value', argMap, initialValue); - } -} +class DummyElementArgument extends ElementArgument {} -class DummyElementValueOverrideNumber extends ElementValue { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: number) { - super(name, 'Value', argMap, initialValue); - } +describe('class ElementArgument', () => { + test('instantiate class of type number that extends ElementArgument and validate returnType', () => { + const dummyElementArgument = new DummyElementArgument( + 'dummy', + 'Value', + {}, + ['number'], + 0 + ); + expect(dummyElementArgument.returnType).toEqual(['number']); + }); + + test('instantiate class of type string that extends ElementArgument and validate returnType', () => { + const dummyElementArgument = new DummyElementArgument( + 'dummy', + 'Value', + {}, + ['string'], + 'foo' + ); + expect(dummyElementArgument.returnType).toEqual(['string']); + }); + test('instantiate class of type boolean that extends ElementArgument and validate returnType', () => { + const dummyElementArgument = new DummyElementArgument( + 'dummy', + 'Value', + {}, + ['boolean'], + true + ); + expect(dummyElementArgument.returnType).toEqual(['boolean']); + }); + + test('instantiate class of type number or string that extends ElementArgument and validate returnType', () => { + const dummyElementArgument = new DummyElementArgument( + 'dummy', + 'Value', + {}, + ['string', 'number'], + 0 + ); + expect(dummyElementArgument.returnType).toEqual(['string', 'number']); + }); +}); + +class DummyElementValue extends ElementValue {} + +class DummyElementValueOverrideNumber extends ElementValue { public get value(): number { return this._value * 2; } } class DummyElementValueOverrideString extends ElementValue { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: string) { - super(name, 'Value', argMap, initialValue); - } - public get value(): string { return `foo ${this._value} bar`; } } class DummyElementValueOverrideBoolean extends ElementValue { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: boolean) { - super(name, 'Value', argMap, initialValue); - } - public get value(): boolean { return !this._value; } @@ -40,32 +71,72 @@ class DummyElementValueOverrideBoolean extends ElementValue { describe('class ElementValue', () => { describe('instantiation', () => { test('instantiate class of type number that extends ElementValue and validate API', () => { - const dummyElementValueNumber1 = new DummyElementValue('dummy', {}, 0); + const dummyElementValueNumber1 = new DummyElementValue( + 'dummy', + {}, + ['number'], + 0 + ); expect(dummyElementValueNumber1.value).toBe(0); - const dummyElementValueNumber2 = new DummyElementValue('dummy', {}, 5); + const dummyElementValueNumber2 = new DummyElementValue( + 'dummy', + {}, + ['number'], + 5 + ); expect(dummyElementValueNumber2.value).toBe(5); - const dummyElementValueNumber3 = new DummyElementValue('dummy', {}, -5); + const dummyElementValueNumber3 = new DummyElementValue( + 'dummy', + {}, + ['number'], + -5 + ); expect(dummyElementValueNumber3.value).toBe(-5); }); test('instantiate class of type string that extends ElementValue and validate API', () => { - const dummyElementValueString1 = new DummyElementValue('dummy', {}, 'foo'); + const dummyElementValueString1 = new DummyElementValue( + 'dummy', + {}, + ['string'], + 'foo' + ); expect(dummyElementValueString1.value).toBe('foo'); - const dummyElementValueString2 = new DummyElementValue('dummy', {}, ''); + const dummyElementValueString2 = new DummyElementValue( + 'dummy', + {}, + ['string'], + '' + ); expect(dummyElementValueString2.value).toBe(''); }); test('instantiate class of type boolean that extends ElementValue and validate API', () => { - const dummyElementValueBoolean1 = new DummyElementValue('dummy', {}, true); + const dummyElementValueBoolean1 = new DummyElementValue( + 'dummy', + {}, + ['boolean'], + true + ); expect(dummyElementValueBoolean1.value).toBe(true); - const dummyElementValueBoolean2 = new DummyElementValue('dummy', {}, false); + const dummyElementValueBoolean2 = new DummyElementValue( + 'dummy', + {}, + ['boolean'], + false + ); expect(dummyElementValueBoolean2.value).toBe(false); }); }); describe('update', () => { test('update value in instance of class of type number that extends ElementValue and validate', () => { - const dummyElementValueNumber = new DummyElementValue('dummy', {}, 0); + const dummyElementValueNumber = new DummyElementValue( + 'dummy', + {}, + ['number'], + 0 + ); expect(dummyElementValueNumber.value).toBe(0); dummyElementValueNumber.update(5); expect(dummyElementValueNumber.value).toBe(5); @@ -74,14 +145,24 @@ describe('class ElementValue', () => { }); test('update value in instance of class of type string that extends ElementValue and validate', () => { - const dummyElementValueString = new DummyElementValue('dummy', {}, ''); + const dummyElementValueString = new DummyElementValue( + 'dummy', + {}, + ['string'], + '' + ); expect(dummyElementValueString.value).toBe(''); dummyElementValueString.update('foo'); expect(dummyElementValueString.value).toBe('foo'); }); test('update value in instance of class of type boolean that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValue('dummy', {}, true); + const dummyElementValueBoolean = new DummyElementValue( + 'dummy', + {}, + ['boolean'], + true + ); expect(dummyElementValueBoolean.value).toBe(true); dummyElementValueBoolean.update(false); expect(dummyElementValueBoolean.value).toBe(false); @@ -90,7 +171,12 @@ describe('class ElementValue', () => { describe('override', () => { test('override value in instance of class of type number that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValueOverrideNumber('dummy', {}, 5); + const dummyElementValueBoolean = new DummyElementValueOverrideNumber( + 'dummy', + {}, + ['number'], + 5 + ); expect(dummyElementValueBoolean.value).toBe(10); dummyElementValueBoolean.update(-5); expect(dummyElementValueBoolean.value).toBe(-10); @@ -100,6 +186,7 @@ describe('class ElementValue', () => { const dummyElementValueBoolean = new DummyElementValueOverrideString( 'dummy', {}, + ['string'], 'foobar' ); expect(dummyElementValueBoolean.value).toBe('foo foobar bar'); @@ -111,6 +198,7 @@ describe('class ElementValue', () => { const dummyElementValueBoolean = new DummyElementValueOverrideBoolean( 'dummy', {}, + ['boolean'], true ); expect(dummyElementValueBoolean.value).toBe(false); @@ -121,30 +209,18 @@ describe('class ElementValue', () => { }); class DummyElementExpressionNumber extends ElementExpression { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: number) { - super(name, 'Expression', argMap, initialValue); - } - evaluate(params: { foo: string; bar: number }): void { this._value = params.foo.length * params.bar; } } class DummyElementExpressionString extends ElementExpression { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: string) { - super(name, 'Expression', argMap, initialValue); - } - evaluate(params: { op1: string; op2: string }): void { this._value = params.op1 + params.op2; } } class DummyElementExpressionBoolean extends ElementExpression { - constructor(name: string, argMap: { [key: string]: TDataName[] }, initialValue: boolean) { - super(name, 'Expression', argMap, initialValue); - } - evaluate(params: { op1: boolean; op2: boolean }): void { const { op1, op2 } = params; this._value = (op1 && !op2) || (!op1 && op2); @@ -152,14 +228,6 @@ class DummyElementExpressionBoolean extends ElementExpression { } class DummyElementExpressionMixed extends ElementExpression { - constructor( - name: string, - argMap: { [key: string]: TDataName[] }, - initialValue: string | number - ) { - super(name, 'Expression', argMap, initialValue); - } - evaluate(params: { op1: string; op2: number }): void { const { op1, op2 } = params; this._value = op1.length > op2 ? op1 : op2; @@ -168,13 +236,23 @@ class DummyElementExpressionMixed extends ElementExpression { describe('class ElementExpression', () => { test('evaluate and validate instance of class that inherits ElementExpression and returns number', () => { - const dummyElementExpressionNumber = new DummyElementExpressionNumber('dummy', {}, 0); + const dummyElementExpressionNumber = new DummyElementExpressionNumber( + 'dummy', + {}, + ['number'], + 0 + ); dummyElementExpressionNumber.evaluate({ foo: 'abc', bar: 5 }); expect(dummyElementExpressionNumber.value).toBe(15); }); test('evaluate and validate instance of class that inherits ElementExpression and returns string', () => { - const dummyElementExpressionString = new DummyElementExpressionString('dummy', {}, ''); + const dummyElementExpressionString = new DummyElementExpressionString( + 'dummy', + {}, + ['string'], + '' + ); dummyElementExpressionString.evaluate({ op1: 'foo', op2: 'bar' }); expect(dummyElementExpressionString.value).toBe('foobar'); }); @@ -183,6 +261,7 @@ describe('class ElementExpression', () => { const dummyElementExpressionNumberBoolean = new DummyElementExpressionBoolean( 'dummy', {}, + ['boolean'], true ); dummyElementExpressionNumberBoolean.evaluate({ op1: true, op2: false }); @@ -190,10 +269,20 @@ describe('class ElementExpression', () => { }); test('evaluate and validate instance of class that inherits ElementExpression and returns string or number', () => { - const dummyElementExpressionNumberMixed1 = new DummyElementExpressionMixed('dummy', {}, 0); + const dummyElementExpressionNumberMixed1 = new DummyElementExpressionMixed( + 'dummy', + {}, + ['string', 'number'], + 0 + ); dummyElementExpressionNumberMixed1.evaluate({ op1: 'foobar', op2: 5 }); expect(dummyElementExpressionNumberMixed1.value).toBe('foobar'); - const dummyElementExpressionNumberMixed2 = new DummyElementExpressionMixed('dummy', {}, 0); + const dummyElementExpressionNumberMixed2 = new DummyElementExpressionMixed( + 'dummy', + {}, + ['string', 'number'], + 0 + ); dummyElementExpressionNumberMixed2.evaluate({ op1: 'foo', op2: 5 }); expect(dummyElementExpressionNumberMixed2.value).toBe(5); }); diff --git a/src/syntax/elements/ElementArgument.ts b/src/syntax/elements/ElementArgument.ts index 5d96123..dd53ad3 100644 --- a/src/syntax/elements/ElementArgument.ts +++ b/src/syntax/elements/ElementArgument.ts @@ -18,6 +18,8 @@ import { ElementSyntax } from './ElementSyntax'; * this class. */ export abstract class ElementArgument extends ElementSyntax implements IElementArgument { + /** Stores the return type of the value returned by the argument element. */ + private _returnType: TDataName[]; /** Stores the value this is returned by the argument element. */ protected _value: T; @@ -28,14 +30,21 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme type: 'Value' | 'Expression', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, + /** Return types of the value returned by the argument element. */ + returnType: TDataName[], /** Initial return value of the argument. */ initialValue: T ) { super(name, 'Argument', type, argMap); + this._returnType = returnType; this._value = initialValue; } + public get returnType(): TDataName[] { + return this._returnType; + } + public get value(): T { return this._value; } @@ -50,6 +59,19 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme * Value elements return a stored value. */ export abstract class ElementValue extends ElementArgument implements IElementValue { + constructor( + /** Name of the value element. */ + name: string, + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] }, + /** Return types of the value returned by the argument element. */ + returnType: TDataName[], + /** Initial return value of the argument. */ + initialValue: T + ) { + super(name, 'Value', argMap, returnType, initialValue); + } + public update(value: T): void { this._value = value; } @@ -68,5 +90,18 @@ export abstract class ElementExpression extends ElementArgument implements IElementExpression { + constructor( + /** Name of the expression element. */ + name: string, + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] }, + /** Return types of the value returned by the argument element. */ + returnType: TDataName[], + /** Initial return value of the argument. */ + initialValue: T + ) { + super(name, 'Expression', argMap, returnType, initialValue); + } + public abstract evaluate(params: { [key: string]: TData }): void; } diff --git a/src/syntax/elements/ElementSyntax.spec.ts b/src/syntax/elements/ElementSyntax.spec.ts index c19caec..207b7af 100644 --- a/src/syntax/elements/ElementSyntax.spec.ts +++ b/src/syntax/elements/ElementSyntax.spec.ts @@ -1,4 +1,4 @@ -import { TData } from '@/@types/elementsStructure'; +import { TDataName } from '@/@types/elementsStructure'; import { ElementSyntax } from './ElementSyntax'; class DummyElementSyntax extends ElementSyntax { @@ -6,7 +6,7 @@ class DummyElementSyntax extends ElementSyntax { name: string, kind: 'Argument' | 'Instruction', type: 'Value' | 'Expression' | 'Statement' | 'Block', - argMap: { [key: string]: TData[] } + argMap: { [key: string]: TDataName[] } ) { super(name, kind, type, argMap); } diff --git a/src/syntax/elements/ElementSyntax.ts b/src/syntax/elements/ElementSyntax.ts index f43535d..1dcbf11 100644 --- a/src/syntax/elements/ElementSyntax.ts +++ b/src/syntax/elements/ElementSyntax.ts @@ -1,4 +1,4 @@ -import { IElementSyntax, TData } from '@/@types/elementsStructure'; +import { IElementSyntax, TDataName } from '@/@types/elementsStructure'; /** * @virtual @@ -21,7 +21,7 @@ export abstract class ElementSyntax implements IElementSyntax { /** Stores the names of the arguments the syntax element registers. */ private _argLabels: string[]; /** Stores an object describing the type specification of each argument. */ - private _argMap: { [key: string]: TData[] }; + private _argMap: { [key: string]: TDataName[] }; constructor( /** Name of the syntax element. */ @@ -31,7 +31,7 @@ export abstract class ElementSyntax implements IElementSyntax { /** Type (`Value`, `Expression`, `Statement`, `Block`) of the syntax element. */ type: 'Value' | 'Expression' | 'Statement' | 'Block', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ - argMap: { [key: string]: TData[] } + argMap: { [key: string]: TDataName[] } ) { this._name = name; this._kind = kind; @@ -61,7 +61,7 @@ export abstract class ElementSyntax implements IElementSyntax { return this._argLabels; } - public get argMap(): { [key: string]: TData[] } { + public get argMap(): { [key: string]: TDataName[] } { return this._argMap; } } From 59d700a2c60bfdf27c3d93620b8c714835b3eb77 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 19:54:41 +0530 Subject: [PATCH 092/176] syntax: [feat] Create instruction element classes Interfaces and definition for classes ElementInstruction, ElementStatement, ElementBlock --- src/@types/elementsStructure.d.ts | 30 +++++++-- src/syntax/elements/ElementInstruction.ts | 78 +++++++++++++++++++++++ 2 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 src/syntax/elements/ElementInstruction.ts diff --git a/src/@types/elementsStructure.d.ts b/src/@types/elementsStructure.d.ts index 7f3de50..600426c 100644 --- a/src/@types/elementsStructure.d.ts +++ b/src/@types/elementsStructure.d.ts @@ -4,7 +4,7 @@ export type TData = number | string | boolean; /** Data-type name of a value. */ export type TDataName = 'number' | 'string' | 'boolean'; -/** Interface for the class that implements the syntax element. */ +/** Interface for the class that implements a syntax element. */ export interface IElementSyntax { /** Name of the syntax element. */ name: string; @@ -20,7 +20,7 @@ export interface IElementSyntax { argMap: { [key: string]: TDataName[] }; } -/** Generic interface for the class that implements the argument element. */ +/** Generic interface for the class that implements an argument element. */ export interface IElementArgument extends IElementSyntax { /** Return types of the value returned by the argument element. */ returnType: TDataName[]; @@ -28,7 +28,7 @@ export interface IElementArgument extends IElementSyntax { value: T; } -/** Generic interface for the class that implements the value element. */ +/** Generic interface for the class that implements a value element. */ export interface IElementValue extends IElementArgument { /** * Updates the value stored in the value element. @@ -37,7 +37,7 @@ export interface IElementValue extends IElementArgument { update(value: T): void; } -/** Generic interface for the class that implements the expression element. */ +/** Generic interface for the class that implements an expression element. */ export interface IElementExpression extends IElementArgument { /** * Evalutates the logic of the expression using the supplied parameters and stores the value. @@ -45,3 +45,25 @@ export interface IElementExpression extends IElementArgument { */ evaluate(params: { [key: string]: TData }): void; } + +/** Interface for the class that implements an instruction element. */ +export interface IElementInstruction extends IElementSyntax { + /** + * Executes the instruction using the supplied parameters. + * @param params - An object containing key-value pairs of each argument and it's value + */ + onVisit(params: { [key: string]: TData }): void; +} + +/** Interface for the class that implements a statement element. */ +export interface IElementStatement extends IElementInstruction {} + +/** Interface for the class that implements a block element. */ +export interface IElementBlock extends IElementInstruction { + /** Executes before each containing instruction is executed. */ + onInnerVisit(): void; + /** Executes after each containing instruction is executed. */ + onInnerExit(): void; + /** Executes after all containing instructions are executed. */ + onExit(): void; +} diff --git a/src/syntax/elements/ElementInstruction.ts b/src/syntax/elements/ElementInstruction.ts new file mode 100644 index 0000000..2726e41 --- /dev/null +++ b/src/syntax/elements/ElementInstruction.ts @@ -0,0 +1,78 @@ +import { + IElementBlock, + IElementInstruction, + IElementStatement, + TData, + TDataName +} from '@/@types/elementsStructure'; +import { ElementSyntax } from './ElementSyntax'; + +/** + * @virtual + * @class + * Defines a generic instruction element. + * + * @classdesc + * Instruction elements execute logic and may operate on the parameters passed. Every statement element + * and block element needs to extend this class. + */ +export abstract class ElementInstruction extends ElementSyntax implements IElementInstruction { + constructor( + /** Name of the instruction element. */ + name: string, + /** Type (`Statement`, `Block`) of the instruction element. */ + type: 'Statement' | 'Block', + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] } + ) { + super(name, 'Instruction', type, argMap); + } + + public abstract onVisit(params: { [key: string]: TData }): void; +} + +/** + * @virtual + * @class + * Defines a generic statement element. + * + * @classdesc + * Statement elements execute one single logic. + */ +export abstract class ElementStatement extends ElementInstruction implements IElementStatement { + constructor( + /** Name of the statement element. */ + name: string, + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] } + ) { + super(name, 'Statement', argMap); + } +} + +/** + * @virtual + * @class + * Defines a generic block element. + * + * @classdesc + * Block elements encapsulate other instruction elements and set-up states prior to their execution. + * After the contained instruction elements have completed execution, the initial state prior to + * visiting the block element is restored. + */ +export abstract class ElementBlock extends ElementInstruction implements IElementBlock { + constructor( + /** Name of the block element. */ + name: string, + /** An object describing the type specification of each argument as a `argName: type[]` pair. */ + argMap: { [key: string]: TDataName[] } + ) { + super(name, 'Block', argMap); + } + + public abstract onInnerVisit(): void; + + public abstract onInnerExit(): void; + + public abstract onExit(): void; +} From 219381ecdda9a77374e51efa27e37a2486ad72b2 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 22:05:32 +0530 Subject: [PATCH 093/176] syntax: [refactor] Reorganise directory structure --- .../{elementsStructure.d.ts => syntax/elementsCore.d.ts} | 0 .../{ElementArgument.spec.ts => core/elementArgument.spec.ts} | 2 +- .../elements/{ElementArgument.ts => core/elementArgument.ts} | 4 ++-- .../{ElementInstruction.ts => core/elementInstruction.ts} | 4 ++-- .../{ElementSyntax.spec.ts => core/elementSyntax.spec.ts} | 4 ++-- .../elements/{ElementSyntax.ts => core/elementSyntax.ts} | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) rename src/@types/{elementsStructure.d.ts => syntax/elementsCore.d.ts} (100%) rename src/syntax/elements/{ElementArgument.spec.ts => core/elementArgument.spec.ts} (99%) rename src/syntax/elements/{ElementArgument.ts => core/elementArgument.ts} (97%) rename src/syntax/elements/{ElementInstruction.ts => core/elementInstruction.ts} (96%) rename src/syntax/elements/{ElementSyntax.spec.ts => core/elementSyntax.spec.ts} (96%) rename src/syntax/elements/{ElementSyntax.ts => core/elementSyntax.ts} (96%) diff --git a/src/@types/elementsStructure.d.ts b/src/@types/syntax/elementsCore.d.ts similarity index 100% rename from src/@types/elementsStructure.d.ts rename to src/@types/syntax/elementsCore.d.ts diff --git a/src/syntax/elements/ElementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts similarity index 99% rename from src/syntax/elements/ElementArgument.spec.ts rename to src/syntax/elements/core/elementArgument.spec.ts index 0a93ed5..1329cc8 100644 --- a/src/syntax/elements/ElementArgument.spec.ts +++ b/src/syntax/elements/core/elementArgument.spec.ts @@ -1,4 +1,4 @@ -import { ElementArgument, ElementExpression, ElementValue } from './ElementArgument'; +import { ElementArgument, ElementExpression, ElementValue } from './elementArgument'; class DummyElementArgument extends ElementArgument {} diff --git a/src/syntax/elements/ElementArgument.ts b/src/syntax/elements/core/elementArgument.ts similarity index 97% rename from src/syntax/elements/ElementArgument.ts rename to src/syntax/elements/core/elementArgument.ts index dd53ad3..e3ff4f7 100644 --- a/src/syntax/elements/ElementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -4,8 +4,8 @@ import { IElementValue, TData, TDataName -} from '@/@types/elementsStructure'; -import { ElementSyntax } from './ElementSyntax'; +} from '@/@types/syntax/elementsCore'; +import { ElementSyntax } from './elementSyntax'; /** * @virtual diff --git a/src/syntax/elements/ElementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts similarity index 96% rename from src/syntax/elements/ElementInstruction.ts rename to src/syntax/elements/core/elementInstruction.ts index 2726e41..4bd3154 100644 --- a/src/syntax/elements/ElementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -4,8 +4,8 @@ import { IElementStatement, TData, TDataName -} from '@/@types/elementsStructure'; -import { ElementSyntax } from './ElementSyntax'; +} from '@/@types/syntax/elementsCore'; +import { ElementSyntax } from './elementSyntax'; /** * @virtual diff --git a/src/syntax/elements/ElementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts similarity index 96% rename from src/syntax/elements/ElementSyntax.spec.ts rename to src/syntax/elements/core/elementSyntax.spec.ts index 207b7af..dedc5bc 100644 --- a/src/syntax/elements/ElementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -1,5 +1,5 @@ -import { TDataName } from '@/@types/elementsStructure'; -import { ElementSyntax } from './ElementSyntax'; +import { TDataName } from '@/@types/syntax/elementsCore'; +import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { constructor( diff --git a/src/syntax/elements/ElementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts similarity index 96% rename from src/syntax/elements/ElementSyntax.ts rename to src/syntax/elements/core/elementSyntax.ts index 1dcbf11..a27ddc9 100644 --- a/src/syntax/elements/ElementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -1,4 +1,4 @@ -import { IElementSyntax, TDataName } from '@/@types/elementsStructure'; +import { IElementSyntax, TDataName } from '@/@types/syntax/elementsCore'; /** * @virtual From 3b45c4c40fd8bfcd64a4930b0e5efafc8cfbca7a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 9 Nov 2021 22:12:56 +0530 Subject: [PATCH 094/176] syntax: [refactor] Move data types to separate type file --- src/@types/syntax/data.d.ts | 5 +++++ src/@types/syntax/elementsCore.d.ts | 6 +----- src/syntax/elements/core/elementArgument.ts | 9 ++------- src/syntax/elements/core/elementInstruction.ts | 5 ++--- src/syntax/elements/core/elementSyntax.spec.ts | 2 +- src/syntax/elements/core/elementSyntax.ts | 3 ++- 6 files changed, 13 insertions(+), 17 deletions(-) create mode 100644 src/@types/syntax/data.d.ts diff --git a/src/@types/syntax/data.d.ts b/src/@types/syntax/data.d.ts new file mode 100644 index 0000000..4c0ff46 --- /dev/null +++ b/src/@types/syntax/data.d.ts @@ -0,0 +1,5 @@ +/** Data-type of a value. */ +export type TData = number | string | boolean; + +/** Data-type name of a value. */ +export type TDataName = 'number' | 'string' | 'boolean'; diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index 600426c..50ab2e2 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -1,8 +1,4 @@ -/** Data-type of a value. */ -export type TData = number | string | boolean; - -/** Data-type name of a value. */ -export type TDataName = 'number' | 'string' | 'boolean'; +import { TData, TDataName } from './data'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index e3ff4f7..18063c7 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,10 +1,5 @@ -import { - IElementArgument, - IElementExpression, - IElementValue, - TData, - TDataName -} from '@/@types/syntax/elementsCore'; +import { IElementArgument, IElementExpression, IElementValue } from '@/@types/syntax/elementsCore'; +import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; /** diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index 4bd3154..a996a0d 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -1,10 +1,9 @@ import { IElementBlock, IElementInstruction, - IElementStatement, - TData, - TDataName + IElementStatement } from '@/@types/syntax/elementsCore'; +import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; /** diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index dedc5bc..0636c81 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -1,4 +1,4 @@ -import { TDataName } from '@/@types/syntax/elementsCore'; +import { TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index a27ddc9..613ad9d 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -1,4 +1,5 @@ -import { IElementSyntax, TDataName } from '@/@types/syntax/elementsCore'; +import { IElementSyntax } from '@/@types/syntax/elementsCore'; +import { TDataName } from '@/@types/syntax/data'; /** * @virtual From 5bfc4a5c1df1972eb67019bed18003f1363f24d6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 10 Nov 2021 01:10:58 +0530 Subject: [PATCH 095/176] syntax: [feat] Create symbol table with tests --- .eslintrc.json | 3 +- src/@types/syntax/symbolTable.d.ts | 160 ++++++++++ src/syntax/symbol-table/symbolTable.spec.ts | 282 +++++++++++++++++ src/syntax/symbol-table/symbolTable.ts | 323 ++++++++++++++++++++ 4 files changed, 767 insertions(+), 1 deletion(-) create mode 100644 src/@types/syntax/symbolTable.d.ts create mode 100644 src/syntax/symbol-table/symbolTable.spec.ts create mode 100644 src/syntax/symbol-table/symbolTable.ts diff --git a/.eslintrc.json b/.eslintrc.json index a819d23..184400b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -17,7 +17,8 @@ "@typescript-eslint/no-unused-vars": [ "warn", { - "varsIgnorePattern": "_" + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_" } ], "no-use-before-define": "off", diff --git a/src/@types/syntax/symbolTable.d.ts b/src/@types/syntax/symbolTable.d.ts new file mode 100644 index 0000000..dd409de --- /dev/null +++ b/src/@types/syntax/symbolTable.d.ts @@ -0,0 +1,160 @@ +import { TData, TDataName } from './data'; + +/** Object describing a variable entry. */ +export type IVariable = { + dataType: TDataName; + value: TData; +}; + +/** Object describing a set of variables. */ +export type IVariableTable = { + [variable: string]: IVariable; +}; + +/** Interface for the class that implements the symbol table. */ +export interface ISymbolTable { + /** + * Adds a global variable. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + */ + addGlobalVariable(variable: string, dataType: TDataName, value: TData): void; + /** + * Fetches a global variable. + * @param variable - name of the variable + * @returns the variable entry if present, else `null` + */ + getGlobalVariable(variable: string): IVariable | null; + /** + * Returns names of all global variables. + * @returns a list of all global variable names + */ + getGlobalVariableNames(): string[]; + /** + * Returns names of all global variables with their data types. + * @returns an object with key-value pairs of variable names and corresponding data type + */ + getGlobalVariableNamesWithTypes(): { [variable: string]: TDataName }; + /** + * Removes a global variable if present. + * @param variable - name of the variable + */ + removeGlobalVariable(variable: string): void; + /** + * Adds a variable for a program. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param program - ID of the program + */ + addProgramVariable(variable: string, dataType: TDataName, value: TData, program: string): void; + /** + * Fetches a variable for a program. + * @param variable - name of the variable + * @param program - ID of the program + * @returns the variable entry if present, else `null` + */ + getProgramVariable(variable: string, program: string): IVariable | null; + /** + * Returns names of all variables for a program. + * @param program - ID of the program + * @returns a list of all variable names for a program + */ + getProgramVariableNames(program: string): string[]; + /** + * Returns names of all variables for a program with their data types. + * @param program - ID of the program + * @returns an object with key-value pairs of variable names and corresponding data type + */ + getProgramVariableNamesWithTypes(program: string): { [variable: string]: TDataName }; + /** + * Returns names of all program variables. + * @returns an object with key-value pairs of program names and corresponding list of variable + * names + */ + getProgramVariableNamesAll(): { [program: string]: string[] }; + /** + * Returns names and types of all program variables. + * @returns an object with key-value pairs of program names and corresponding object with key-value + * pairs of variable names and data types. + */ + getProgramVariableNamesWithTypesAll(): { [program: string]: { [variable: string]: TDataName } }; + /** + * Removes a variable for a program if present. + * @param variable - name of the variable + * @param program - ID of the program + */ + removeProgramVariable(variable: string, program: string): void; + /** + * Adds a variable for a routine. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param routine - ID of the routine + */ + addRoutineVariable(variable: string, dataType: TDataName, value: TData, routine: string): void; + /** + * Fetches a variable for a routine. + * @param variable - name of the variable + * @param routine - ID of the routine + * @returns the variable entry if present, else `null` + */ + getRoutineVariable(variable: string, routine: string): IVariable | null; + /** + * Returns names of all variables for a routine. + * @param routine - ID of the routine + * @returns a list of all variable names for a routine + */ + getRoutineVariableNames(routine: string): string[]; + /** + * Returns names of all variables for a routine with their data types. + * @param routine - ID of the routine + * @returns an object with key-value pairs of variable names and corresponding data type + */ + getRoutineVariableNamesWithTypes(routine: string): { [variable: string]: TDataName }; + /** + * Returns names of all routine variables. + * @returns an object with key-value pairs of routine names and corresponding list of variable + * names + */ + getRoutineVariableNamesAll(): { [routine: string]: string[] }; + /** + * Returns names and types of all routine variables. + * @returns an object with key-value pairs of routine names and corresponding object with key-value + * pairs of variable names and data types. + */ + getRoutineVariableNamesWithTypesAll(): { [routine: string]: { [variable: string]: TDataName } }; + /** + * Removes a variable for a routine if present. + * @param variable - name of the variable + * @param routine - ID of the routine + */ + removeRoutineVariable(variable: string, routine: string): void; + /** + * Clears all global variables. + */ + flushGlobalVariables(): void; + /** + * Clears all variables for a program. + * @param program - 0 ID of the program + */ + flushProgramVariables(program: string): void; + /** + * Clears all program variables. + */ + flushProgramVariablesAll(): void; + /** + * Clears all variables for a routine. + * @param routine - ID of the routine + */ + flushRoutineVariables(routine: string): void; + /** + * Clears all routine variables. + */ + flushRoutineVariablesAll(): void; + /** + * Clears all variable tables. + */ + flushAllVariables(): void; +} diff --git a/src/syntax/symbol-table/symbolTable.spec.ts b/src/syntax/symbol-table/symbolTable.spec.ts new file mode 100644 index 0000000..5ba2616 --- /dev/null +++ b/src/syntax/symbol-table/symbolTable.spec.ts @@ -0,0 +1,282 @@ +import { SymbolTable } from './symbolTable'; + +const symbolTable = new SymbolTable(); + +describe('Symbol Table', () => { + describe('global variables', () => { + test('add a new number variable and verify entry by fetching the entry for the variable', () => { + symbolTable.addGlobalVariable('myVar1', 'number', 5); + expect(symbolTable.getGlobalVariable('myVar1')).toEqual({ + dataType: 'number', + value: 5 + }); + }); + + test('add a new string variable and verify entry by fetching the entry for the variable', () => { + symbolTable.addGlobalVariable('myVar2', 'string', 'foo'); + expect(symbolTable.getGlobalVariable('myVar2')).toEqual({ + dataType: 'string', + value: 'foo' + }); + }); + + test('add a new boolean variable and verify entry by fetching the entry for the variable', () => { + symbolTable.addGlobalVariable('myVar3', 'boolean', true); + expect(symbolTable.getGlobalVariable('myVar3')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + + test('add an existing variable and verify overwrite by fetching the entry for the variable', () => { + symbolTable.addGlobalVariable('myVar1', 'boolean', true); + expect(symbolTable.getGlobalVariable('myVar1')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + + test('fetch a non-existing variable and expect null', () => { + expect(symbolTable.getGlobalVariable('myVar')).toBe(null); + }); + + test('remove an existing variable and verify', () => { + symbolTable.addGlobalVariable('myVarx', 'number', 0); + expect(symbolTable.getGlobalVariable('myVarx')).toEqual({ + dataType: 'number', + value: 0 + }); + symbolTable.removeGlobalVariable('myVarx'); + expect(symbolTable.getGlobalVariable('myVarx')).toBe(null); + }); + }); + + describe('program variables', () => { + test('add a new variable to a new program and verify entry by fetching the entry for the variable', () => { + symbolTable.addProgramVariable('myVar1', 'number', 5, 'myProgram1'); + expect(symbolTable.getProgramVariable('myVar1', 'myProgram1')).toEqual({ + dataType: 'number', + value: 5 + }); + }); + + test('add a new variable to an existing program and verify entry by fetching the entry for the variable', () => { + symbolTable.addProgramVariable('myVar2', 'string', 'foo', 'myProgram1'); + expect(symbolTable.getProgramVariable('myVar2', 'myProgram1')).toEqual({ + dataType: 'string', + value: 'foo' + }); + }); + + test('add an existing variable to a new program and verify entry by fetching the entry for the variable', () => { + symbolTable.addProgramVariable('myVar1', 'boolean', true, 'myProgram2'); + expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + + test('add an existing variable-program pair and verify rewrite by fetching the entry for the variable', () => { + symbolTable.addProgramVariable('myVar1', 'string', 'bar', 'myProgram2'); + expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ + dataType: 'string', + value: 'bar' + }); + }); + + test('fetch a non-existing variable in an existing program and expect null', () => { + expect(symbolTable.getProgramVariable('noVar', 'myProgram1')).toBe(null); + }); + + test('fetch an existing variable in a non-existing program and expect null', () => { + expect(symbolTable.getProgramVariable('myVar1', 'myProgram')).toBe(null); + }); + + test('fetch an existing variable in an existing program but with no overlap and expect null', () => { + expect(symbolTable.getProgramVariable('myVar2', 'myProgram2')).toBe(null); + }); + }); + + describe('routine variables', () => { + test('add a new variable to a new routine and verify entry by fetching the entry for the variable', () => { + symbolTable.addRoutineVariable('myVar1', 'number', 5, 'myRoutine1'); + expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine1')).toEqual({ + dataType: 'number', + value: 5 + }); + }); + + test('add a new variable to an existing routine and verify entry by fetching the entry for the variable', () => { + symbolTable.addRoutineVariable('myVar2', 'string', 'foo', 'myRoutine1'); + expect(symbolTable.getRoutineVariable('myVar2', 'myRoutine1')).toEqual({ + dataType: 'string', + value: 'foo' + }); + }); + + test('add an existing variable to a new routine and verify entry by fetching the entry for the variable', () => { + symbolTable.addRoutineVariable('myVar1', 'boolean', true, 'myRoutine2'); + expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine2')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + + test('add an existing variable-routine pair and verify rewrite by fetching the entry for the variable', () => { + symbolTable.addRoutineVariable('myVar1', 'string', 'bar', 'myRoutine2'); + expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine2')).toEqual({ + dataType: 'string', + value: 'bar' + }); + }); + + test('fetch a non-existing variable in an existing routine and expect null', () => { + expect(symbolTable.getRoutineVariable('noVar', 'myRoutine1')).toBe(null); + }); + + test('fetch an existing variable in a non-existing routine and expect null', () => { + expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine')).toBe(null); + }); + + test('fetch an existing variable in an existing routine but with no overlap and expect null', () => { + expect(symbolTable.getRoutineVariable('myVar2', 'myRoutine2')).toBe(null); + }); + }); + + describe('variable listing', () => { + test('verify global variable names', () => { + expect(new Set(symbolTable.getGlobalVariableNames())).toEqual( + new Set(['myVar1', 'myVar2', 'myVar3']) + ); + }); + + test('verify global variable names with types', () => { + expect(new Set(Object.entries(symbolTable.getGlobalVariableNamesWithTypes()))).toEqual( + new Set([ + ['myVar1', 'boolean'], + ['myVar2', 'string'], + ['myVar3', 'boolean'] + ]) + ); + }); + + test('verify program variable names for an existing program', () => { + expect(new Set(symbolTable.getProgramVariableNames('myProgram1'))).toEqual( + new Set(['myVar1', 'myVar2']) + ); + }); + + test('verify program variable names with types for an existing program', () => { + expect( + new Set(Object.entries(symbolTable.getProgramVariableNamesWithTypes('myProgram1'))) + ).toEqual( + new Set([ + ['myVar1', 'number'], + ['myVar2', 'string'] + ]) + ); + }); + + test('fetch program variable names for a non-existing program and expect empty list', () => { + expect(new Set(symbolTable.getProgramVariableNames('myProgram'))).toEqual(new Set([])); + }); + + test('verify all program variable names', () => { + const variables = symbolTable.getProgramVariableNamesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram1', 'myProgram2'])); + expect(new Set(variables['myProgram1'])).toEqual(new Set(['myVar1', 'myVar2'])); + expect(new Set(variables['myProgram2'])).toEqual(new Set(['myVar1'])); + }); + + test('verify all program variable names with types', () => { + const variables = symbolTable.getProgramVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram1', 'myProgram2'])); + expect(new Set(Object.entries(variables['myProgram1']))).toEqual( + new Set([ + ['myVar1', 'number'], + ['myVar2', 'string'] + ]) + ); + expect(new Set(Object.entries(variables['myProgram2']))).toEqual( + new Set([['myVar1', 'string']]) + ); + }); + + test('verify routine variable names for an existing program', () => { + expect(new Set(symbolTable.getRoutineVariableNames('myRoutine1'))).toEqual( + new Set(['myVar1', 'myVar2']) + ); + }); + + test('verify routine variable names with types for an existing program', () => { + expect( + new Set(Object.entries(symbolTable.getRoutineVariableNamesWithTypes('myRoutine1'))) + ).toEqual( + new Set([ + ['myVar1', 'number'], + ['myVar2', 'string'] + ]) + ); + }); + + test('fetch routine variable names for a non-existing program and expect empty list', () => { + expect(new Set(symbolTable.getRoutineVariableNames('myRoutine'))).toEqual(new Set([])); + }); + + test('verify all routine variable names', () => { + const variables = symbolTable.getRoutineVariableNamesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myRoutine1', 'myRoutine2'])); + expect(new Set(variables['myRoutine1'])).toEqual(new Set(['myVar1', 'myVar2'])); + expect(new Set(variables['myRoutine2'])).toEqual(new Set(['myVar1'])); + }); + + test('verify all routine variable names with types', () => { + const variables = symbolTable.getRoutineVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myRoutine1', 'myRoutine2'])); + expect(new Set(Object.entries(variables['myRoutine1']))).toEqual( + new Set([ + ['myVar1', 'number'], + ['myVar2', 'string'] + ]) + ); + expect(new Set(Object.entries(variables['myRoutine2']))).toEqual( + new Set([['myVar1', 'string']]) + ); + }); + }); + + describe('flush', () => { + test('flush all global variables and verify by checking listing', () => { + symbolTable.flushGlobalVariables(); + expect(symbolTable.getGlobalVariableNames()).toEqual([]); + }); + + test('flush variables of an existing program and verify by checking listing', () => { + symbolTable.flushProgramVariables('myProgram1'); + const variables = symbolTable.getProgramVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram2'])); + expect(new Set(Object.entries(variables['myProgram2']))).toEqual( + new Set([['myVar1', 'string']]) + ); + }); + + test('flush all program variables and verify by checking listing', () => { + symbolTable.flushProgramVariablesAll(); + expect(symbolTable.getProgramVariableNamesAll()).toEqual({}); + }); + + test('flush variables of an existing routine and verify by checking listing', () => { + symbolTable.flushRoutineVariables('myRoutine1'); + const variables = symbolTable.getRoutineVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myRoutine2'])); + expect(new Set(Object.entries(variables['myRoutine2']))).toEqual( + new Set([['myVar1', 'string']]) + ); + }); + + test('flush all routine variables and verify by checking listing', () => { + symbolTable.flushRoutineVariablesAll(); + expect(symbolTable.getRoutineVariableNamesAll()).toEqual({}); + }); + }); +}); diff --git a/src/syntax/symbol-table/symbolTable.ts b/src/syntax/symbol-table/symbolTable.ts new file mode 100644 index 0000000..f82a9ff --- /dev/null +++ b/src/syntax/symbol-table/symbolTable.ts @@ -0,0 +1,323 @@ +import { TData, TDataName } from '@/@types/syntax/data'; +import { ISymbolTable, IVariable, IVariableTable } from '@/@types/syntax/symbolTable'; + +/** + * @class + * Defines the symbol table that stores the defined variables with their values and types. + */ +export class SymbolTable implements ISymbolTable { + /** Stores the global table. */ + private _globalTable: IVariableTable; + /** Stores the programs' tables. */ + private _programTable: { + [key: string]: IVariableTable; + }; + /** Stores the routines' table. */ + private _routineTable: { + [key: string]: IVariableTable; + }; + + constructor() { + this._globalTable = {}; + this._programTable = {}; + this._routineTable = {}; + } + + public addGlobalVariable(variable: string, dataType: 'number', value: number): void; + public addGlobalVariable(variable: string, dataType: 'string', value: string): void; + public addGlobalVariable(variable: string, dataType: 'boolean', value: boolean): void; + public addGlobalVariable(variable: string, dataType: TDataName, value: TData): void { + this._globalTable[variable] = { dataType, value }; + } + + public getGlobalVariable(variable: string): IVariable | null { + return variable in this._globalTable ? this._globalTable[variable] : null; + } + + public getGlobalVariableNames(): string[] { + return Object.keys(this._globalTable); + } + + public getGlobalVariableNamesWithTypes(): { [variable: string]: TDataName } { + const table: { [variable: string]: TDataName } = {}; + Object.entries(this._globalTable).forEach(([variable, { dataType }]) => { + table[variable] = dataType; + }); + return table; + } + + public removeGlobalVariable(variable: string): void { + if (variable in this._globalTable) { + delete this._globalTable[variable]; + } + } + + /** + * A helper that adds a variable for a program or routine. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ + private _addTableVariable( + variable: string, + dataType: TDataName, + value: TData, + selector: string, + tableName: 'program' | 'routine' + ): void { + const table = tableName === 'program' ? this._programTable : this._routineTable; + if (!(selector in table)) { + table[selector] = {}; + } + table[selector][variable] = { dataType, value }; + } + + /** + * A helper that fetches a variable for a program or routine. + * @param variable - name of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns the variable entry if present, else `null` + */ + private _getTableVariable( + variable: string, + selector: string, + tableName: 'program' | 'routine' + ): IVariable | null { + const table = tableName === 'program' ? this._programTable : this._routineTable; + return selector in table && variable in table[selector] ? table[selector][variable] : null; + } + + /** + * A helper that returns names of all variables for a program or routine. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns a list of all variable names for a program or routine + */ + private _getTableVariableNames(selector: string, tableName: 'program' | 'routine'): string[] { + const table = tableName === 'program' ? this._programTable : this._routineTable; + return selector in table ? Object.keys(table[selector]) : []; + } + + /** + * A helper that returns names of all variables for a program or routine with their data types. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of variable names and corresponding data type + */ + private _getTableVariableNamesWithTypes( + selector: string, + tableName: 'program' | 'routine' + ): { [variable: string]: TDataName } { + const table = tableName === 'program' ? this._programTable : this._routineTable; + if (!(selector in table)) { + return {}; + } + + const res: { [variable: string]: TDataName } = {}; + Object.entries(table[selector]).forEach(([variable, { dataType }]) => { + res[variable] = dataType; + }); + return res; + } + + /** + * A helper that returns names of all program or routine variables. + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of program or routine names and corresponding list of + * variable names + */ + private _getTableVariableNamesAll(tableName: 'program' | 'routine'): { + [key: string]: string[]; + } { + const table = tableName === 'program' ? this._programTable : this._routineTable; + const res: { [key: string]: string[] } = {}; + Object.entries(table).forEach(([key, variables]) => { + res[key] = Object.keys(variables); + }); + return res; + } + + /** + * A helper that returns names and types of all program or routine variables. + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of program or routine names and corresponding object + * with key-value pairs of variable names and data types. + */ + private _getTableVariableNamesWithTypesAll(tableName: 'program' | 'routine'): { + [key: string]: { [variable: string]: TDataName }; + } { + const table = tableName === 'program' ? this._programTable : this._routineTable; + const res: { [key: string]: { [variable: string]: TDataName } } = {}; + Object.entries(table).forEach(([key, variables]) => { + res[key] = {}; + Object.entries(variables).forEach(([variable, { dataType }]) => { + res[key][variable] = dataType; + }); + }); + return res; + } + + /** + * Removes a variable for a program or routine if present. + * @param variable - name of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ + private _removeTableVariable( + variable: string, + selector: string, + tableName: 'program' | 'routine' + ): void { + const table = tableName === 'program' ? this._programTable : this._routineTable; + if (selector in table && variable in table[selector]) { + delete table[selector][variable]; + } + } + + public addProgramVariable( + variable: string, + dataType: 'number', + value: number, + program: string + ): void; + public addProgramVariable( + variable: string, + dataType: 'string', + value: string, + program: string + ): void; + public addProgramVariable( + variable: string, + dataType: 'boolean', + value: boolean, + program: string + ): void; + public addProgramVariable( + variable: string, + dataType: TDataName, + value: TData, + program: string + ): void { + this._addTableVariable(variable, dataType, value, program, 'program'); + } + + public getProgramVariable(variable: string, program: string): IVariable | null { + return this._getTableVariable(variable, program, 'program'); + } + + public getProgramVariableNames(program: string): string[] { + return this._getTableVariableNames(program, 'program'); + } + + public getProgramVariableNamesWithTypes(program: string): { [variable: string]: TDataName } { + return this._getTableVariableNamesWithTypes(program, 'program'); + } + + public getProgramVariableNamesAll(): { [program: string]: string[] } { + return this._getTableVariableNamesAll('program'); + } + + public getProgramVariableNamesWithTypesAll(): { + [program: string]: { [variable: string]: TDataName }; + } { + return this._getTableVariableNamesWithTypesAll('program'); + } + + public removeProgramVariable(variable: string, program: string): void { + this._removeTableVariable(variable, program, 'program'); + } + + public addRoutineVariable( + variable: string, + dataType: 'number', + value: number, + routine: string + ): void; + public addRoutineVariable( + variable: string, + dataType: 'string', + value: string, + routine: string + ): void; + public addRoutineVariable( + variable: string, + dataType: 'boolean', + value: boolean, + routine: string + ): void; + public addRoutineVariable( + variable: string, + dataType: TDataName, + value: TData, + routine: string + ): void { + this._addTableVariable(variable, dataType, value, routine, 'routine'); + } + + public getRoutineVariable(variable: string, routine: string): IVariable | null { + return this._getTableVariable(variable, routine, 'routine'); + } + + public getRoutineVariableNames(routine: string): string[] { + return this._getTableVariableNames(routine, 'routine'); + } + + public getRoutineVariableNamesWithTypes(routine: string): { [variable: string]: TDataName } { + return this._getTableVariableNamesWithTypes(routine, 'routine'); + } + + public getRoutineVariableNamesAll(): { [routine: string]: string[] } { + return this._getTableVariableNamesAll('routine'); + } + + public getRoutineVariableNamesWithTypesAll(): { + [routine: string]: { [variable: string]: TDataName }; + } { + return this._getTableVariableNamesWithTypesAll('routine'); + } + + public removeRoutineVariable(variable: string, routine: string): void { + this._removeTableVariable(variable, routine, 'routine'); + } + + public flushGlobalVariables(): void { + this._globalTable = {}; + } + + /** + * A helper that clears all variables for a program or routine. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ + private _flushTableVariables(selector: string, tableName: 'program' | 'routine'): void { + const table = tableName === 'program' ? this._programTable : this._routineTable; + if (selector in table) { + delete table[selector]; + } + } + + public flushProgramVariables(program: string): void { + this._flushTableVariables(program, 'program'); + } + + public flushProgramVariablesAll(): void { + this._programTable = {}; + } + + public flushRoutineVariables(routine: string): void { + this._flushTableVariables(routine, 'routine'); + } + + public flushRoutineVariablesAll(): void { + this._routineTable = {}; + } + + public flushAllVariables(): void { + this.flushGlobalVariables(); + this.flushProgramVariablesAll(); + this.flushRoutineVariablesAll(); + } +} From 547c98bea3ddb3a2c493b853844b20fc22644cf9 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 01:14:17 +0530 Subject: [PATCH 096/176] syntax: [refactor] Rename value element to data element --- src/@types/syntax/elementsCore.d.ts | 10 +- .../elements/core/elementArgument.spec.ts | 123 +++++++++--------- src/syntax/elements/core/elementArgument.ts | 20 +-- .../elements/core/elementSyntax.spec.ts | 6 +- src/syntax/elements/core/elementSyntax.ts | 8 +- 5 files changed, 81 insertions(+), 86 deletions(-) diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index 50ab2e2..26e96b0 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -6,8 +6,8 @@ export interface IElementSyntax { name: string; /** Kind (`Argument`, `Instruction`) of the syntax element. */ kind: 'Argument' | 'Instruction'; - /** Type (`Value`, `Expression`, `Statement`, `Block`) of the syntax element. */ - type: 'Value' | 'Expression' | 'Statement' | 'Block'; + /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ + type: 'Data' | 'Expression' | 'Statement' | 'Block'; /** Number of arguments the syntax element registers. */ argCount: number; /** Names of the arguments the syntax element registers. */ @@ -24,10 +24,10 @@ export interface IElementArgument extends IElementSyntax { value: T; } -/** Generic interface for the class that implements a value element. */ -export interface IElementValue extends IElementArgument { +/** Generic interface for the class that implements a data element. */ +export interface IElementData extends IElementArgument { /** - * Updates the value stored in the value element. + * Updates the value stored in the data element. * @param value - new value */ update(value: T): void; diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts index 1329cc8..8b1a000 100644 --- a/src/syntax/elements/core/elementArgument.spec.ts +++ b/src/syntax/elements/core/elementArgument.spec.ts @@ -1,4 +1,4 @@ -import { ElementArgument, ElementExpression, ElementValue } from './elementArgument'; +import { ElementArgument, ElementExpression, ElementData } from './elementArgument'; class DummyElementArgument extends ElementArgument {} @@ -6,7 +6,7 @@ describe('class ElementArgument', () => { test('instantiate class of type number that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( 'dummy', - 'Value', + 'Data', {}, ['number'], 0 @@ -17,7 +17,7 @@ describe('class ElementArgument', () => { test('instantiate class of type string that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( 'dummy', - 'Value', + 'Data', {}, ['string'], 'foo' @@ -28,7 +28,7 @@ describe('class ElementArgument', () => { test('instantiate class of type boolean that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( 'dummy', - 'Value', + 'Data', {}, ['boolean'], true @@ -39,7 +39,7 @@ describe('class ElementArgument', () => { test('instantiate class of type number or string that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( 'dummy', - 'Value', + 'Data', {}, ['string', 'number'], 0 @@ -48,162 +48,157 @@ describe('class ElementArgument', () => { }); }); -class DummyElementValue extends ElementValue {} +class DummyElementData extends ElementData {} -class DummyElementValueOverrideNumber extends ElementValue { +class DummyElementDataOverrideNumber extends ElementData { public get value(): number { return this._value * 2; } } -class DummyElementValueOverrideString extends ElementValue { +class DummyElementDataOverrideString extends ElementData { public get value(): string { return `foo ${this._value} bar`; } } -class DummyElementValueOverrideBoolean extends ElementValue { +class DummyElementDataOverrideBoolean extends ElementData { public get value(): boolean { return !this._value; } } -describe('class ElementValue', () => { +describe('class ElementData', () => { describe('instantiation', () => { - test('instantiate class of type number that extends ElementValue and validate API', () => { - const dummyElementValueNumber1 = new DummyElementValue( + test('instantiate class of type number that extends ElementData and validate API', () => { + const dummyElementDataNumber1 = new DummyElementData( 'dummy', {}, ['number'], 0 ); - expect(dummyElementValueNumber1.value).toBe(0); - const dummyElementValueNumber2 = new DummyElementValue( + expect(dummyElementDataNumber1.value).toBe(0); + const dummyElementDataNumber2 = new DummyElementData( 'dummy', {}, ['number'], 5 ); - expect(dummyElementValueNumber2.value).toBe(5); - const dummyElementValueNumber3 = new DummyElementValue( + expect(dummyElementDataNumber2.value).toBe(5); + const dummyElementDataNumber3 = new DummyElementData( 'dummy', {}, ['number'], -5 ); - expect(dummyElementValueNumber3.value).toBe(-5); + expect(dummyElementDataNumber3.value).toBe(-5); }); - test('instantiate class of type string that extends ElementValue and validate API', () => { - const dummyElementValueString1 = new DummyElementValue( + test('instantiate class of type string that extends ElementData and validate API', () => { + const dummyElementDataString1 = new DummyElementData( 'dummy', {}, ['string'], 'foo' ); - expect(dummyElementValueString1.value).toBe('foo'); - const dummyElementValueString2 = new DummyElementValue( + expect(dummyElementDataString1.value).toBe('foo'); + const dummyElementDataString2 = new DummyElementData( 'dummy', {}, ['string'], '' ); - expect(dummyElementValueString2.value).toBe(''); + expect(dummyElementDataString2.value).toBe(''); }); - test('instantiate class of type boolean that extends ElementValue and validate API', () => { - const dummyElementValueBoolean1 = new DummyElementValue( + test('instantiate class of type boolean that extends ElementData and validate API', () => { + const dummyElementDataBoolean1 = new DummyElementData( 'dummy', {}, ['boolean'], true ); - expect(dummyElementValueBoolean1.value).toBe(true); - const dummyElementValueBoolean2 = new DummyElementValue( + expect(dummyElementDataBoolean1.value).toBe(true); + const dummyElementDataBoolean2 = new DummyElementData( 'dummy', {}, ['boolean'], false ); - expect(dummyElementValueBoolean2.value).toBe(false); + expect(dummyElementDataBoolean2.value).toBe(false); }); }); describe('update', () => { - test('update value in instance of class of type number that extends ElementValue and validate', () => { - const dummyElementValueNumber = new DummyElementValue( - 'dummy', - {}, - ['number'], - 0 - ); - expect(dummyElementValueNumber.value).toBe(0); - dummyElementValueNumber.update(5); - expect(dummyElementValueNumber.value).toBe(5); - dummyElementValueNumber.update(-5); - expect(dummyElementValueNumber.value).toBe(-5); + test('update value in instance of class of type number that extends ElementData and validate', () => { + const dummyElementDataNumber = new DummyElementData('dummy', {}, ['number'], 0); + expect(dummyElementDataNumber.value).toBe(0); + dummyElementDataNumber.update(5); + expect(dummyElementDataNumber.value).toBe(5); + dummyElementDataNumber.update(-5); + expect(dummyElementDataNumber.value).toBe(-5); }); - test('update value in instance of class of type string that extends ElementValue and validate', () => { - const dummyElementValueString = new DummyElementValue( + test('update value in instance of class of type string that extends ElementData and validate', () => { + const dummyElementDataString = new DummyElementData( 'dummy', {}, ['string'], '' ); - expect(dummyElementValueString.value).toBe(''); - dummyElementValueString.update('foo'); - expect(dummyElementValueString.value).toBe('foo'); + expect(dummyElementDataString.value).toBe(''); + dummyElementDataString.update('foo'); + expect(dummyElementDataString.value).toBe('foo'); }); - test('update value in instance of class of type boolean that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValue( + test('update value in instance of class of type boolean that extends ElementData and validate', () => { + const dummyElementDataBoolean = new DummyElementData( 'dummy', {}, ['boolean'], true ); - expect(dummyElementValueBoolean.value).toBe(true); - dummyElementValueBoolean.update(false); - expect(dummyElementValueBoolean.value).toBe(false); + expect(dummyElementDataBoolean.value).toBe(true); + dummyElementDataBoolean.update(false); + expect(dummyElementDataBoolean.value).toBe(false); }); }); describe('override', () => { - test('override value in instance of class of type number that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValueOverrideNumber( + test('override value in instance of class of type number that extends ElementData and validate', () => { + const dummyElementDataBoolean = new DummyElementDataOverrideNumber( 'dummy', {}, ['number'], 5 ); - expect(dummyElementValueBoolean.value).toBe(10); - dummyElementValueBoolean.update(-5); - expect(dummyElementValueBoolean.value).toBe(-10); + expect(dummyElementDataBoolean.value).toBe(10); + dummyElementDataBoolean.update(-5); + expect(dummyElementDataBoolean.value).toBe(-10); }); - test('override value in instance of class of type string that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValueOverrideString( + test('override value in instance of class of type string that extends ElementData and validate', () => { + const dummyElementDataBoolean = new DummyElementDataOverrideString( 'dummy', {}, ['string'], 'foobar' ); - expect(dummyElementValueBoolean.value).toBe('foo foobar bar'); - dummyElementValueBoolean.update(''); - expect(dummyElementValueBoolean.value).toBe('foo bar'); + expect(dummyElementDataBoolean.value).toBe('foo foobar bar'); + dummyElementDataBoolean.update(''); + expect(dummyElementDataBoolean.value).toBe('foo bar'); }); - test('override value in instance of class of type boolean that extends ElementValue and validate', () => { - const dummyElementValueBoolean = new DummyElementValueOverrideBoolean( + test('override value in instance of class of type boolean that extends ElementData and validate', () => { + const dummyElementDataBoolean = new DummyElementDataOverrideBoolean( 'dummy', {}, ['boolean'], true ); - expect(dummyElementValueBoolean.value).toBe(false); - dummyElementValueBoolean.update(false); - expect(dummyElementValueBoolean.value).toBe(true); + expect(dummyElementDataBoolean.value).toBe(false); + dummyElementDataBoolean.update(false); + expect(dummyElementDataBoolean.value).toBe(true); }); }); }); diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 18063c7..1aad658 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,4 +1,4 @@ -import { IElementArgument, IElementExpression, IElementValue } from '@/@types/syntax/elementsCore'; +import { IElementArgument, IElementExpression, IElementData } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; @@ -8,8 +8,8 @@ import { ElementSyntax } from './elementSyntax'; * Generic class that defines a generic argument element. * * @classdesc - * Argument elements return a value which is either stored (value element) or evaluated (expression - * element) from the parameters passed. Every value element and expression element needs to extend + * Argument elements return a value which is either stored (data element) or evaluated (expression + * element) from the parameters passed. Every data element and expression element needs to extend * this class. */ export abstract class ElementArgument extends ElementSyntax implements IElementArgument { @@ -21,8 +21,8 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme constructor( /** Name of the argument element. */ name: string, - /** Type (`Value`, `Expression`) of the argument element. */ - type: 'Value' | 'Expression', + /** Type (`Data`, `Expression`) of the argument element. */ + type: 'Data' | 'Expression', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, /** Return types of the value returned by the argument element. */ @@ -48,14 +48,14 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme /** * @virtual * @class - * Generic class that defines a generic value element. + * Generic class that defines a generic data element. * * @classdesc - * Value elements return a stored value. + * Data elements return a stored value. */ -export abstract class ElementValue extends ElementArgument implements IElementValue { +export abstract class ElementData extends ElementArgument implements IElementData { constructor( - /** Name of the value element. */ + /** Name of the data element. */ name: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, @@ -64,7 +64,7 @@ export abstract class ElementValue extends ElementArgument implements IEle /** Initial return value of the argument. */ initialValue: T ) { - super(name, 'Value', argMap, returnType, initialValue); + super(name, 'Data', argMap, returnType, initialValue); } public update(value: T): void { diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 0636c81..47567ff 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -5,7 +5,7 @@ class DummyElementSyntax extends ElementSyntax { constructor( name: string, kind: 'Argument' | 'Instruction', - type: 'Value' | 'Expression' | 'Statement' | 'Block', + type: 'Data' | 'Expression' | 'Statement' | 'Block', argMap: { [key: string]: TDataName[] } ) { super(name, kind, type, argMap); @@ -16,10 +16,10 @@ describe('class ElementSyntax', () => { test('instantiate class that extends ElementSyntax with 0 arguments and validate API', () => { let dummyElementSyntax: DummyElementSyntax; - dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Value', {}); + dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Data', {}); expect(dummyElementSyntax.name).toBe('dummy'); expect(dummyElementSyntax.kind).toBe('Argument'); - expect(dummyElementSyntax.type).toBe('Value'); + expect(dummyElementSyntax.type).toBe('Data'); expect(dummyElementSyntax.argCount).toBe(0); expect(dummyElementSyntax.argLabels).toEqual([]); expect(dummyElementSyntax.argMap).toEqual({}); diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 613ad9d..57fbbef 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -16,7 +16,7 @@ export abstract class ElementSyntax implements IElementSyntax { /** Stores the kind of the syntax element. */ private _kind: 'Argument' | 'Instruction'; /** Stores the type of the syntax element. */ - private _type: 'Value' | 'Expression' | 'Statement' | 'Block'; + private _type: 'Data' | 'Expression' | 'Statement' | 'Block'; /** Stores the number of arguments the syntax element registers. */ private _argCount: number; /** Stores the names of the arguments the syntax element registers. */ @@ -29,8 +29,8 @@ export abstract class ElementSyntax implements IElementSyntax { name: string, /** Kind (`Argument`, `Instruction`) of the syntax element. */ kind: 'Argument' | 'Instruction', - /** Type (`Value`, `Expression`, `Statement`, `Block`) of the syntax element. */ - type: 'Value' | 'Expression' | 'Statement' | 'Block', + /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ + type: 'Data' | 'Expression' | 'Statement' | 'Block', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { @@ -50,7 +50,7 @@ export abstract class ElementSyntax implements IElementSyntax { return this._kind; } - public get type(): 'Value' | 'Expression' | 'Statement' | 'Block' { + public get type(): 'Data' | 'Expression' | 'Statement' | 'Block' { return this._type; } From e2d2f90dbe7e20fe669e15168a5ba095006266fe Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 02:15:15 +0530 Subject: [PATCH 097/176] syntax: [refactor] Add symbol table instance parameter to onVisit Applicable for instruction elements --- src/@types/syntax/elementsCore.d.ts | 4 +++- src/syntax/elements/core/elementInstruction.ts | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index 26e96b0..f1ca149 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -1,4 +1,5 @@ import { TData, TDataName } from './data'; +import { ISymbolTable } from './symbolTable'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { @@ -47,8 +48,9 @@ export interface IElementInstruction extends IElementSyntax { /** * Executes the instruction using the supplied parameters. * @param params - An object containing key-value pairs of each argument and it's value + * @param symbolTable - The symbol table instance to operate on variables */ - onVisit(params: { [key: string]: TData }): void; + onVisit(params: { [key: string]: TData }, symbolTable: ISymbolTable): void; } /** Interface for the class that implements a statement element. */ diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index a996a0d..48176b0 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -5,6 +5,7 @@ import { } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; +import { ISymbolTable } from '@/@types/syntax/symbolTable'; /** * @virtual @@ -27,7 +28,7 @@ export abstract class ElementInstruction extends ElementSyntax implements IEleme super(name, 'Instruction', type, argMap); } - public abstract onVisit(params: { [key: string]: TData }): void; + public abstract onVisit(params: { [key: string]: TData }, symbolTable: ISymbolTable): void; } /** From fe187bf2a05215de9d2d641b21a787b9a5c64294 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 01:54:07 +0530 Subject: [PATCH 098/176] syntax: [feat] Create value elements with tests Definition for the classes: ElementValueBoolean, ElementValueNumber, ElementValueString; unit tests --- .../elements/program/elementValue.spec.ts | 43 ++++++++++++++++ src/syntax/elements/program/elementValue.ts | 49 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 src/syntax/elements/program/elementValue.spec.ts create mode 100644 src/syntax/elements/program/elementValue.ts diff --git a/src/syntax/elements/program/elementValue.spec.ts b/src/syntax/elements/program/elementValue.spec.ts new file mode 100644 index 0000000..b90c781 --- /dev/null +++ b/src/syntax/elements/program/elementValue.spec.ts @@ -0,0 +1,43 @@ +import { ElementValueBoolean, ElementValueNumber, ElementValueString } from './elementValue'; + +describe('class ElementValueBoolean', () => { + let elementValueBoolean: ElementValueBoolean; + + test('instantiate element and verify initial value', () => { + elementValueBoolean = new ElementValueBoolean(); + expect(elementValueBoolean.value).toBe(true); + }); + + test('update value and verify new value', () => { + elementValueBoolean.update(false); + expect(elementValueBoolean.value).toBe(false); + }); +}); + +describe('class ElementValueNumber', () => { + let elementValueNumber: ElementValueNumber; + + test('instantiate element and verify initial value', () => { + elementValueNumber = new ElementValueNumber(); + expect(elementValueNumber.value).toBe(0); + }); + + test('update value and verify new value', () => { + elementValueNumber.update(5); + expect(elementValueNumber.value).toBe(5); + }); +}); + +describe('class ElementValueString', () => { + let elementValueString: ElementValueString; + + test('instantiate element and verify initial value', () => { + elementValueString = new ElementValueString(); + expect(elementValueString.value).toBe(''); + }); + + test('update value and verify new value', () => { + elementValueString.update('foo'); + expect(elementValueString.value).toBe('foo'); + }); +}); diff --git a/src/syntax/elements/program/elementValue.ts b/src/syntax/elements/program/elementValue.ts new file mode 100644 index 0000000..4473ff9 --- /dev/null +++ b/src/syntax/elements/program/elementValue.ts @@ -0,0 +1,49 @@ +import { TDataName } from '@/@types/syntax/data'; +import { ElementData } from '../core/elementArgument'; + +/** + * @virtual + * @class + * Generic class that defines a generic value element. + * + * @classdesc + * Value elements return a stored value. + */ +abstract class ElementValue extends ElementData { + constructor(name: string, returnType: ['number'], initialValue: number); + constructor(name: string, returnType: ['string'], initialValue: string); + constructor(name: string, returnType: ['boolean'], initialValue: boolean); + constructor(name: string, returnType: TDataName[], initialValue: T) { + super(name, {}, returnType, initialValue); + } +} + +/** + * @class + * Defines a value element that stores a boolean value. + */ +export class ElementValueBoolean extends ElementValue { + constructor() { + super('value-boolean', ['boolean'], true); + } +} + +/** + * @class + * Defines a value element that stores a number value. + */ +export class ElementValueNumber extends ElementValue { + constructor() { + super('value-number', ['number'], 0); + } +} + +/** + * @class + * Defines a value element that stores a string value. + */ +export class ElementValueString extends ElementValue { + constructor() { + super('value-string', ['string'], ''); + } +} From e361908e55a86176e1f2792a7917e41df0fe7eb6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 01:59:23 +0530 Subject: [PATCH 099/176] syntax: [refactor] Move value elements to value subdirectory --- src/syntax/elements/program/{ => values}/elementValue.spec.ts | 0 src/syntax/elements/program/{ => values}/elementValue.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/syntax/elements/program/{ => values}/elementValue.spec.ts (100%) rename src/syntax/elements/program/{ => values}/elementValue.ts (95%) diff --git a/src/syntax/elements/program/elementValue.spec.ts b/src/syntax/elements/program/values/elementValue.spec.ts similarity index 100% rename from src/syntax/elements/program/elementValue.spec.ts rename to src/syntax/elements/program/values/elementValue.spec.ts diff --git a/src/syntax/elements/program/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts similarity index 95% rename from src/syntax/elements/program/elementValue.ts rename to src/syntax/elements/program/values/elementValue.ts index 4473ff9..30568ce 100644 --- a/src/syntax/elements/program/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -1,5 +1,5 @@ import { TDataName } from '@/@types/syntax/data'; -import { ElementData } from '../core/elementArgument'; +import { ElementData } from '../../core/elementArgument'; /** * @virtual From 158868a57033788cbee29979a6fcebe2a3388ee3 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 03:00:44 +0530 Subject: [PATCH 100/176] syntax: [feat] Create box elements with tests Definition for the classes: ElementBoxBoolean, ElementBoxNumber, ElementBoxString, ElementBoxGeneric; unit tests --- .../elements/program/boxes/elementBox.spec.ts | 89 +++++++++++++++++ .../elements/program/boxes/elementBox.ts | 97 +++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 src/syntax/elements/program/boxes/elementBox.spec.ts create mode 100644 src/syntax/elements/program/boxes/elementBox.ts diff --git a/src/syntax/elements/program/boxes/elementBox.spec.ts b/src/syntax/elements/program/boxes/elementBox.spec.ts new file mode 100644 index 0000000..bb47d96 --- /dev/null +++ b/src/syntax/elements/program/boxes/elementBox.spec.ts @@ -0,0 +1,89 @@ +import { SymbolTable } from '../../../symbol-table/symbolTable'; +import { + ElementBoxBoolean, + ElementBoxNumber, + ElementBoxString, + ElementBoxGeneric +} from './elementBox'; + +const symbolTable = new SymbolTable(); + +describe('Box Elements', () => { + const elementBox = new ElementBoxGeneric(); + + test('instantiate and verify instance variables', () => { + expect(elementBox.name).toBe('box-generic'); + expect(elementBox.kind).toBe('Instruction'); + expect(elementBox.type).toBe('Statement'); + expect(elementBox.argCount).toBe(2); + expect(elementBox.argLabels).toEqual(['name', 'value']); + }); + + describe('class ElementBoxBoolean', () => { + let elementBoxBoolean: ElementBoxBoolean; + + test('execute with parameters and verify variable addition in symbol table', () => { + elementBoxBoolean = new ElementBoxBoolean(); + elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }, symbolTable); + expect(symbolTable.getGlobalVariable('booleanBox')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + }); + + describe('class ElementBoxNumber', () => { + let elementBoxNumber: ElementBoxNumber; + + test('execute with parameters and verify variable addition in symbol table', () => { + elementBoxNumber = new ElementBoxNumber(); + elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }, symbolTable); + expect(symbolTable.getGlobalVariable('numberBox')).toEqual({ + dataType: 'number', + value: 5 + }); + }); + }); + + describe('class ElementBoxString', () => { + let elementBoxString: ElementBoxString; + + test('execute with parameters and verify variable addition in symbol table', () => { + elementBoxString = new ElementBoxString(); + elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }, symbolTable); + expect(symbolTable.getGlobalVariable('stringBox')).toEqual({ + dataType: 'string', + value: 'foo' + }); + }); + }); + + describe('class ElementBoxGeneric', () => { + test('execute with boolean value parameter and verify variable addition in symbol table', () => { + const elementBoxGeneric = new ElementBoxGeneric(); + elementBoxGeneric.onVisit({ name: 'genericBox', value: true }, symbolTable); + expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + dataType: 'boolean', + value: true + }); + }); + + test('execute with number value parameter and verify variable addition in symbol table', () => { + const elementBoxGeneric = new ElementBoxGeneric(); + elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }, symbolTable); + expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + dataType: 'number', + value: 5 + }); + }); + + test('execute with string value parameter and verify variable addition in symbol table', () => { + const elementBoxGeneric = new ElementBoxGeneric(); + elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }, symbolTable); + expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + dataType: 'string', + value: 'foo' + }); + }); + }); +}); diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts new file mode 100644 index 0000000..e68ac08 --- /dev/null +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -0,0 +1,97 @@ +import { TData, TDataName } from '@/@types/syntax/data'; +import { ElementStatement } from '../../core/elementInstruction'; +import { SymbolTable } from '../../../symbol-table/symbolTable'; + +/** + * @virtual + * @class + * Generic class that defines a literally generic box element. + * + * @classdesc + * Box elements add (declare) variables to the symbol table. + */ +abstract class ElementBox extends ElementStatement { + constructor(name: string, types: TDataName[]) { + super(name, { + name: ['string'], + value: types + }); + } + + /** @override */ + public onVisit(params: { name: string; value: TData }, symbolTable: SymbolTable): void { + switch (typeof params.value) { + case 'boolean': + symbolTable.addGlobalVariable(params.name, 'boolean', params.value); + break; + case 'number': + symbolTable.addGlobalVariable(params.name, 'number', params.value); + break; + case 'string': + symbolTable.addGlobalVariable(params.name, 'string', params.value); + break; + default: + throw Error('Trespassing access: This should never be reached'); + } + } +} + +/** + * @class + * Defines a box element that declares a variable of any data type. + */ +export class ElementBoxGeneric extends ElementBox { + constructor() { + super('box-generic', ['boolean', 'number', 'string']); + } + + /** @override */ + onVisit(params: { name: string; value: TData }, symbolTable: SymbolTable): void { + super.onVisit(params, symbolTable); + } +} + +/** + * @class + * Defines a box element that declares a variable of boolean type. + */ +export class ElementBoxBoolean extends ElementBox { + constructor() { + super('box-boolean', ['boolean']); + } + + /** @override */ + onVisit(params: { name: string; value: boolean }, symbolTable: SymbolTable): void { + super.onVisit(params, symbolTable); + } +} + +/** + * @class + * Defines a box element that declares a variable of number type. + */ +export class ElementBoxNumber extends ElementBox { + constructor() { + super('box-number', ['number']); + } + + /** @override */ + onVisit(params: { name: string; value: number }, symbolTable: SymbolTable): void { + super.onVisit(params, symbolTable); + } +} + +/** + * @class + * Defines a box element that declares a variable of string type. + */ +export class ElementBoxString extends ElementBox { + constructor() { + super('box-string', ['string']); + } + + /** @override */ + onVisit(params: { name: string; value: string }, symbolTable: SymbolTable): void { + super.onVisit(params, symbolTable); + } +} From 6cf48b84e7c521fa6e5650b1e43a96032994bf64 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 06:57:58 +0530 Subject: [PATCH 101/176] syntax: [refactor] Add labels and evaluate to data element Add label construct; evaluate method to update _value internally --- src/@types/syntax/elementsCore.d.ts | 13 +- .../elements/core/elementArgument.spec.ts | 139 +++++++++--------- src/syntax/elements/core/elementArgument.ts | 19 ++- .../program/values/elementValue.spec.ts | 15 +- .../elements/program/values/elementValue.ts | 30 +++- 5 files changed, 131 insertions(+), 85 deletions(-) diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index f1ca149..8f1b136 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -27,11 +27,18 @@ export interface IElementArgument extends IElementSyntax { /** Generic interface for the class that implements a data element. */ export interface IElementData extends IElementArgument { + /** The display name of the data element. */ + label: string; /** - * Updates the value stored in the data element. - * @param value - new value + * Updates the label of the data element. + * @param value - new label value */ - update(value: T): void; + updateLabel(value: string): void; + /** + * Evalutates the logic of the data element (usually based on the label). + * @param symbolTable - The symbol table instance to operate on variables + */ + evaluate(symbolTable: ISymbolTable): void; } /** Generic interface for the class that implements an expression element. */ diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts index 8b1a000..8c58575 100644 --- a/src/syntax/elements/core/elementArgument.spec.ts +++ b/src/syntax/elements/core/elementArgument.spec.ts @@ -48,23 +48,15 @@ describe('class ElementArgument', () => { }); }); -class DummyElementData extends ElementData {} - -class DummyElementDataOverrideNumber extends ElementData { - public get value(): number { - return this._value * 2; - } -} - -class DummyElementDataOverrideString extends ElementData { - public get value(): string { - return `foo ${this._value} bar`; - } -} - -class DummyElementDataOverrideBoolean extends ElementData { - public get value(): boolean { - return !this._value; +class DummyElementData extends ElementData { + public evaluate(): void { + if (this._label === 'true' || this._label === 'false') { + this._value = (this._label === 'true') as unknown as T; + } else if (!isNaN(Number(this._label))) { + this._value = Number(this._label) as unknown as T; + } else { + this._value = this._label as unknown as T; + } } } @@ -75,23 +67,29 @@ describe('class ElementData', () => { 'dummy', {}, ['number'], - 0 + 0, + 'myData' ); expect(dummyElementDataNumber1.value).toBe(0); + expect(dummyElementDataNumber1.label).toBe('myData'); const dummyElementDataNumber2 = new DummyElementData( 'dummy', {}, ['number'], - 5 + 5, + 'myData' ); expect(dummyElementDataNumber2.value).toBe(5); + expect(dummyElementDataNumber1.label).toBe('myData'); const dummyElementDataNumber3 = new DummyElementData( 'dummy', {}, ['number'], - -5 + -5, + 'myData' ); expect(dummyElementDataNumber3.value).toBe(-5); + expect(dummyElementDataNumber1.label).toBe('myData'); }); test('instantiate class of type string that extends ElementData and validate API', () => { @@ -99,16 +97,20 @@ describe('class ElementData', () => { 'dummy', {}, ['string'], - 'foo' + 'foo', + 'myData' ); expect(dummyElementDataString1.value).toBe('foo'); + expect(dummyElementDataString1.label).toBe('myData'); const dummyElementDataString2 = new DummyElementData( 'dummy', {}, ['string'], - '' + '', + 'myData' ); expect(dummyElementDataString2.value).toBe(''); + expect(dummyElementDataString1.label).toBe('myData'); }); test('instantiate class of type boolean that extends ElementData and validate API', () => { @@ -116,89 +118,84 @@ describe('class ElementData', () => { 'dummy', {}, ['boolean'], - true + true, + 'myData' ); expect(dummyElementDataBoolean1.value).toBe(true); + expect(dummyElementDataBoolean1.label).toBe('myData'); const dummyElementDataBoolean2 = new DummyElementData( 'dummy', {}, ['boolean'], - false + false, + 'myData' ); expect(dummyElementDataBoolean2.value).toBe(false); + expect(dummyElementDataBoolean1.label).toBe('myData'); }); }); - describe('update', () => { - test('update value in instance of class of type number that extends ElementData and validate', () => { - const dummyElementDataNumber = new DummyElementData('dummy', {}, ['number'], 0); - expect(dummyElementDataNumber.value).toBe(0); - dummyElementDataNumber.update(5); - expect(dummyElementDataNumber.value).toBe(5); - dummyElementDataNumber.update(-5); - expect(dummyElementDataNumber.value).toBe(-5); - }); - - test('update value in instance of class of type string that extends ElementData and validate', () => { - const dummyElementDataString = new DummyElementData( + describe('update label', () => { + test('update value in instance of class that extends ElementData and validate', () => { + const dummyElementDataNumber = new DummyElementData( 'dummy', {}, - ['string'], - '' - ); - expect(dummyElementDataString.value).toBe(''); - dummyElementDataString.update('foo'); - expect(dummyElementDataString.value).toBe('foo'); - }); - - test('update value in instance of class of type boolean that extends ElementData and validate', () => { - const dummyElementDataBoolean = new DummyElementData( - 'dummy', - {}, - ['boolean'], - true + ['number'], + 0, + 'myData' ); - expect(dummyElementDataBoolean.value).toBe(true); - dummyElementDataBoolean.update(false); - expect(dummyElementDataBoolean.value).toBe(false); + expect(dummyElementDataNumber.label).toBe('myData'); + dummyElementDataNumber.updateLabel('yourData'); + expect(dummyElementDataNumber.label).toBe('yourData'); + dummyElementDataNumber.updateLabel('data'); + expect(dummyElementDataNumber.label).toBe('data'); }); }); - describe('override', () => { - test('override value in instance of class of type number that extends ElementData and validate', () => { - const dummyElementDataBoolean = new DummyElementDataOverrideNumber( + describe('overwriting', () => { + test('evaluate instance of class of type number that extends ElementData and validate', () => { + const dummyElementDataNumber = new DummyElementData( 'dummy', {}, ['number'], - 5 + 0, + 'myData' ); - expect(dummyElementDataBoolean.value).toBe(10); - dummyElementDataBoolean.update(-5); - expect(dummyElementDataBoolean.value).toBe(-10); + expect(dummyElementDataNumber.value).toBe(0); + dummyElementDataNumber.updateLabel('5'); + expect(dummyElementDataNumber.label).toBe('5'); + dummyElementDataNumber.evaluate(); + expect(dummyElementDataNumber.value).toBe(5); }); - test('override value in instance of class of type string that extends ElementData and validate', () => { - const dummyElementDataBoolean = new DummyElementDataOverrideString( + test('evaluate instance of class of type string that extends ElementData and validate', () => { + const dummyElementDataString = new DummyElementData( 'dummy', {}, ['string'], - 'foobar' + '', + 'myData' ); - expect(dummyElementDataBoolean.value).toBe('foo foobar bar'); - dummyElementDataBoolean.update(''); - expect(dummyElementDataBoolean.value).toBe('foo bar'); + expect(dummyElementDataString.value).toBe(''); + dummyElementDataString.updateLabel('foo'); + expect(dummyElementDataString.label).toBe('foo'); + dummyElementDataString.evaluate(); + expect(dummyElementDataString.value).toBe('foo'); }); - test('override value in instance of class of type boolean that extends ElementData and validate', () => { - const dummyElementDataBoolean = new DummyElementDataOverrideBoolean( + test('evaluate instance of class of type boolean that extends ElementData and validate', () => { + const dummyElementDataBoolean = new DummyElementData( 'dummy', {}, ['boolean'], - true + true, + 'myData' ); - expect(dummyElementDataBoolean.value).toBe(false); - dummyElementDataBoolean.update(false); expect(dummyElementDataBoolean.value).toBe(true); + dummyElementDataBoolean.updateLabel('false'); + expect(dummyElementDataBoolean.label).toBe('false'); + dummyElementDataBoolean.evaluate(); + expect(dummyElementDataBoolean.value).toBe(false); }); }); }); diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 1aad658..32cdb3f 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,6 +1,7 @@ import { IElementArgument, IElementExpression, IElementData } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; +import { SymbolTable } from '@/syntax/symbol-table/symbolTable'; /** * @virtual @@ -54,6 +55,9 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme * Data elements return a stored value. */ export abstract class ElementData extends ElementArgument implements IElementData { + /** Stores the label of the data element. */ + protected _label: string; + constructor( /** Name of the data element. */ name: string, @@ -62,14 +66,23 @@ export abstract class ElementData extends ElementArgument implements IElem /** Return types of the value returned by the argument element. */ returnType: TDataName[], /** Initial return value of the argument. */ - initialValue: T + initialValue: T, + /** Initial label of the data element. */ + initialLabel: string ) { super(name, 'Data', argMap, returnType, initialValue); + this._label = initialLabel; } - public update(value: T): void { - this._value = value; + public get label(): string { + return this._label; } + + public updateLabel(value: string): void { + this._label = value; + } + + public abstract evaluate(symbolTable: SymbolTable): void; } /** diff --git a/src/syntax/elements/program/values/elementValue.spec.ts b/src/syntax/elements/program/values/elementValue.spec.ts index b90c781..6d32fb1 100644 --- a/src/syntax/elements/program/values/elementValue.spec.ts +++ b/src/syntax/elements/program/values/elementValue.spec.ts @@ -8,8 +8,9 @@ describe('class ElementValueBoolean', () => { expect(elementValueBoolean.value).toBe(true); }); - test('update value and verify new value', () => { - elementValueBoolean.update(false); + test('update label and verify new value', () => { + elementValueBoolean.updateLabel('false'); + elementValueBoolean.evaluate(); expect(elementValueBoolean.value).toBe(false); }); }); @@ -22,8 +23,9 @@ describe('class ElementValueNumber', () => { expect(elementValueNumber.value).toBe(0); }); - test('update value and verify new value', () => { - elementValueNumber.update(5); + test('update label and verify new value', () => { + elementValueNumber.updateLabel('5'); + elementValueNumber.evaluate(); expect(elementValueNumber.value).toBe(5); }); }); @@ -36,8 +38,9 @@ describe('class ElementValueString', () => { expect(elementValueString.value).toBe(''); }); - test('update value and verify new value', () => { - elementValueString.update('foo'); + test('update label and verify new value', () => { + elementValueString.updateLabel('foo'); + elementValueString.evaluate(); expect(elementValueString.value).toBe('foo'); }); }); diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts index 30568ce..a03cbcb 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -13,14 +13,38 @@ abstract class ElementValue extends ElementData { constructor(name: string, returnType: ['number'], initialValue: number); constructor(name: string, returnType: ['string'], initialValue: string); constructor(name: string, returnType: ['boolean'], initialValue: boolean); - constructor(name: string, returnType: TDataName[], initialValue: T) { - super(name, {}, returnType, initialValue); + constructor(name: string, returnType: [TDataName], initialValue: T) { + super(name, {}, returnType, initialValue, ''); + } + + /** @throws `Error` (TypeMismatchError) */ + public evaluate(): void { + switch (this.returnType[0]) { + case 'boolean': + if (this._label === 'true' || this._label === 'false') { + this._value = (this._label === 'true') as unknown as T; + } else { + throw Error(`TypeMismatchError: ${this._label} is not of type "boolean"`); + } + break; + case 'number': + if (!isNaN(Number(this._label))) { + this._value = Number(this._label) as unknown as T; + } else { + throw Error(`TypeMismatchError: ${this._label} is not of type "number"`); + } + break; + case 'string': + default: + this._value = this._label as unknown as T; + } } } /** * @class * Defines a value element that stores a boolean value. + * @throws `Error` (TypeMismatchError) */ export class ElementValueBoolean extends ElementValue { constructor() { @@ -31,6 +55,7 @@ export class ElementValueBoolean extends ElementValue { /** * @class * Defines a value element that stores a number value. + * @throws `Error` (TypeMismatchError) */ export class ElementValueNumber extends ElementValue { constructor() { @@ -41,6 +66,7 @@ export class ElementValueNumber extends ElementValue { /** * @class * Defines a value element that stores a string value. + * @throws `Error` (TypeMismatchError) */ export class ElementValueString extends ElementValue { constructor() { From 1fd7326032f64a52376a07c966a0033414bd2bb4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 05:09:41 +0530 Subject: [PATCH 102/176] syntax: [feat] Create box identifier elements with tests Definition for the classes: ElementBoxIdentifierBoolean, ElementBoxIdentifierNumber, ElementBoxIdentifierString, ElementBoxIdentifierGeneric; unit tests --- .eslintrc.json | 1 + .../boxes/elementBoxIdentifier.spec.ts | 95 +++++++++++++++++++ .../program/boxes/elementBoxIdentifier.ts | 94 ++++++++++++++++++ 3 files changed, 190 insertions(+) create mode 100644 src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts create mode 100644 src/syntax/elements/program/boxes/elementBoxIdentifier.ts diff --git a/.eslintrc.json b/.eslintrc.json index 184400b..799ef1d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,6 +12,7 @@ "rules": { "@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-non-null-assertion": "off", "no-mixed-spaces-and-tabs": "warn", "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": [ diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts new file mode 100644 index 0000000..44dbdba --- /dev/null +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts @@ -0,0 +1,95 @@ +import { + ElementBoxIdentifierGeneric, + ElementBoxIdentifierBoolean, + ElementBoxIdentifierNumber, + ElementBoxIdentifierString +} from './elementBoxIdentifier'; +import { SymbolTable } from '../../../symbol-table/symbolTable'; + +const symbolTable = new SymbolTable(); + +symbolTable.addGlobalVariable('myVar1', 'boolean', true); +symbolTable.addGlobalVariable('myVar2', 'number', 5); +symbolTable.addGlobalVariable('myVar3', 'string', 'foo'); + +describe('Box Identifier Elements', () => { + describe('class ElementBoxIdentifierGeneric', () => { + const elementBoxIdentifierGeneric = new ElementBoxIdentifierGeneric(); + + test('update label to name with boolean variable in symbol table and verify evaluation', () => { + elementBoxIdentifierGeneric.updateLabel('myVar1'); + elementBoxIdentifierGeneric.evaluate(symbolTable); + expect(elementBoxIdentifierGeneric.value).toBe(true); + }); + + test('update label to name with number variable in symbol table and verify evaluation', () => { + elementBoxIdentifierGeneric.updateLabel('myVar2'); + elementBoxIdentifierGeneric.evaluate(symbolTable); + expect(elementBoxIdentifierGeneric.value).toBe(5); + }); + + test('update label to name with string variable in symbol table and verify evaluation', () => { + elementBoxIdentifierGeneric.updateLabel('myVar3'); + elementBoxIdentifierGeneric.evaluate(symbolTable); + expect(elementBoxIdentifierGeneric.value).toBe('foo'); + }); + + test('update label to name with no variable in symbol table and expect error', () => { + elementBoxIdentifierGeneric.updateLabel('myVar'); + expect(() => elementBoxIdentifierGeneric.evaluate(symbolTable)).toThrowError( + 'ItemNotFoundError: box "myVar" does not exist' + ); + }); + }); + + describe('class ElementBoxIdentifierBoolean', () => { + const elementBoxIdentifierBoolean = new ElementBoxIdentifierBoolean(); + + test('update label to name with boolean variable in symbol table and verify evaluation', () => { + elementBoxIdentifierBoolean.updateLabel('myVar1'); + elementBoxIdentifierBoolean.evaluate(symbolTable); + expect(elementBoxIdentifierBoolean.value).toBe(true); + }); + + test('update label to name with boolean variable not in symbol table and expect error', () => { + elementBoxIdentifierBoolean.updateLabel('myVar2'); + expect(() => elementBoxIdentifierBoolean.evaluate(symbolTable)).toThrowError( + 'ItemNotFoundError: box "myVar2" of type "boolean" does not exist' + ); + }); + }); + + describe('class ElementBoxIdentifierNumber', () => { + const elementBoxIdentifierNumber = new ElementBoxIdentifierNumber(); + + test('update label to name with number variable in symbol table and verify evaluation', () => { + elementBoxIdentifierNumber.updateLabel('myVar2'); + elementBoxIdentifierNumber.evaluate(symbolTable); + expect(elementBoxIdentifierNumber.value).toBe(5); + }); + + test('update label to name with number variable not in symbol table and expect error', () => { + elementBoxIdentifierNumber.updateLabel('myVar1'); + expect(() => elementBoxIdentifierNumber.evaluate(symbolTable)).toThrowError( + 'ItemNotFoundError: box "myVar1" of type "number" does not exist' + ); + }); + }); + + describe('class ElementBoxIdentifierString', () => { + const elementBoxIdentifierString = new ElementBoxIdentifierString(); + + test('update label to name with string variable in symbol table and verify evaluation', () => { + elementBoxIdentifierString.updateLabel('myVar3'); + elementBoxIdentifierString.evaluate(symbolTable); + expect(elementBoxIdentifierString.value).toBe('foo'); + }); + + test('update label to name with string variable not in symbol table and expect error', () => { + elementBoxIdentifierString.updateLabel('myVar1'); + expect(() => elementBoxIdentifierString.evaluate(symbolTable)).toThrowError( + 'ItemNotFoundError: box "myVar1" of type "string" does not exist' + ); + }); + }); +}); diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts new file mode 100644 index 0000000..2df78ec --- /dev/null +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -0,0 +1,94 @@ +import { TData, TDataName } from '@/@types/syntax/data'; +import { ElementData } from '../../core/elementArgument'; +import { SymbolTable } from '@/syntax/symbol-table/symbolTable'; + +/** + * @virtual + * @class + * Generic class that defines a literally generic box identifier element. + * @classdesc + * Box identifier elements fetch variables according to their label from the symbol table. + * @throws `Error` (ItemNotFoundError) + */ +abstract class ElementBoxIdentifier extends ElementData { + constructor(name: string, returnType: ['boolean'], initialValue: boolean, initialLabel: string); + constructor(name: string, returnType: ['number'], initialValue: number, initialLabel: string); + constructor(name: string, returnType: ['string'], initialValue: string, initialLabel: string); + constructor( + name: string, + returnType: ['boolean', 'number', 'string'], + initialValue: TData, + initialLabel: string + ); + constructor(name: string, returnType: TDataName[], initialValue: T, initialLabel: string) { + super(name, {}, returnType, initialValue, initialLabel); + } + + /** @override */ + public evaluate(symbolTable: SymbolTable): void { + const expectedType = typeof this._value as TDataName; + + try { + const { dataType, value } = symbolTable.getGlobalVariable(this._label)!; + if (this.returnType.length > 1) { + this._value = value as unknown as T; + } else if (dataType === expectedType) { + this._value = value as unknown as T; + } else { + throw Error(''); + } + } catch (e) { + if (this.returnType.length > 1) { + throw Error(`ItemNotFoundError: box "${this._label}" does not exist`); + } else { + throw Error( + `ItemNotFoundError: box "${this._label}" of type "${expectedType}" does not exist` + ); + } + } + } +} + +/** + * @class + * Defines a box identifier element that fetches a variable of any data type based on presence. + * @throws `Error` (ItemNotFoundError) + */ +export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { + constructor() { + super('boxidentifier-generic', ['boolean', 'number', 'string'], '', ''); + } +} + +/** + * @class + * Defines a box identifier element that fetches a variable of boolean type based on presence. + * @throws `Error` (ItemNotFoundError) + */ +export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { + constructor() { + super('boxidentifier-boolean', ['boolean'], true, ''); + } +} + +/** + * @class + * Defines a box identifier element that fetches a variable of number type based on presence. + * @throws `Error` (ItemNotFoundError) + */ +export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { + constructor() { + super('boxidentifier-number', ['number'], 0, ''); + } +} + +/** + * @class + * Defines a box identifier element that fetches a variable of string type based on presence. + * @throws `Error` (ItemNotFoundError) + */ +export class ElementBoxIdentifierString extends ElementBoxIdentifier { + constructor() { + super('boxidentifier-string', ['string'], '', ''); + } +} From 18ca5824253b6aee9b6877a232bd98050e6c5567 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 10:30:46 +0530 Subject: [PATCH 103/176] symbol-table: [refactor] Export functions instead of class Class structure isn't of much use, this being a single instance. Exporting functions instead provides benefits like tree-shaking, faster module loading, etc. --- src/@types/syntax/elementsCore.d.ts | 7 +- src/@types/syntax/symbolTable.d.ts | 160 ---- src/syntax/elements/core/elementArgument.ts | 3 +- .../elements/core/elementInstruction.ts | 3 +- .../elements/program/boxes/elementBox.spec.ts | 28 +- .../elements/program/boxes/elementBox.ts | 26 +- .../boxes/elementBoxIdentifier.spec.ts | 30 +- .../program/boxes/elementBoxIdentifier.ts | 6 +- src/syntax/symbol-table/symbolTable.spec.ts | 21 +- src/syntax/symbol-table/symbolTable.ts | 692 +++++++++++------- 10 files changed, 473 insertions(+), 503 deletions(-) delete mode 100644 src/@types/syntax/symbolTable.d.ts diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index 8f1b136..ab03a48 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -1,5 +1,4 @@ import { TData, TDataName } from './data'; -import { ISymbolTable } from './symbolTable'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { @@ -36,9 +35,8 @@ export interface IElementData extends IElementArgument { updateLabel(value: string): void; /** * Evalutates the logic of the data element (usually based on the label). - * @param symbolTable - The symbol table instance to operate on variables */ - evaluate(symbolTable: ISymbolTable): void; + evaluate(): void; } /** Generic interface for the class that implements an expression element. */ @@ -55,9 +53,8 @@ export interface IElementInstruction extends IElementSyntax { /** * Executes the instruction using the supplied parameters. * @param params - An object containing key-value pairs of each argument and it's value - * @param symbolTable - The symbol table instance to operate on variables */ - onVisit(params: { [key: string]: TData }, symbolTable: ISymbolTable): void; + onVisit(params: { [key: string]: TData }): void; } /** Interface for the class that implements a statement element. */ diff --git a/src/@types/syntax/symbolTable.d.ts b/src/@types/syntax/symbolTable.d.ts deleted file mode 100644 index dd409de..0000000 --- a/src/@types/syntax/symbolTable.d.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { TData, TDataName } from './data'; - -/** Object describing a variable entry. */ -export type IVariable = { - dataType: TDataName; - value: TData; -}; - -/** Object describing a set of variables. */ -export type IVariableTable = { - [variable: string]: IVariable; -}; - -/** Interface for the class that implements the symbol table. */ -export interface ISymbolTable { - /** - * Adds a global variable. If already present, overwrites it. - * @param variable - name of the variable - * @param dataType - data type of the variable - * @param value - value of the variable - */ - addGlobalVariable(variable: string, dataType: TDataName, value: TData): void; - /** - * Fetches a global variable. - * @param variable - name of the variable - * @returns the variable entry if present, else `null` - */ - getGlobalVariable(variable: string): IVariable | null; - /** - * Returns names of all global variables. - * @returns a list of all global variable names - */ - getGlobalVariableNames(): string[]; - /** - * Returns names of all global variables with their data types. - * @returns an object with key-value pairs of variable names and corresponding data type - */ - getGlobalVariableNamesWithTypes(): { [variable: string]: TDataName }; - /** - * Removes a global variable if present. - * @param variable - name of the variable - */ - removeGlobalVariable(variable: string): void; - /** - * Adds a variable for a program. If already present, overwrites it. - * @param variable - name of the variable - * @param dataType - data type of the variable - * @param value - value of the variable - * @param program - ID of the program - */ - addProgramVariable(variable: string, dataType: TDataName, value: TData, program: string): void; - /** - * Fetches a variable for a program. - * @param variable - name of the variable - * @param program - ID of the program - * @returns the variable entry if present, else `null` - */ - getProgramVariable(variable: string, program: string): IVariable | null; - /** - * Returns names of all variables for a program. - * @param program - ID of the program - * @returns a list of all variable names for a program - */ - getProgramVariableNames(program: string): string[]; - /** - * Returns names of all variables for a program with their data types. - * @param program - ID of the program - * @returns an object with key-value pairs of variable names and corresponding data type - */ - getProgramVariableNamesWithTypes(program: string): { [variable: string]: TDataName }; - /** - * Returns names of all program variables. - * @returns an object with key-value pairs of program names and corresponding list of variable - * names - */ - getProgramVariableNamesAll(): { [program: string]: string[] }; - /** - * Returns names and types of all program variables. - * @returns an object with key-value pairs of program names and corresponding object with key-value - * pairs of variable names and data types. - */ - getProgramVariableNamesWithTypesAll(): { [program: string]: { [variable: string]: TDataName } }; - /** - * Removes a variable for a program if present. - * @param variable - name of the variable - * @param program - ID of the program - */ - removeProgramVariable(variable: string, program: string): void; - /** - * Adds a variable for a routine. If already present, overwrites it. - * @param variable - name of the variable - * @param dataType - data type of the variable - * @param value - value of the variable - * @param routine - ID of the routine - */ - addRoutineVariable(variable: string, dataType: TDataName, value: TData, routine: string): void; - /** - * Fetches a variable for a routine. - * @param variable - name of the variable - * @param routine - ID of the routine - * @returns the variable entry if present, else `null` - */ - getRoutineVariable(variable: string, routine: string): IVariable | null; - /** - * Returns names of all variables for a routine. - * @param routine - ID of the routine - * @returns a list of all variable names for a routine - */ - getRoutineVariableNames(routine: string): string[]; - /** - * Returns names of all variables for a routine with their data types. - * @param routine - ID of the routine - * @returns an object with key-value pairs of variable names and corresponding data type - */ - getRoutineVariableNamesWithTypes(routine: string): { [variable: string]: TDataName }; - /** - * Returns names of all routine variables. - * @returns an object with key-value pairs of routine names and corresponding list of variable - * names - */ - getRoutineVariableNamesAll(): { [routine: string]: string[] }; - /** - * Returns names and types of all routine variables. - * @returns an object with key-value pairs of routine names and corresponding object with key-value - * pairs of variable names and data types. - */ - getRoutineVariableNamesWithTypesAll(): { [routine: string]: { [variable: string]: TDataName } }; - /** - * Removes a variable for a routine if present. - * @param variable - name of the variable - * @param routine - ID of the routine - */ - removeRoutineVariable(variable: string, routine: string): void; - /** - * Clears all global variables. - */ - flushGlobalVariables(): void; - /** - * Clears all variables for a program. - * @param program - 0 ID of the program - */ - flushProgramVariables(program: string): void; - /** - * Clears all program variables. - */ - flushProgramVariablesAll(): void; - /** - * Clears all variables for a routine. - * @param routine - ID of the routine - */ - flushRoutineVariables(routine: string): void; - /** - * Clears all routine variables. - */ - flushRoutineVariablesAll(): void; - /** - * Clears all variable tables. - */ - flushAllVariables(): void; -} diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 32cdb3f..96cb28b 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,7 +1,6 @@ import { IElementArgument, IElementExpression, IElementData } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; -import { SymbolTable } from '@/syntax/symbol-table/symbolTable'; /** * @virtual @@ -82,7 +81,7 @@ export abstract class ElementData extends ElementArgument implements IElem this._label = value; } - public abstract evaluate(symbolTable: SymbolTable): void; + public abstract evaluate(): void; } /** diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index 48176b0..a996a0d 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -5,7 +5,6 @@ import { } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; -import { ISymbolTable } from '@/@types/syntax/symbolTable'; /** * @virtual @@ -28,7 +27,7 @@ export abstract class ElementInstruction extends ElementSyntax implements IEleme super(name, 'Instruction', type, argMap); } - public abstract onVisit(params: { [key: string]: TData }, symbolTable: ISymbolTable): void; + public abstract onVisit(params: { [key: string]: TData }): void; } /** diff --git a/src/syntax/elements/program/boxes/elementBox.spec.ts b/src/syntax/elements/program/boxes/elementBox.spec.ts index bb47d96..4646175 100644 --- a/src/syntax/elements/program/boxes/elementBox.spec.ts +++ b/src/syntax/elements/program/boxes/elementBox.spec.ts @@ -1,12 +1,10 @@ -import { SymbolTable } from '../../../symbol-table/symbolTable'; import { ElementBoxBoolean, ElementBoxNumber, ElementBoxString, ElementBoxGeneric } from './elementBox'; - -const symbolTable = new SymbolTable(); +import { getGlobalVariable } from '../../../symbol-table/symbolTable'; describe('Box Elements', () => { const elementBox = new ElementBoxGeneric(); @@ -24,8 +22,8 @@ describe('Box Elements', () => { test('execute with parameters and verify variable addition in symbol table', () => { elementBoxBoolean = new ElementBoxBoolean(); - elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }, symbolTable); - expect(symbolTable.getGlobalVariable('booleanBox')).toEqual({ + elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }); + expect(getGlobalVariable('booleanBox')).toEqual({ dataType: 'boolean', value: true }); @@ -37,8 +35,8 @@ describe('Box Elements', () => { test('execute with parameters and verify variable addition in symbol table', () => { elementBoxNumber = new ElementBoxNumber(); - elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }, symbolTable); - expect(symbolTable.getGlobalVariable('numberBox')).toEqual({ + elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }); + expect(getGlobalVariable('numberBox')).toEqual({ dataType: 'number', value: 5 }); @@ -50,8 +48,8 @@ describe('Box Elements', () => { test('execute with parameters and verify variable addition in symbol table', () => { elementBoxString = new ElementBoxString(); - elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }, symbolTable); - expect(symbolTable.getGlobalVariable('stringBox')).toEqual({ + elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }); + expect(getGlobalVariable('stringBox')).toEqual({ dataType: 'string', value: 'foo' }); @@ -61,8 +59,8 @@ describe('Box Elements', () => { describe('class ElementBoxGeneric', () => { test('execute with boolean value parameter and verify variable addition in symbol table', () => { const elementBoxGeneric = new ElementBoxGeneric(); - elementBoxGeneric.onVisit({ name: 'genericBox', value: true }, symbolTable); - expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + elementBoxGeneric.onVisit({ name: 'genericBox', value: true }); + expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'boolean', value: true }); @@ -70,8 +68,8 @@ describe('Box Elements', () => { test('execute with number value parameter and verify variable addition in symbol table', () => { const elementBoxGeneric = new ElementBoxGeneric(); - elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }, symbolTable); - expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }); + expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'number', value: 5 }); @@ -79,8 +77,8 @@ describe('Box Elements', () => { test('execute with string value parameter and verify variable addition in symbol table', () => { const elementBoxGeneric = new ElementBoxGeneric(); - elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }, symbolTable); - expect(symbolTable.getGlobalVariable('genericBox')).toEqual({ + elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }); + expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'string', value: 'foo' }); diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts index e68ac08..bce8161 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/syntax/data'; import { ElementStatement } from '../../core/elementInstruction'; -import { SymbolTable } from '../../../symbol-table/symbolTable'; +import { addGlobalVariable } from '../../../symbol-table/symbolTable'; /** * @virtual @@ -19,16 +19,16 @@ abstract class ElementBox extends ElementStatement { } /** @override */ - public onVisit(params: { name: string; value: TData }, symbolTable: SymbolTable): void { + public onVisit(params: { name: string; value: TData }): void { switch (typeof params.value) { case 'boolean': - symbolTable.addGlobalVariable(params.name, 'boolean', params.value); + addGlobalVariable(params.name, 'boolean', params.value); break; case 'number': - symbolTable.addGlobalVariable(params.name, 'number', params.value); + addGlobalVariable(params.name, 'number', params.value); break; case 'string': - symbolTable.addGlobalVariable(params.name, 'string', params.value); + addGlobalVariable(params.name, 'string', params.value); break; default: throw Error('Trespassing access: This should never be reached'); @@ -46,8 +46,8 @@ export class ElementBoxGeneric extends ElementBox { } /** @override */ - onVisit(params: { name: string; value: TData }, symbolTable: SymbolTable): void { - super.onVisit(params, symbolTable); + onVisit(params: { name: string; value: TData }): void { + super.onVisit(params); } } @@ -61,8 +61,8 @@ export class ElementBoxBoolean extends ElementBox { } /** @override */ - onVisit(params: { name: string; value: boolean }, symbolTable: SymbolTable): void { - super.onVisit(params, symbolTable); + onVisit(params: { name: string; value: boolean }): void { + super.onVisit(params); } } @@ -76,8 +76,8 @@ export class ElementBoxNumber extends ElementBox { } /** @override */ - onVisit(params: { name: string; value: number }, symbolTable: SymbolTable): void { - super.onVisit(params, symbolTable); + onVisit(params: { name: string; value: number }): void { + super.onVisit(params); } } @@ -91,7 +91,7 @@ export class ElementBoxString extends ElementBox { } /** @override */ - onVisit(params: { name: string; value: string }, symbolTable: SymbolTable): void { - super.onVisit(params, symbolTable); + onVisit(params: { name: string; value: string }): void { + super.onVisit(params); } } diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts index 44dbdba..0c99111 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts @@ -4,13 +4,11 @@ import { ElementBoxIdentifierNumber, ElementBoxIdentifierString } from './elementBoxIdentifier'; -import { SymbolTable } from '../../../symbol-table/symbolTable'; +import { addGlobalVariable } from '../../../symbol-table/symbolTable'; -const symbolTable = new SymbolTable(); - -symbolTable.addGlobalVariable('myVar1', 'boolean', true); -symbolTable.addGlobalVariable('myVar2', 'number', 5); -symbolTable.addGlobalVariable('myVar3', 'string', 'foo'); +addGlobalVariable('myVar1', 'boolean', true); +addGlobalVariable('myVar2', 'number', 5); +addGlobalVariable('myVar3', 'string', 'foo'); describe('Box Identifier Elements', () => { describe('class ElementBoxIdentifierGeneric', () => { @@ -18,25 +16,25 @@ describe('Box Identifier Elements', () => { test('update label to name with boolean variable in symbol table and verify evaluation', () => { elementBoxIdentifierGeneric.updateLabel('myVar1'); - elementBoxIdentifierGeneric.evaluate(symbolTable); + elementBoxIdentifierGeneric.evaluate(); expect(elementBoxIdentifierGeneric.value).toBe(true); }); test('update label to name with number variable in symbol table and verify evaluation', () => { elementBoxIdentifierGeneric.updateLabel('myVar2'); - elementBoxIdentifierGeneric.evaluate(symbolTable); + elementBoxIdentifierGeneric.evaluate(); expect(elementBoxIdentifierGeneric.value).toBe(5); }); test('update label to name with string variable in symbol table and verify evaluation', () => { elementBoxIdentifierGeneric.updateLabel('myVar3'); - elementBoxIdentifierGeneric.evaluate(symbolTable); + elementBoxIdentifierGeneric.evaluate(); expect(elementBoxIdentifierGeneric.value).toBe('foo'); }); test('update label to name with no variable in symbol table and expect error', () => { elementBoxIdentifierGeneric.updateLabel('myVar'); - expect(() => elementBoxIdentifierGeneric.evaluate(symbolTable)).toThrowError( + expect(() => elementBoxIdentifierGeneric.evaluate()).toThrowError( 'ItemNotFoundError: box "myVar" does not exist' ); }); @@ -47,13 +45,13 @@ describe('Box Identifier Elements', () => { test('update label to name with boolean variable in symbol table and verify evaluation', () => { elementBoxIdentifierBoolean.updateLabel('myVar1'); - elementBoxIdentifierBoolean.evaluate(symbolTable); + elementBoxIdentifierBoolean.evaluate(); expect(elementBoxIdentifierBoolean.value).toBe(true); }); test('update label to name with boolean variable not in symbol table and expect error', () => { elementBoxIdentifierBoolean.updateLabel('myVar2'); - expect(() => elementBoxIdentifierBoolean.evaluate(symbolTable)).toThrowError( + expect(() => elementBoxIdentifierBoolean.evaluate()).toThrowError( 'ItemNotFoundError: box "myVar2" of type "boolean" does not exist' ); }); @@ -64,13 +62,13 @@ describe('Box Identifier Elements', () => { test('update label to name with number variable in symbol table and verify evaluation', () => { elementBoxIdentifierNumber.updateLabel('myVar2'); - elementBoxIdentifierNumber.evaluate(symbolTable); + elementBoxIdentifierNumber.evaluate(); expect(elementBoxIdentifierNumber.value).toBe(5); }); test('update label to name with number variable not in symbol table and expect error', () => { elementBoxIdentifierNumber.updateLabel('myVar1'); - expect(() => elementBoxIdentifierNumber.evaluate(symbolTable)).toThrowError( + expect(() => elementBoxIdentifierNumber.evaluate()).toThrowError( 'ItemNotFoundError: box "myVar1" of type "number" does not exist' ); }); @@ -81,13 +79,13 @@ describe('Box Identifier Elements', () => { test('update label to name with string variable in symbol table and verify evaluation', () => { elementBoxIdentifierString.updateLabel('myVar3'); - elementBoxIdentifierString.evaluate(symbolTable); + elementBoxIdentifierString.evaluate(); expect(elementBoxIdentifierString.value).toBe('foo'); }); test('update label to name with string variable not in symbol table and expect error', () => { elementBoxIdentifierString.updateLabel('myVar1'); - expect(() => elementBoxIdentifierString.evaluate(symbolTable)).toThrowError( + expect(() => elementBoxIdentifierString.evaluate()).toThrowError( 'ItemNotFoundError: box "myVar1" of type "string" does not exist' ); }); diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts index 2df78ec..fc312ab 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/syntax/data'; import { ElementData } from '../../core/elementArgument'; -import { SymbolTable } from '@/syntax/symbol-table/symbolTable'; +import { getGlobalVariable } from '../../../symbol-table/symbolTable'; /** * @virtual @@ -25,11 +25,11 @@ abstract class ElementBoxIdentifier extends ElementData { } /** @override */ - public evaluate(symbolTable: SymbolTable): void { + public evaluate(): void { const expectedType = typeof this._value as TDataName; try { - const { dataType, value } = symbolTable.getGlobalVariable(this._label)!; + const { dataType, value } = getGlobalVariable(this._label)!; if (this.returnType.length > 1) { this._value = value as unknown as T; } else if (dataType === expectedType) { diff --git a/src/syntax/symbol-table/symbolTable.spec.ts b/src/syntax/symbol-table/symbolTable.spec.ts index 5ba2616..e0fdb9b 100644 --- a/src/syntax/symbol-table/symbolTable.spec.ts +++ b/src/syntax/symbol-table/symbolTable.spec.ts @@ -1,6 +1,4 @@ -import { SymbolTable } from './symbolTable'; - -const symbolTable = new SymbolTable(); +import * as symbolTable from './symbolTable'; describe('Symbol Table', () => { describe('global variables', () => { @@ -278,5 +276,22 @@ describe('Symbol Table', () => { symbolTable.flushRoutineVariablesAll(); expect(symbolTable.getRoutineVariableNamesAll()).toEqual({}); }); + + test('flush all variables and verify', () => { + symbolTable.addGlobalVariable('myVar1', 'number', 0); + symbolTable.addProgramVariable('myVar2', 'number', 0, 'myProgram'); + symbolTable.addRoutineVariable('myVar3', 'number', 0, 'myRoutine'); + expect(new Set(symbolTable.getGlobalVariableNames())).toEqual(new Set(['myVar1'])); + expect(new Set(Object.entries(symbolTable.getProgramVariableNamesAll()))).toEqual( + new Set([['myProgram', ['myVar2']]]) + ); + expect(new Set(Object.entries(symbolTable.getRoutineVariableNamesAll()))).toEqual( + new Set([['myRoutine', ['myVar3']]]) + ); + symbolTable.flushAllVariables(); + expect(symbolTable.getGlobalVariableNames()).toEqual([]); + expect(symbolTable.getProgramVariableNamesAll()).toEqual({}); + expect(symbolTable.getRoutineVariableNamesAll()).toEqual({}); + }); }); }); diff --git a/src/syntax/symbol-table/symbolTable.ts b/src/syntax/symbol-table/symbolTable.ts index f82a9ff..1ac8db1 100644 --- a/src/syntax/symbol-table/symbolTable.ts +++ b/src/syntax/symbol-table/symbolTable.ts @@ -1,323 +1,447 @@ import { TData, TDataName } from '@/@types/syntax/data'; -import { ISymbolTable, IVariable, IVariableTable } from '@/@types/syntax/symbolTable'; - -/** - * @class - * Defines the symbol table that stores the defined variables with their values and types. - */ -export class SymbolTable implements ISymbolTable { - /** Stores the global table. */ - private _globalTable: IVariableTable; - /** Stores the programs' tables. */ - private _programTable: { - [key: string]: IVariableTable; - }; - /** Stores the routines' table. */ - private _routineTable: { - [key: string]: IVariableTable; - }; - - constructor() { - this._globalTable = {}; - this._programTable = {}; - this._routineTable = {}; - } - public addGlobalVariable(variable: string, dataType: 'number', value: number): void; - public addGlobalVariable(variable: string, dataType: 'string', value: string): void; - public addGlobalVariable(variable: string, dataType: 'boolean', value: boolean): void; - public addGlobalVariable(variable: string, dataType: TDataName, value: TData): void { - this._globalTable[variable] = { dataType, value }; - } +// -- types ---------------------------------------------------------------------------------------- - public getGlobalVariable(variable: string): IVariable | null { - return variable in this._globalTable ? this._globalTable[variable] : null; - } +/** Type describing a variable entry. */ +type IVariable = { + dataType: TDataName; + value: TData; +}; - public getGlobalVariableNames(): string[] { - return Object.keys(this._globalTable); - } +/** Type describing a set of variables. */ +type IVariableTable = { + [variable: string]: IVariable; +}; - public getGlobalVariableNamesWithTypes(): { [variable: string]: TDataName } { - const table: { [variable: string]: TDataName } = {}; - Object.entries(this._globalTable).forEach(([variable, { dataType }]) => { - table[variable] = dataType; - }); - return table; - } +// -- private variables ---------------------------------------------------------------------------- - public removeGlobalVariable(variable: string): void { - if (variable in this._globalTable) { - delete this._globalTable[variable]; - } - } +/** Stores the global table. */ +let _globalTable: IVariableTable = {}; +/** Stores the programs' tables. */ +let _programTable: { [program: string]: IVariableTable } = {}; +/** Stores the routines' table. */ +let _routineTable: { [routine: string]: IVariableTable } = {}; - /** - * A helper that adds a variable for a program or routine. If already present, overwrites it. - * @param variable - name of the variable - * @param dataType - data type of the variable - * @param value - value of the variable - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - */ - private _addTableVariable( - variable: string, - dataType: TDataName, - value: TData, - selector: string, - tableName: 'program' | 'routine' - ): void { - const table = tableName === 'program' ? this._programTable : this._routineTable; - if (!(selector in table)) { - table[selector] = {}; - } - table[selector][variable] = { dataType, value }; - } +// -- private function ----------------------------------------------------------------------------- - /** - * A helper that fetches a variable for a program or routine. - * @param variable - name of the variable - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - * @returns the variable entry if present, else `null` - */ - private _getTableVariable( - variable: string, - selector: string, - tableName: 'program' | 'routine' - ): IVariable | null { - const table = tableName === 'program' ? this._programTable : this._routineTable; - return selector in table && variable in table[selector] ? table[selector][variable] : null; - } +/** + * A helper that adds a variable for a program or routine. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ +function _addTableVariable( + variable: string, + dataType: TDataName, + value: TData, + selector: string, + tableName: 'program' | 'routine' +): void { + const table = tableName === 'program' ? _programTable : _routineTable; + if (!(selector in table)) { + table[selector] = {}; + } + table[selector][variable] = { dataType, value }; +} - /** - * A helper that returns names of all variables for a program or routine. - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - * @returns a list of all variable names for a program or routine - */ - private _getTableVariableNames(selector: string, tableName: 'program' | 'routine'): string[] { - const table = tableName === 'program' ? this._programTable : this._routineTable; - return selector in table ? Object.keys(table[selector]) : []; - } +/** + * A helper that fetches a variable for a program or routine. + * @param variable - name of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns the variable entry if present, else `null` + */ +function _getTableVariable( + variable: string, + selector: string, + tableName: 'program' | 'routine' +): IVariable | null { + const table = tableName === 'program' ? _programTable : _routineTable; + return selector in table && variable in table[selector] ? table[selector][variable] : null; +} - /** - * A helper that returns names of all variables for a program or routine with their data types. - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - * @returns an object with key-value pairs of variable names and corresponding data type - */ - private _getTableVariableNamesWithTypes( - selector: string, - tableName: 'program' | 'routine' - ): { [variable: string]: TDataName } { - const table = tableName === 'program' ? this._programTable : this._routineTable; - if (!(selector in table)) { - return {}; - } - - const res: { [variable: string]: TDataName } = {}; - Object.entries(table[selector]).forEach(([variable, { dataType }]) => { - res[variable] = dataType; - }); - return res; - } +/** + * A helper that returns names of all variables for a program or routine. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns a list of all variable names for a program or routine + */ +function _getTableVariableNames(selector: string, tableName: 'program' | 'routine'): string[] { + const table = tableName === 'program' ? _programTable : _routineTable; + return selector in table ? Object.keys(table[selector]) : []; +} +/** + * A helper that returns names of all variables for a program or routine with their data types. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of variable names and corresponding data type + */ +function _getTableVariableNamesWithTypes( + selector: string, + tableName: 'program' | 'routine' +): { [variable: string]: TDataName } { + const table = tableName === 'program' ? _programTable : _routineTable; + if (!(selector in table)) { + return {}; + } + + const res: { [variable: string]: TDataName } = {}; + Object.entries(table[selector]).forEach(([variable, { dataType }]) => { + res[variable] = dataType; + }); + return res; +} - /** - * A helper that returns names of all program or routine variables. - * @param tableName - `program` or `routine` - * @returns an object with key-value pairs of program or routine names and corresponding list of - * variable names - */ - private _getTableVariableNamesAll(tableName: 'program' | 'routine'): { - [key: string]: string[]; - } { - const table = tableName === 'program' ? this._programTable : this._routineTable; - const res: { [key: string]: string[] } = {}; - Object.entries(table).forEach(([key, variables]) => { - res[key] = Object.keys(variables); - }); - return res; - } +/** + * A helper that returns names of all program or routine variables. + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of program or routine names and corresponding list of + * variable names + */ +function _getTableVariableNamesAll(tableName: 'program' | 'routine'): { + [key: string]: string[]; +} { + const table = tableName === 'program' ? _programTable : _routineTable; + const res: { [key: string]: string[] } = {}; + Object.entries(table).forEach(([key, variables]) => { + res[key] = Object.keys(variables); + }); + return res; +} - /** - * A helper that returns names and types of all program or routine variables. - * @param tableName - `program` or `routine` - * @returns an object with key-value pairs of program or routine names and corresponding object - * with key-value pairs of variable names and data types. - */ - private _getTableVariableNamesWithTypesAll(tableName: 'program' | 'routine'): { - [key: string]: { [variable: string]: TDataName }; - } { - const table = tableName === 'program' ? this._programTable : this._routineTable; - const res: { [key: string]: { [variable: string]: TDataName } } = {}; - Object.entries(table).forEach(([key, variables]) => { - res[key] = {}; - Object.entries(variables).forEach(([variable, { dataType }]) => { - res[key][variable] = dataType; - }); +/** + * A helper that returns names and types of all program or routine variables. + * @param tableName - `program` or `routine` + * @returns an object with key-value pairs of program or routine names and corresponding object with + * key-value pairs of variable names and data types. + */ +function _getTableVariableNamesWithTypesAll(tableName: 'program' | 'routine'): { + [key: string]: { [variable: string]: TDataName }; +} { + const table = tableName === 'program' ? _programTable : _routineTable; + const res: { [key: string]: { [variable: string]: TDataName } } = {}; + Object.entries(table).forEach(([key, variables]) => { + res[key] = {}; + Object.entries(variables).forEach(([variable, { dataType }]) => { + res[key][variable] = dataType; }); - return res; - } + }); + return res; +} - /** - * Removes a variable for a program or routine if present. - * @param variable - name of the variable - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - */ - private _removeTableVariable( - variable: string, - selector: string, - tableName: 'program' | 'routine' - ): void { - const table = tableName === 'program' ? this._programTable : this._routineTable; - if (selector in table && variable in table[selector]) { - delete table[selector][variable]; - } +/** + * Removes a variable for a program or routine if present. + * @param variable - name of the variable + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ +function _removeTableVariable( + variable: string, + selector: string, + tableName: 'program' | 'routine' +): void { + const table = tableName === 'program' ? _programTable : _routineTable; + if (selector in table && variable in table[selector]) { + delete table[selector][variable]; } +} - public addProgramVariable( - variable: string, - dataType: 'number', - value: number, - program: string - ): void; - public addProgramVariable( - variable: string, - dataType: 'string', - value: string, - program: string - ): void; - public addProgramVariable( - variable: string, - dataType: 'boolean', - value: boolean, - program: string - ): void; - public addProgramVariable( - variable: string, - dataType: TDataName, - value: TData, - program: string - ): void { - this._addTableVariable(variable, dataType, value, program, 'program'); +/** + * A helper that clears all variables for a program or routine. + * @param selector - the key to be used for selection (project ID or routine ID) + * @param tableName - `program` or `routine` + */ +function _flushTableVariables(selector: string, tableName: 'program' | 'routine'): void { + const table = tableName === 'program' ? _programTable : _routineTable; + if (selector in table) { + delete table[selector]; } +} - public getProgramVariable(variable: string, program: string): IVariable | null { - return this._getTableVariable(variable, program, 'program'); - } +// -- public functions ----------------------------------------------------------------------------- - public getProgramVariableNames(program: string): string[] { - return this._getTableVariableNames(program, 'program'); - } +/** + * Adds a global variable. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + */ +export function addGlobalVariable(variable: string, dataType: 'number', value: number): void; +export function addGlobalVariable(variable: string, dataType: 'string', value: string): void; +export function addGlobalVariable(variable: string, dataType: 'boolean', value: boolean): void; +export function addGlobalVariable(variable: string, dataType: TDataName, value: TData): void { + _globalTable[variable] = { dataType, value }; +} - public getProgramVariableNamesWithTypes(program: string): { [variable: string]: TDataName } { - return this._getTableVariableNamesWithTypes(program, 'program'); - } +/** + * Fetches a global variable. + * @param variable - name of the variable + * @returns the variable entry if present, else `null` + */ +export function getGlobalVariable(variable: string): IVariable | null { + return variable in _globalTable ? _globalTable[variable] : null; +} - public getProgramVariableNamesAll(): { [program: string]: string[] } { - return this._getTableVariableNamesAll('program'); - } +/** + * Returns names of all global variables. + * @returns a list of all global variable names + */ +export function getGlobalVariableNames(): string[] { + return Object.keys(_globalTable); +} - public getProgramVariableNamesWithTypesAll(): { - [program: string]: { [variable: string]: TDataName }; - } { - return this._getTableVariableNamesWithTypesAll('program'); - } +/** + * Returns names of all global variables with their data types. + * @returns an object with key-value pairs of variable names and corresponding data type + */ +export function getGlobalVariableNamesWithTypes(): { [variable: string]: TDataName } { + const table: { [variable: string]: TDataName } = {}; + Object.entries(_globalTable).forEach(([variable, { dataType }]) => { + table[variable] = dataType; + }); + return table; +} - public removeProgramVariable(variable: string, program: string): void { - this._removeTableVariable(variable, program, 'program'); +/** + * Removes a global variable if present. + * @param variable - name of the variable + */ +export function removeGlobalVariable(variable: string): void { + if (variable in _globalTable) { + delete _globalTable[variable]; } +} - public addRoutineVariable( - variable: string, - dataType: 'number', - value: number, - routine: string - ): void; - public addRoutineVariable( - variable: string, - dataType: 'string', - value: string, - routine: string - ): void; - public addRoutineVariable( - variable: string, - dataType: 'boolean', - value: boolean, - routine: string - ): void; - public addRoutineVariable( - variable: string, - dataType: TDataName, - value: TData, - routine: string - ): void { - this._addTableVariable(variable, dataType, value, routine, 'routine'); - } +/** + * Adds a variable for a program. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param program - ID of the program + */ +export function addProgramVariable( + variable: string, + dataType: 'number', + value: number, + program: string +): void; +export function addProgramVariable( + variable: string, + dataType: 'string', + value: string, + program: string +): void; +export function addProgramVariable( + variable: string, + dataType: 'boolean', + value: boolean, + program: string +): void; +export function addProgramVariable( + variable: string, + dataType: TDataName, + value: TData, + program: string +): void { + _addTableVariable(variable, dataType, value, program, 'program'); +} - public getRoutineVariable(variable: string, routine: string): IVariable | null { - return this._getTableVariable(variable, routine, 'routine'); - } +/** + * Fetches a variable for a program. + * @param variable - name of the variable + * @param program - ID of the program + * @returns the variable entry if present, else `null` + */ +export function getProgramVariable(variable: string, program: string): IVariable | null { + return _getTableVariable(variable, program, 'program'); +} - public getRoutineVariableNames(routine: string): string[] { - return this._getTableVariableNames(routine, 'routine'); - } +/** + * Returns names of all variables for a program. + * @param program - ID of the program + * @returns a list of all variable names for a program + */ +export function getProgramVariableNames(program: string): string[] { + return _getTableVariableNames(program, 'program'); +} - public getRoutineVariableNamesWithTypes(routine: string): { [variable: string]: TDataName } { - return this._getTableVariableNamesWithTypes(routine, 'routine'); - } +/** + * Returns names of all variables for a program with their data types. + * @param program - ID of the program + * @returns an object with key-value pairs of variable names and corresponding data type + */ +export function getProgramVariableNamesWithTypes(program: string): { + [variable: string]: TDataName; +} { + return _getTableVariableNamesWithTypes(program, 'program'); +} - public getRoutineVariableNamesAll(): { [routine: string]: string[] } { - return this._getTableVariableNamesAll('routine'); - } +/** + * Returns names of all program variables. + * @returns an object with key-value pairs of program names and corresponding list of variable + * names + */ +export function getProgramVariableNamesAll(): { [program: string]: string[] } { + return _getTableVariableNamesAll('program'); +} - public getRoutineVariableNamesWithTypesAll(): { - [routine: string]: { [variable: string]: TDataName }; - } { - return this._getTableVariableNamesWithTypesAll('routine'); - } +/** + * Returns names and types of all program variables. + * @returns an object with key-value pairs of program names and corresponding object with key-value + * pairs of variable names and data types. + */ +export function getProgramVariableNamesWithTypesAll(): { + [program: string]: { [variable: string]: TDataName }; +} { + return _getTableVariableNamesWithTypesAll('program'); +} - public removeRoutineVariable(variable: string, routine: string): void { - this._removeTableVariable(variable, routine, 'routine'); - } +/** + * Removes a variable for a program if present. + * @param variable - name of the variable + * @param program - ID of the program + */ +export function removeProgramVariable(variable: string, program: string): void { + _removeTableVariable(variable, program, 'program'); +} - public flushGlobalVariables(): void { - this._globalTable = {}; - } +/** + * Adds a variable for a routine. If already present, overwrites it. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + * @param routine - ID of the routine + */ +export function addRoutineVariable( + variable: string, + dataType: 'number', + value: number, + routine: string +): void; +export function addRoutineVariable( + variable: string, + dataType: 'string', + value: string, + routine: string +): void; +export function addRoutineVariable( + variable: string, + dataType: 'boolean', + value: boolean, + routine: string +): void; +export function addRoutineVariable( + variable: string, + dataType: TDataName, + value: TData, + routine: string +): void { + _addTableVariable(variable, dataType, value, routine, 'routine'); +} - /** - * A helper that clears all variables for a program or routine. - * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - */ - private _flushTableVariables(selector: string, tableName: 'program' | 'routine'): void { - const table = tableName === 'program' ? this._programTable : this._routineTable; - if (selector in table) { - delete table[selector]; - } - } +/** + * Fetches a variable for a routine. + * @param variable - name of the variable + * @param routine - ID of the routine + * @returns the variable entry if present, else `null` + */ +export function getRoutineVariable(variable: string, routine: string): IVariable | null { + return _getTableVariable(variable, routine, 'routine'); +} - public flushProgramVariables(program: string): void { - this._flushTableVariables(program, 'program'); - } +/** + * Returns names of all variables for a routine. + * @param routine - ID of the routine + * @returns a list of all variable names for a routine + */ +export function getRoutineVariableNames(routine: string): string[] { + return _getTableVariableNames(routine, 'routine'); +} - public flushProgramVariablesAll(): void { - this._programTable = {}; - } +/** + * Returns names of all variables for a routine with their data types. + * @param routine - ID of the routine + * @returns an object with key-value pairs of variable names and corresponding data type + */ +export function getRoutineVariableNamesWithTypes(routine: string): { + [variable: string]: TDataName; +} { + return _getTableVariableNamesWithTypes(routine, 'routine'); +} - public flushRoutineVariables(routine: string): void { - this._flushTableVariables(routine, 'routine'); - } +/** + * Returns names of all routine variables. + * @returns an object with key-value pairs of routine names and corresponding list of variable + * names + */ +export function getRoutineVariableNamesAll(): { [routine: string]: string[] } { + return _getTableVariableNamesAll('routine'); +} - public flushRoutineVariablesAll(): void { - this._routineTable = {}; - } +/** + * Returns names and types of all routine variables. + * @returns an object with key-value pairs of routine names and corresponding object with key-value + * pairs of variable names and data types. + */ +export function getRoutineVariableNamesWithTypesAll(): { + [routine: string]: { [variable: string]: TDataName }; +} { + return _getTableVariableNamesWithTypesAll('routine'); +} - public flushAllVariables(): void { - this.flushGlobalVariables(); - this.flushProgramVariablesAll(); - this.flushRoutineVariablesAll(); - } +/** + * Removes a variable for a routine if present. + * @param variable - name of the variable + * @param routine - ID of the routine + */ +export function removeRoutineVariable(variable: string, routine: string): void { + _removeTableVariable(variable, routine, 'routine'); +} + +/** + * Clears all global variables. + */ +export function flushGlobalVariables(): void { + _globalTable = {}; +} + +/** + * Clears all variables for a program. + * @param program - 0 ID of the program + */ +export function flushProgramVariables(program: string): void { + _flushTableVariables(program, 'program'); +} + +/** + * Clears all program variables. + */ +export function flushProgramVariablesAll(): void { + _programTable = {}; +} + +/** + * Clears all variables for a routine. + * @param routine - ID of the routine + */ +export function flushRoutineVariables(routine: string): void { + _flushTableVariables(routine, 'routine'); +} + +/** + * Clears all routine variables. + */ +export function flushRoutineVariablesAll(): void { + _routineTable = {}; +} + +/** + * Clears all variable tables. + */ +export function flushAllVariables(): void { + flushGlobalVariables(); + flushProgramVariablesAll(); + flushRoutineVariablesAll(); } From 0142c3310664616811b946c46f1711d4b276013f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 19:55:59 +0530 Subject: [PATCH 104/176] syntax: [refactor] Create math operator elements with tests Definitions for classes: ElementOperatorMathPlus, ElementOperatorMathMinus, ElementOperatorMathTimes, ElementOperatorMathDivide, ElementOperatorMathModulus; unit tests --- .../operators/elementOperatorMath.spec.ts | 72 +++++++++++ .../program/operators/elementOperatorMath.ts | 114 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 src/syntax/elements/program/operators/elementOperatorMath.spec.ts create mode 100644 src/syntax/elements/program/operators/elementOperatorMath.ts diff --git a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts new file mode 100644 index 0000000..0cb131c --- /dev/null +++ b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts @@ -0,0 +1,72 @@ +import { + ElementOperatorMathPlus, + ElementOperatorMathMinus, + ElementOperatorMathTimes, + ElementOperatorMathDivide, + ElementOperatorMathModulus +} from './elementOperatorMath'; + +describe('Operator Elements', () => { + describe('class ElementOperatorPlus', () => { + const elementOperatorPlus = new ElementOperatorMathPlus(); + + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: 5, operand2: 15 }); + expect(elementOperatorPlus.value).toBe(20); + }); + + test('pass a number and a string as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: 5, operand2: 'foo' }); + expect(elementOperatorPlus.value).toBe('5foo'); + }); + + test('pass two strings as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: '5', operand2: '15' }); + expect(elementOperatorPlus.value).toBe('515'); + }); + }); + + describe('class ElementOperatorMinus', () => { + const elementOperatorMinus = new ElementOperatorMathMinus(); + + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorMinus.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorMinus.value).toBe(10); + elementOperatorMinus.evaluate({ operand1: 5, operand2: 15 }); + expect(elementOperatorMinus.value).toBe(-10); + }); + }); + + describe('class ElementOperatorTimes', () => { + const elementOperatorTime = new ElementOperatorMathTimes(); + + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorTime.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorTime.value).toBe(75); + elementOperatorTime.evaluate({ operand1: -5, operand2: 15 }); + expect(elementOperatorTime.value).toBe(-75); + }); + }); + + describe('class ElementOperatorDivide', () => { + const elementOperatorDivide = new ElementOperatorMathDivide(); + + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorDivide.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorDivide.value).toBe(3); + elementOperatorDivide.evaluate({ operand1: -5, operand2: 10 }); + expect(elementOperatorDivide.value).toBe(-0.5); + }); + }); + + describe('class ElementOperatorModulus', () => { + const elementOperatorModulus = new ElementOperatorMathModulus(); + + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorModulus.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorModulus.value).toBe(0); + elementOperatorModulus.evaluate({ operand1: 15, operand2: 7 }); + expect(elementOperatorModulus.value).toBe(1); + }); + }); +}); diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/program/operators/elementOperatorMath.ts new file mode 100644 index 0000000..2202164 --- /dev/null +++ b/src/syntax/elements/program/operators/elementOperatorMath.ts @@ -0,0 +1,114 @@ +import { TData, TDataName } from '@/@types/syntax/data'; +import { ElementExpression } from '../../core/elementArgument'; + +/** Type definition for the operator symbols */ +type TOperator = '+' | '-' | '*' | '/' | '%'; + +/** + * @virtual + * @class + * Generic class that defines a generic math operator element. + * + * @classdesc + * Math operator elements are expression elements that take two arguments (operands) and return the + * result of operation on those arguments. + */ +abstract class ElementOperatorMath extends ElementExpression { + private _operator: TOperator; + + constructor(name: string, returnType: TDataName[], operator: TOperator, initialValue: T) { + super(name, { operand1: returnType, operand2: returnType }, returnType, initialValue); + this._operator = operator; + } + + public evaluate(params: { operand1: number; operand2: number }): void; + public evaluate(params: { operand1: number | string; operand2: number | string }): void; + public evaluate(params: { operand1: TData; operand2: TData }): void { + const { operand1, operand2 } = params; + + switch (this._operator) { + case '+': + this._value = (typeof operand1 === 'string' || typeof operand2 === 'string' + ? `${operand1}${operand2}` + : (operand1 as number) + (operand2 as number)) as unknown as T; + break; + case '-': + this._value = ((operand1 as number) - (operand2 as number)) as unknown as T; + break; + case '*': + this._value = ((operand1 as number) * (operand2 as number)) as unknown as T; + break; + case '/': + this._value = ((operand1 as number) / (operand2 as number)) as unknown as T; + break; + case '%': + this._value = ((operand1 as number) % (operand2 as number)) as unknown as T; + break; + } + } +} + +/** + * @class + * Defines a plus math-operator element. + * + * @classdesc + * Performs addition on numbers and concatenation on strings. + */ +export class ElementOperatorMathPlus extends ElementOperatorMath { + constructor() { + super('operator-plus', ['number', 'string'], '+', 0); + } +} + +/** + * @class + * Defines a minus math-operator element. + * + * @classdesc + * Performs subtraction on numbers. + */ +export class ElementOperatorMathMinus extends ElementOperatorMath { + constructor() { + super('operator-minus', ['number'], '-', 0); + } +} + +/** + * @class + * Defines a times math-operator element. + * + * @classdesc + * Performs multiplication on numbers. + */ +export class ElementOperatorMathTimes extends ElementOperatorMath { + constructor() { + super('operator-times', ['number'], '*', 0); + } +} + +/** + * @class + * Defines a divide math-operator element. + * + * @classdesc + * Performs division on numbers. + */ +export class ElementOperatorMathDivide extends ElementOperatorMath { + constructor() { + super('operator-divide', ['number'], '/', 0); + } +} + +/** + * @class + * Defines a modulus math-operator element. + * + * @classdesc + * Performs modulus operation on numbers. + */ +export class ElementOperatorMathModulus extends ElementOperatorMath { + constructor() { + super('operator-modulus', ['number'], '%', 0); + } +} From aa7c4d21eeaf0e57039e7cd1e35af9b611cea8bf Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 20:30:10 +0530 Subject: [PATCH 105/176] syntax: [refactor] Add label as a field of syntax element --- src/@types/syntax/elementsCore.d.ts | 14 +- .../elements/core/elementArgument.spec.ts | 83 +++++------ src/syntax/elements/core/elementArgument.ts | 28 ++-- .../elements/core/elementInstruction.ts | 12 +- .../elements/core/elementSyntax.spec.ts | 133 +++++++++++------- src/syntax/elements/core/elementSyntax.ts | 13 ++ .../elements/program/boxes/elementBox.ts | 12 +- .../program/boxes/elementBoxIdentifier.ts | 28 ++-- .../program/operators/elementOperatorMath.ts | 3 +- .../elements/program/values/elementValue.ts | 16 +-- 10 files changed, 189 insertions(+), 153 deletions(-) diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index ab03a48..1a6c52f 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -4,6 +4,8 @@ import { TData, TDataName } from './data'; export interface IElementSyntax { /** Name of the syntax element. */ name: string; + /** Display name of the syntax element. */ + label: string; /** Kind (`Argument`, `Instruction`) of the syntax element. */ kind: 'Argument' | 'Instruction'; /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ @@ -14,6 +16,11 @@ export interface IElementSyntax { argLabels: string[]; /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }; + /** + * Updates the label of the syntax element. + * @param value - new label value + */ + updateLabel(value: string): void; } /** Generic interface for the class that implements an argument element. */ @@ -26,13 +33,6 @@ export interface IElementArgument extends IElementSyntax { /** Generic interface for the class that implements a data element. */ export interface IElementData extends IElementArgument { - /** The display name of the data element. */ - label: string; - /** - * Updates the label of the data element. - * @param value - new label value - */ - updateLabel(value: string): void; /** * Evalutates the logic of the data element (usually based on the label). */ diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts index 8c58575..0cf4055 100644 --- a/src/syntax/elements/core/elementArgument.spec.ts +++ b/src/syntax/elements/core/elementArgument.spec.ts @@ -5,6 +5,7 @@ class DummyElementArgument extends ElementArgument {} describe('class ElementArgument', () => { test('instantiate class of type number that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( + 'dummy', 'dummy', 'Data', {}, @@ -16,6 +17,7 @@ describe('class ElementArgument', () => { test('instantiate class of type string that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( + 'dummy', 'dummy', 'Data', {}, @@ -27,6 +29,7 @@ describe('class ElementArgument', () => { test('instantiate class of type boolean that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( + 'dummy', 'dummy', 'Data', {}, @@ -38,6 +41,7 @@ describe('class ElementArgument', () => { test('instantiate class of type number or string that extends ElementArgument and validate returnType', () => { const dummyElementArgument = new DummyElementArgument( + 'dummy', 'dummy', 'Data', {}, @@ -50,12 +54,12 @@ describe('class ElementArgument', () => { class DummyElementData extends ElementData { public evaluate(): void { - if (this._label === 'true' || this._label === 'false') { - this._value = (this._label === 'true') as unknown as T; - } else if (!isNaN(Number(this._label))) { - this._value = Number(this._label) as unknown as T; + if (this.label === 'true' || this.label === 'false') { + this._value = (this.label === 'true') as unknown as T; + } else if (!isNaN(Number(this.label))) { + this._value = Number(this.label) as unknown as T; } else { - this._value = this._label as unknown as T; + this._value = this.label as unknown as T; } } } @@ -64,102 +68,78 @@ describe('class ElementData', () => { describe('instantiation', () => { test('instantiate class of type number that extends ElementData and validate API', () => { const dummyElementDataNumber1 = new DummyElementData( + 'dummy', 'dummy', {}, ['number'], - 0, - 'myData' + 0 ); expect(dummyElementDataNumber1.value).toBe(0); - expect(dummyElementDataNumber1.label).toBe('myData'); const dummyElementDataNumber2 = new DummyElementData( + 'dummy', 'dummy', {}, ['number'], - 5, - 'myData' + 5 ); expect(dummyElementDataNumber2.value).toBe(5); - expect(dummyElementDataNumber1.label).toBe('myData'); const dummyElementDataNumber3 = new DummyElementData( + 'dummy', 'dummy', {}, ['number'], - -5, - 'myData' + -5 ); expect(dummyElementDataNumber3.value).toBe(-5); - expect(dummyElementDataNumber1.label).toBe('myData'); }); test('instantiate class of type string that extends ElementData and validate API', () => { const dummyElementDataString1 = new DummyElementData( + 'dummy', 'dummy', {}, ['string'], - 'foo', - 'myData' + 'foo' ); expect(dummyElementDataString1.value).toBe('foo'); - expect(dummyElementDataString1.label).toBe('myData'); const dummyElementDataString2 = new DummyElementData( + 'dummy', 'dummy', {}, ['string'], - '', - 'myData' + '' ); expect(dummyElementDataString2.value).toBe(''); - expect(dummyElementDataString1.label).toBe('myData'); }); test('instantiate class of type boolean that extends ElementData and validate API', () => { const dummyElementDataBoolean1 = new DummyElementData( + 'dummy', 'dummy', {}, ['boolean'], - true, - 'myData' + true ); expect(dummyElementDataBoolean1.value).toBe(true); - expect(dummyElementDataBoolean1.label).toBe('myData'); const dummyElementDataBoolean2 = new DummyElementData( + 'dummy', 'dummy', {}, ['boolean'], - false, - 'myData' + false ); expect(dummyElementDataBoolean2.value).toBe(false); - expect(dummyElementDataBoolean1.label).toBe('myData'); - }); - }); - - describe('update label', () => { - test('update value in instance of class that extends ElementData and validate', () => { - const dummyElementDataNumber = new DummyElementData( - 'dummy', - {}, - ['number'], - 0, - 'myData' - ); - expect(dummyElementDataNumber.label).toBe('myData'); - dummyElementDataNumber.updateLabel('yourData'); - expect(dummyElementDataNumber.label).toBe('yourData'); - dummyElementDataNumber.updateLabel('data'); - expect(dummyElementDataNumber.label).toBe('data'); }); }); describe('overwriting', () => { test('evaluate instance of class of type number that extends ElementData and validate', () => { const dummyElementDataNumber = new DummyElementData( + 'dummy', 'dummy', {}, ['number'], - 0, - 'myData' + 0 ); expect(dummyElementDataNumber.value).toBe(0); dummyElementDataNumber.updateLabel('5'); @@ -170,11 +150,11 @@ describe('class ElementData', () => { test('evaluate instance of class of type string that extends ElementData and validate', () => { const dummyElementDataString = new DummyElementData( + 'dummy', 'dummy', {}, ['string'], - '', - 'myData' + '' ); expect(dummyElementDataString.value).toBe(''); dummyElementDataString.updateLabel('foo'); @@ -185,11 +165,11 @@ describe('class ElementData', () => { test('evaluate instance of class of type boolean that extends ElementData and validate', () => { const dummyElementDataBoolean = new DummyElementData( + 'dummy', 'dummy', {}, ['boolean'], - true, - 'myData' + true ); expect(dummyElementDataBoolean.value).toBe(true); dummyElementDataBoolean.updateLabel('false'); @@ -229,6 +209,7 @@ class DummyElementExpressionMixed extends ElementExpression { describe('class ElementExpression', () => { test('evaluate and validate instance of class that inherits ElementExpression and returns number', () => { const dummyElementExpressionNumber = new DummyElementExpressionNumber( + 'dummy', 'dummy', {}, ['number'], @@ -240,6 +221,7 @@ describe('class ElementExpression', () => { test('evaluate and validate instance of class that inherits ElementExpression and returns string', () => { const dummyElementExpressionString = new DummyElementExpressionString( + 'dummy', 'dummy', {}, ['string'], @@ -251,6 +233,7 @@ describe('class ElementExpression', () => { test('evaluate and validate instance of class that inherits ElementExpression and returns boolean', () => { const dummyElementExpressionNumberBoolean = new DummyElementExpressionBoolean( + 'dummy', 'dummy', {}, ['boolean'], @@ -262,6 +245,7 @@ describe('class ElementExpression', () => { test('evaluate and validate instance of class that inherits ElementExpression and returns string or number', () => { const dummyElementExpressionNumberMixed1 = new DummyElementExpressionMixed( + 'dummy', 'dummy', {}, ['string', 'number'], @@ -270,6 +254,7 @@ describe('class ElementExpression', () => { dummyElementExpressionNumberMixed1.evaluate({ op1: 'foobar', op2: 5 }); expect(dummyElementExpressionNumberMixed1.value).toBe('foobar'); const dummyElementExpressionNumberMixed2 = new DummyElementExpressionMixed( + 'dummy', 'dummy', {}, ['string', 'number'], diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 96cb28b..50d1040 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -21,6 +21,8 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme constructor( /** Name of the argument element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** Type (`Data`, `Expression`) of the argument element. */ type: 'Data' | 'Expression', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ @@ -30,7 +32,7 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme /** Initial return value of the argument. */ initialValue: T ) { - super(name, 'Argument', type, argMap); + super(name, label, 'Argument', type, argMap); this._returnType = returnType; this._value = initialValue; @@ -54,31 +56,19 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme * Data elements return a stored value. */ export abstract class ElementData extends ElementArgument implements IElementData { - /** Stores the label of the data element. */ - protected _label: string; - constructor( /** Name of the data element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, /** Return types of the value returned by the argument element. */ returnType: TDataName[], /** Initial return value of the argument. */ - initialValue: T, - /** Initial label of the data element. */ - initialLabel: string + initialValue: T ) { - super(name, 'Data', argMap, returnType, initialValue); - this._label = initialLabel; - } - - public get label(): string { - return this._label; - } - - public updateLabel(value: string): void { - this._label = value; + super(name, label, 'Data', argMap, returnType, initialValue); } public abstract evaluate(): void; @@ -100,6 +90,8 @@ export abstract class ElementExpression constructor( /** Name of the expression element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, /** Return types of the value returned by the argument element. */ @@ -107,7 +99,7 @@ export abstract class ElementExpression /** Initial return value of the argument. */ initialValue: T ) { - super(name, 'Expression', argMap, returnType, initialValue); + super(name, label, 'Expression', argMap, returnType, initialValue); } public abstract evaluate(params: { [key: string]: TData }): void; diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index a996a0d..f8d759b 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -19,12 +19,14 @@ export abstract class ElementInstruction extends ElementSyntax implements IEleme constructor( /** Name of the instruction element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** Type (`Statement`, `Block`) of the instruction element. */ type: 'Statement' | 'Block', /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { - super(name, 'Instruction', type, argMap); + super(name, label, 'Instruction', type, argMap); } public abstract onVisit(params: { [key: string]: TData }): void; @@ -42,10 +44,12 @@ export abstract class ElementStatement extends ElementInstruction implements IEl constructor( /** Name of the statement element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { - super(name, 'Statement', argMap); + super(name, label, 'Statement', argMap); } } @@ -63,10 +67,12 @@ export abstract class ElementBlock extends ElementInstruction implements IElemen constructor( /** Name of the block element. */ name: string, + /** Display name of the instruction element. */ + label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { - super(name, 'Block', argMap); + super(name, label, 'Block', argMap); } public abstract onInnerVisit(): void; diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 47567ff..76b8ced 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -4,66 +4,105 @@ import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { constructor( name: string, + label: string, kind: 'Argument' | 'Instruction', type: 'Data' | 'Expression' | 'Statement' | 'Block', argMap: { [key: string]: TDataName[] } ) { - super(name, kind, type, argMap); + super(name, label, kind, type, argMap); } } describe('class ElementSyntax', () => { - test('instantiate class that extends ElementSyntax with 0 arguments and validate API', () => { - let dummyElementSyntax: DummyElementSyntax; + describe('instantiation', () => { + test('instantiate class that extends ElementSyntax with 0 arguments and validate API', () => { + let dummyElementSyntax: DummyElementSyntax; - dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Data', {}); - expect(dummyElementSyntax.name).toBe('dummy'); - expect(dummyElementSyntax.kind).toBe('Argument'); - expect(dummyElementSyntax.type).toBe('Data'); - expect(dummyElementSyntax.argCount).toBe(0); - expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); + dummyElementSyntax = new DummyElementSyntax('dummy', 'dummy', 'Argument', 'Data', {}); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.label).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Argument'); + expect(dummyElementSyntax.type).toBe('Data'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); - dummyElementSyntax = new DummyElementSyntax('dummy', 'Argument', 'Expression', {}); - expect(dummyElementSyntax.name).toBe('dummy'); - expect(dummyElementSyntax.kind).toBe('Argument'); - expect(dummyElementSyntax.type).toBe('Expression'); - expect(dummyElementSyntax.argCount).toBe(0); - expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); + dummyElementSyntax = new DummyElementSyntax( + 'dummy', + 'dummy', + 'Argument', + 'Expression', + {} + ); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.label).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Argument'); + expect(dummyElementSyntax.type).toBe('Expression'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); - dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Statement', {}); - expect(dummyElementSyntax.name).toBe('dummy'); - expect(dummyElementSyntax.kind).toBe('Instruction'); - expect(dummyElementSyntax.type).toBe('Statement'); - expect(dummyElementSyntax.argCount).toBe(0); - expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); + dummyElementSyntax = new DummyElementSyntax( + 'dummy', + 'dummy', + 'Instruction', + 'Statement', + {} + ); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.label).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Statement'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); - dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Block', {}); - expect(dummyElementSyntax.name).toBe('dummy'); - expect(dummyElementSyntax.kind).toBe('Instruction'); - expect(dummyElementSyntax.type).toBe('Block'); - expect(dummyElementSyntax.argCount).toBe(0); - expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); - }); - - test('instantiate class that extends ElementSyntax with 3 arguments and validate API', () => { - const dummyElementSyntax = new DummyElementSyntax('dummy', 'Instruction', 'Block', { - arg1: ['number'], - arg2: ['string', 'number'], - arg3: ['boolean'] + dummyElementSyntax = new DummyElementSyntax( + 'dummy', + 'dummy', + 'Instruction', + 'Block', + {} + ); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.label).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Block'); + expect(dummyElementSyntax.argCount).toBe(0); + expect(dummyElementSyntax.argLabels).toEqual([]); + expect(dummyElementSyntax.argMap).toEqual({}); }); - expect(dummyElementSyntax.name).toBe('dummy'); - expect(dummyElementSyntax.kind).toBe('Instruction'); - expect(dummyElementSyntax.type).toBe('Block'); - expect(dummyElementSyntax.argCount).toBe(3); - expect(dummyElementSyntax.argLabels).toEqual(['arg1', 'arg2', 'arg3']); - expect(dummyElementSyntax.argMap).toEqual({ - arg1: ['number'], - arg2: ['string', 'number'], - arg3: ['boolean'] + + test('instantiate class that extends ElementSyntax with 3 arguments and validate API', () => { + const dummyElementSyntax = new DummyElementSyntax( + 'dummy', + 'dummy', + 'Instruction', + 'Block', + { + arg1: ['number'], + arg2: ['string', 'number'], + arg3: ['boolean'] + } + ); + expect(dummyElementSyntax.name).toBe('dummy'); + expect(dummyElementSyntax.label).toBe('dummy'); + expect(dummyElementSyntax.kind).toBe('Instruction'); + expect(dummyElementSyntax.type).toBe('Block'); + expect(dummyElementSyntax.argCount).toBe(3); + expect(dummyElementSyntax.argLabels).toEqual(['arg1', 'arg2', 'arg3']); + expect(dummyElementSyntax.argMap).toEqual({ + arg1: ['number'], + arg2: ['string', 'number'], + arg3: ['boolean'] + }); }); }); + + test('update label and verify', () => { + const dummyElementSyntax = new DummyElementSyntax('dummy', 'dummy', 'Argument', 'Data', {}); + expect(dummyElementSyntax.label).toBe('dummy'); + dummyElementSyntax.updateLabel('dummyElement'); + expect(dummyElementSyntax.label).toBe('dummyElement'); + }); }); diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 57fbbef..0273fb0 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -13,6 +13,8 @@ import { TDataName } from '@/@types/syntax/data'; export abstract class ElementSyntax implements IElementSyntax { /** Stores the name of the syntax element. */ private _name: string; + /** Stores the display name of the syntax element. */ + private _label: string; /** Stores the kind of the syntax element. */ private _kind: 'Argument' | 'Instruction'; /** Stores the type of the syntax element. */ @@ -27,6 +29,8 @@ export abstract class ElementSyntax implements IElementSyntax { constructor( /** Name of the syntax element. */ name: string, + /** Display of the syntax element. */ + label: string, /** Kind (`Argument`, `Instruction`) of the syntax element. */ kind: 'Argument' | 'Instruction', /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ @@ -35,6 +39,7 @@ export abstract class ElementSyntax implements IElementSyntax { argMap: { [key: string]: TDataName[] } ) { this._name = name; + this._label = name; this._kind = kind; this._type = type; this._argMap = argMap; @@ -46,6 +51,10 @@ export abstract class ElementSyntax implements IElementSyntax { return this._name; } + public get label(): string { + return this._label; + } + public get kind(): 'Argument' | 'Instruction' { return this._kind; } @@ -65,4 +74,8 @@ export abstract class ElementSyntax implements IElementSyntax { public get argMap(): { [key: string]: TDataName[] } { return this._argMap; } + + public updateLabel(value: string): void { + this._label = value; + } } diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts index bce8161..e6d491d 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -11,8 +11,8 @@ import { addGlobalVariable } from '../../../symbol-table/symbolTable'; * Box elements add (declare) variables to the symbol table. */ abstract class ElementBox extends ElementStatement { - constructor(name: string, types: TDataName[]) { - super(name, { + constructor(name: string, label: string, types: TDataName[]) { + super(name, label, { name: ['string'], value: types }); @@ -42,7 +42,7 @@ abstract class ElementBox extends ElementStatement { */ export class ElementBoxGeneric extends ElementBox { constructor() { - super('box-generic', ['boolean', 'number', 'string']); + super('box-generic', 'box', ['boolean', 'number', 'string']); } /** @override */ @@ -57,7 +57,7 @@ export class ElementBoxGeneric extends ElementBox { */ export class ElementBoxBoolean extends ElementBox { constructor() { - super('box-boolean', ['boolean']); + super('box-boolean', 'box (boolean)', ['boolean']); } /** @override */ @@ -72,7 +72,7 @@ export class ElementBoxBoolean extends ElementBox { */ export class ElementBoxNumber extends ElementBox { constructor() { - super('box-number', ['number']); + super('box-number', 'box (number)', ['number']); } /** @override */ @@ -87,7 +87,7 @@ export class ElementBoxNumber extends ElementBox { */ export class ElementBoxString extends ElementBox { constructor() { - super('box-string', ['string']); + super('box-string', 'box (string)', ['string']); } /** @override */ diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts index fc312ab..df1f58f 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -11,17 +11,17 @@ import { getGlobalVariable } from '../../../symbol-table/symbolTable'; * @throws `Error` (ItemNotFoundError) */ abstract class ElementBoxIdentifier extends ElementData { - constructor(name: string, returnType: ['boolean'], initialValue: boolean, initialLabel: string); - constructor(name: string, returnType: ['number'], initialValue: number, initialLabel: string); - constructor(name: string, returnType: ['string'], initialValue: string, initialLabel: string); + constructor(name: string, label: string, returnType: ['boolean'], initialValue: boolean); + constructor(name: string, label: string, returnType: ['number'], initialValue: number); + constructor(name: string, label: string, returnType: ['string'], initialValue: string); constructor( name: string, + label: string, returnType: ['boolean', 'number', 'string'], - initialValue: TData, - initialLabel: string + initialValue: TData ); - constructor(name: string, returnType: TDataName[], initialValue: T, initialLabel: string) { - super(name, {}, returnType, initialValue, initialLabel); + constructor(name: string, label: string, returnType: TDataName[], initialValue: T) { + super(name, label, {}, returnType, initialValue); } /** @override */ @@ -29,7 +29,7 @@ abstract class ElementBoxIdentifier extends ElementData { const expectedType = typeof this._value as TDataName; try { - const { dataType, value } = getGlobalVariable(this._label)!; + const { dataType, value } = getGlobalVariable(this.label)!; if (this.returnType.length > 1) { this._value = value as unknown as T; } else if (dataType === expectedType) { @@ -39,10 +39,10 @@ abstract class ElementBoxIdentifier extends ElementData { } } catch (e) { if (this.returnType.length > 1) { - throw Error(`ItemNotFoundError: box "${this._label}" does not exist`); + throw Error(`ItemNotFoundError: box "${this.label}" does not exist`); } else { throw Error( - `ItemNotFoundError: box "${this._label}" of type "${expectedType}" does not exist` + `ItemNotFoundError: box "${this.label}" of type "${expectedType}" does not exist` ); } } @@ -56,7 +56,7 @@ abstract class ElementBoxIdentifier extends ElementData { */ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { constructor() { - super('boxidentifier-generic', ['boolean', 'number', 'string'], '', ''); + super('boxidentifier-generic', '', ['boolean', 'number', 'string'], ''); } } @@ -67,7 +67,7 @@ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { */ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { constructor() { - super('boxidentifier-boolean', ['boolean'], true, ''); + super('boxidentifier-boolean', '', ['boolean'], true); } } @@ -78,7 +78,7 @@ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { */ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { constructor() { - super('boxidentifier-number', ['number'], 0, ''); + super('boxidentifier-number', '', ['number'], 0); } } @@ -89,6 +89,6 @@ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { */ export class ElementBoxIdentifierString extends ElementBoxIdentifier { constructor() { - super('boxidentifier-string', ['string'], '', ''); + super('boxidentifier-string', '', ['string'], ''); } } diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/program/operators/elementOperatorMath.ts index 2202164..fdd65c5 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.ts @@ -17,8 +17,9 @@ abstract class ElementOperatorMath extends ElementExpression { private _operator: TOperator; constructor(name: string, returnType: TDataName[], operator: TOperator, initialValue: T) { - super(name, { operand1: returnType, operand2: returnType }, returnType, initialValue); + super(name, '', { operand1: returnType, operand2: returnType }, returnType, initialValue); this._operator = operator; + this.updateLabel(this._operator); } public evaluate(params: { operand1: number; operand2: number }): void; diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts index a03cbcb..8dd740c 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -14,29 +14,29 @@ abstract class ElementValue extends ElementData { constructor(name: string, returnType: ['string'], initialValue: string); constructor(name: string, returnType: ['boolean'], initialValue: boolean); constructor(name: string, returnType: [TDataName], initialValue: T) { - super(name, {}, returnType, initialValue, ''); + super(name, '', {}, returnType, initialValue); } /** @throws `Error` (TypeMismatchError) */ public evaluate(): void { switch (this.returnType[0]) { case 'boolean': - if (this._label === 'true' || this._label === 'false') { - this._value = (this._label === 'true') as unknown as T; + if (this.label === 'true' || this.label === 'false') { + this._value = (this.label === 'true') as unknown as T; } else { - throw Error(`TypeMismatchError: ${this._label} is not of type "boolean"`); + throw Error(`TypeMismatchError: ${this.label} is not of type "boolean"`); } break; case 'number': - if (!isNaN(Number(this._label))) { - this._value = Number(this._label) as unknown as T; + if (!isNaN(Number(this.label))) { + this._value = Number(this.label) as unknown as T; } else { - throw Error(`TypeMismatchError: ${this._label} is not of type "number"`); + throw Error(`TypeMismatchError: ${this.label} is not of type "number"`); } break; case 'string': default: - this._value = this._label as unknown as T; + this._value = this.label as unknown as T; } } } From ef45c7e65eb2a4692852524324d3f7b16615c169 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 22:23:01 +0530 Subject: [PATCH 106/176] elements: [refactor] Add name field to element constructor Don't hardcode name into element; name will be provided from element specification --- src/@types/syntax/elementsCore.d.ts | 3 ++- src/syntax/elements/core/elementArgument.ts | 7 ++--- .../elements/core/elementInstruction.ts | 7 ++--- .../elements/core/elementSyntax.spec.ts | 3 ++- src/syntax/elements/core/elementSyntax.ts | 7 ++--- .../elements/program/boxes/elementBox.spec.ts | 14 +++++----- .../elements/program/boxes/elementBox.ts | 19 ++++++------- .../boxes/elementBoxIdentifier.spec.ts | 12 ++++++--- .../program/boxes/elementBoxIdentifier.ts | 27 ++++++++++--------- .../operators/elementOperatorMath.spec.ts | 10 +++---- .../program/operators/elementOperatorMath.ts | 23 ++++++++-------- .../program/values/elementValue.spec.ts | 6 ++--- .../elements/program/values/elementValue.ts | 21 ++++++++------- 13 files changed, 86 insertions(+), 73 deletions(-) diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index 1a6c52f..e2ff8b3 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -1,9 +1,10 @@ import { TData, TDataName } from './data'; +import { TElementName } from './elementSpecification'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { /** Name of the syntax element. */ - name: string; + name: TElementName; /** Display name of the syntax element. */ label: string; /** Kind (`Argument`, `Instruction`) of the syntax element. */ diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 50d1040..36788e3 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,6 +1,7 @@ import { IElementArgument, IElementExpression, IElementData } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; +import { TElementName } from '@/@types/syntax/elementSpecification'; /** * @virtual @@ -20,7 +21,7 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme constructor( /** Name of the argument element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** Type (`Data`, `Expression`) of the argument element. */ @@ -58,7 +59,7 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme export abstract class ElementData extends ElementArgument implements IElementData { constructor( /** Name of the data element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ @@ -89,7 +90,7 @@ export abstract class ElementExpression { constructor( /** Name of the expression element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index f8d759b..a1658e2 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -5,6 +5,7 @@ import { } from '@/@types/syntax/elementsCore'; import { TData, TDataName } from '@/@types/syntax/data'; import { ElementSyntax } from './elementSyntax'; +import { TElementName } from '@/@types/syntax/elementSpecification'; /** * @virtual @@ -18,7 +19,7 @@ import { ElementSyntax } from './elementSyntax'; export abstract class ElementInstruction extends ElementSyntax implements IElementInstruction { constructor( /** Name of the instruction element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** Type (`Statement`, `Block`) of the instruction element. */ @@ -43,7 +44,7 @@ export abstract class ElementInstruction extends ElementSyntax implements IEleme export abstract class ElementStatement extends ElementInstruction implements IElementStatement { constructor( /** Name of the statement element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ @@ -66,7 +67,7 @@ export abstract class ElementStatement extends ElementInstruction implements IEl export abstract class ElementBlock extends ElementInstruction implements IElementBlock { constructor( /** Name of the block element. */ - name: string, + name: TElementName, /** Display name of the instruction element. */ label: string, /** An object describing the type specification of each argument as a `argName: type[]` pair. */ diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 76b8ced..efff644 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -1,9 +1,10 @@ import { TDataName } from '@/@types/syntax/data'; +import { TElementName } from '@/@types/syntax/elementSpecification'; import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { constructor( - name: string, + name: TElementName, label: string, kind: 'Argument' | 'Instruction', type: 'Data' | 'Expression' | 'Statement' | 'Block', diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 0273fb0..7a3ee14 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -1,5 +1,6 @@ import { IElementSyntax } from '@/@types/syntax/elementsCore'; import { TDataName } from '@/@types/syntax/data'; +import { TElementName } from '@/@types/syntax/elementSpecification'; /** * @virtual @@ -12,7 +13,7 @@ import { TDataName } from '@/@types/syntax/data'; */ export abstract class ElementSyntax implements IElementSyntax { /** Stores the name of the syntax element. */ - private _name: string; + private _name: TElementName; /** Stores the display name of the syntax element. */ private _label: string; /** Stores the kind of the syntax element. */ @@ -28,7 +29,7 @@ export abstract class ElementSyntax implements IElementSyntax { constructor( /** Name of the syntax element. */ - name: string, + name: TElementName, /** Display of the syntax element. */ label: string, /** Kind (`Argument`, `Instruction`) of the syntax element. */ @@ -47,7 +48,7 @@ export abstract class ElementSyntax implements IElementSyntax { this._argCount = this.argLabels.length; } - public get name(): string { + public get name(): TElementName { return this._name; } diff --git a/src/syntax/elements/program/boxes/elementBox.spec.ts b/src/syntax/elements/program/boxes/elementBox.spec.ts index 4646175..8da5452 100644 --- a/src/syntax/elements/program/boxes/elementBox.spec.ts +++ b/src/syntax/elements/program/boxes/elementBox.spec.ts @@ -7,7 +7,7 @@ import { import { getGlobalVariable } from '../../../symbol-table/symbolTable'; describe('Box Elements', () => { - const elementBox = new ElementBoxGeneric(); + const elementBox = new ElementBoxGeneric('box-generic'); test('instantiate and verify instance variables', () => { expect(elementBox.name).toBe('box-generic'); @@ -21,7 +21,7 @@ describe('Box Elements', () => { let elementBoxBoolean: ElementBoxBoolean; test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxBoolean = new ElementBoxBoolean(); + elementBoxBoolean = new ElementBoxBoolean('box-boolean'); elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }); expect(getGlobalVariable('booleanBox')).toEqual({ dataType: 'boolean', @@ -34,7 +34,7 @@ describe('Box Elements', () => { let elementBoxNumber: ElementBoxNumber; test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxNumber = new ElementBoxNumber(); + elementBoxNumber = new ElementBoxNumber('box-number'); elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }); expect(getGlobalVariable('numberBox')).toEqual({ dataType: 'number', @@ -47,7 +47,7 @@ describe('Box Elements', () => { let elementBoxString: ElementBoxString; test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxString = new ElementBoxString(); + elementBoxString = new ElementBoxString('box-string'); elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }); expect(getGlobalVariable('stringBox')).toEqual({ dataType: 'string', @@ -58,7 +58,7 @@ describe('Box Elements', () => { describe('class ElementBoxGeneric', () => { test('execute with boolean value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric(); + const elementBoxGeneric = new ElementBoxGeneric('box-generic'); elementBoxGeneric.onVisit({ name: 'genericBox', value: true }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'boolean', @@ -67,7 +67,7 @@ describe('Box Elements', () => { }); test('execute with number value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric(); + const elementBoxGeneric = new ElementBoxGeneric('box-generic'); elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'number', @@ -76,7 +76,7 @@ describe('Box Elements', () => { }); test('execute with string value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric(); + const elementBoxGeneric = new ElementBoxGeneric('box-generic'); elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'string', diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts index e6d491d..ee8015a 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -1,6 +1,7 @@ import { TData, TDataName } from '@/@types/syntax/data'; import { ElementStatement } from '../../core/elementInstruction'; import { addGlobalVariable } from '../../../symbol-table/symbolTable'; +import { TElementName } from '@/@types/syntax/elementSpecification'; /** * @virtual @@ -11,7 +12,7 @@ import { addGlobalVariable } from '../../../symbol-table/symbolTable'; * Box elements add (declare) variables to the symbol table. */ abstract class ElementBox extends ElementStatement { - constructor(name: string, label: string, types: TDataName[]) { + constructor(name: TElementName, label: string, types: TDataName[]) { super(name, label, { name: ['string'], value: types @@ -41,8 +42,8 @@ abstract class ElementBox extends ElementStatement { * Defines a box element that declares a variable of any data type. */ export class ElementBoxGeneric extends ElementBox { - constructor() { - super('box-generic', 'box', ['boolean', 'number', 'string']); + constructor(name: TElementName) { + super(name, 'box', ['boolean', 'number', 'string']); } /** @override */ @@ -56,8 +57,8 @@ export class ElementBoxGeneric extends ElementBox { * Defines a box element that declares a variable of boolean type. */ export class ElementBoxBoolean extends ElementBox { - constructor() { - super('box-boolean', 'box (boolean)', ['boolean']); + constructor(name: TElementName) { + super(name, 'box (boolean)', ['boolean']); } /** @override */ @@ -71,8 +72,8 @@ export class ElementBoxBoolean extends ElementBox { * Defines a box element that declares a variable of number type. */ export class ElementBoxNumber extends ElementBox { - constructor() { - super('box-number', 'box (number)', ['number']); + constructor(name: TElementName) { + super(name, 'box (number)', ['number']); } /** @override */ @@ -86,8 +87,8 @@ export class ElementBoxNumber extends ElementBox { * Defines a box element that declares a variable of string type. */ export class ElementBoxString extends ElementBox { - constructor() { - super('box-string', 'box (string)', ['string']); + constructor(name: TElementName) { + super(name, 'box (string)', ['string']); } /** @override */ diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts index 0c99111..7082ada 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts @@ -12,7 +12,9 @@ addGlobalVariable('myVar3', 'string', 'foo'); describe('Box Identifier Elements', () => { describe('class ElementBoxIdentifierGeneric', () => { - const elementBoxIdentifierGeneric = new ElementBoxIdentifierGeneric(); + const elementBoxIdentifierGeneric = new ElementBoxIdentifierGeneric( + 'boxidentifier-generic' + ); test('update label to name with boolean variable in symbol table and verify evaluation', () => { elementBoxIdentifierGeneric.updateLabel('myVar1'); @@ -41,7 +43,9 @@ describe('Box Identifier Elements', () => { }); describe('class ElementBoxIdentifierBoolean', () => { - const elementBoxIdentifierBoolean = new ElementBoxIdentifierBoolean(); + const elementBoxIdentifierBoolean = new ElementBoxIdentifierBoolean( + 'boxidentifier-boolean' + ); test('update label to name with boolean variable in symbol table and verify evaluation', () => { elementBoxIdentifierBoolean.updateLabel('myVar1'); @@ -58,7 +62,7 @@ describe('Box Identifier Elements', () => { }); describe('class ElementBoxIdentifierNumber', () => { - const elementBoxIdentifierNumber = new ElementBoxIdentifierNumber(); + const elementBoxIdentifierNumber = new ElementBoxIdentifierNumber('boxidentifier-number'); test('update label to name with number variable in symbol table and verify evaluation', () => { elementBoxIdentifierNumber.updateLabel('myVar2'); @@ -75,7 +79,7 @@ describe('Box Identifier Elements', () => { }); describe('class ElementBoxIdentifierString', () => { - const elementBoxIdentifierString = new ElementBoxIdentifierString(); + const elementBoxIdentifierString = new ElementBoxIdentifierString('boxidentifier-string'); test('update label to name with string variable in symbol table and verify evaluation', () => { elementBoxIdentifierString.updateLabel('myVar3'); diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts index df1f58f..0a23618 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -1,6 +1,7 @@ import { TData, TDataName } from '@/@types/syntax/data'; import { ElementData } from '../../core/elementArgument'; import { getGlobalVariable } from '../../../symbol-table/symbolTable'; +import { TElementName } from '@/@types/syntax/elementSpecification'; /** * @virtual @@ -11,16 +12,16 @@ import { getGlobalVariable } from '../../../symbol-table/symbolTable'; * @throws `Error` (ItemNotFoundError) */ abstract class ElementBoxIdentifier extends ElementData { - constructor(name: string, label: string, returnType: ['boolean'], initialValue: boolean); - constructor(name: string, label: string, returnType: ['number'], initialValue: number); - constructor(name: string, label: string, returnType: ['string'], initialValue: string); + constructor(name: TElementName, label: string, returnType: ['boolean'], initialValue: boolean); + constructor(name: TElementName, label: string, returnType: ['number'], initialValue: number); + constructor(name: TElementName, label: string, returnType: ['string'], initialValue: string); constructor( - name: string, + name: TElementName, label: string, returnType: ['boolean', 'number', 'string'], initialValue: TData ); - constructor(name: string, label: string, returnType: TDataName[], initialValue: T) { + constructor(name: TElementName, label: string, returnType: TDataName[], initialValue: T) { super(name, label, {}, returnType, initialValue); } @@ -55,8 +56,8 @@ abstract class ElementBoxIdentifier extends ElementData { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { - constructor() { - super('boxidentifier-generic', '', ['boolean', 'number', 'string'], ''); + constructor(name: TElementName) { + super(name, '', ['boolean', 'number', 'string'], ''); } } @@ -66,8 +67,8 @@ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { - constructor() { - super('boxidentifier-boolean', '', ['boolean'], true); + constructor(name: TElementName) { + super(name, '', ['boolean'], true); } } @@ -77,8 +78,8 @@ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { - constructor() { - super('boxidentifier-number', '', ['number'], 0); + constructor(name: TElementName) { + super(name, '', ['number'], 0); } } @@ -88,7 +89,7 @@ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierString extends ElementBoxIdentifier { - constructor() { - super('boxidentifier-string', '', ['string'], ''); + constructor(name: TElementName) { + super(name, '', ['string'], ''); } } diff --git a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts index 0cb131c..c1b1c31 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts @@ -8,7 +8,7 @@ import { describe('Operator Elements', () => { describe('class ElementOperatorPlus', () => { - const elementOperatorPlus = new ElementOperatorMathPlus(); + const elementOperatorPlus = new ElementOperatorMathPlus('operator-math-plus'); test('pass two numbers as parameters to evaluate and verify result', () => { elementOperatorPlus.evaluate({ operand1: 5, operand2: 15 }); @@ -27,7 +27,7 @@ describe('Operator Elements', () => { }); describe('class ElementOperatorMinus', () => { - const elementOperatorMinus = new ElementOperatorMathMinus(); + const elementOperatorMinus = new ElementOperatorMathMinus('operator-math-minus'); test('pass two numbers as parameters to evaluate and verify result', () => { elementOperatorMinus.evaluate({ operand1: 15, operand2: 5 }); @@ -38,7 +38,7 @@ describe('Operator Elements', () => { }); describe('class ElementOperatorTimes', () => { - const elementOperatorTime = new ElementOperatorMathTimes(); + const elementOperatorTime = new ElementOperatorMathTimes('operator-math-times'); test('pass two numbers as parameters to evaluate and verify result', () => { elementOperatorTime.evaluate({ operand1: 15, operand2: 5 }); @@ -49,7 +49,7 @@ describe('Operator Elements', () => { }); describe('class ElementOperatorDivide', () => { - const elementOperatorDivide = new ElementOperatorMathDivide(); + const elementOperatorDivide = new ElementOperatorMathDivide('operator-math-divide'); test('pass two numbers as parameters to evaluate and verify result', () => { elementOperatorDivide.evaluate({ operand1: 15, operand2: 5 }); @@ -60,7 +60,7 @@ describe('Operator Elements', () => { }); describe('class ElementOperatorModulus', () => { - const elementOperatorModulus = new ElementOperatorMathModulus(); + const elementOperatorModulus = new ElementOperatorMathModulus('operator-math-modulus'); test('pass two numbers as parameters to evaluate and verify result', () => { elementOperatorModulus.evaluate({ operand1: 15, operand2: 5 }); diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/program/operators/elementOperatorMath.ts index fdd65c5..e93af43 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.ts @@ -1,4 +1,5 @@ import { TData, TDataName } from '@/@types/syntax/data'; +import { TElementName } from '@/@types/syntax/elementSpecification'; import { ElementExpression } from '../../core/elementArgument'; /** Type definition for the operator symbols */ @@ -16,7 +17,7 @@ type TOperator = '+' | '-' | '*' | '/' | '%'; abstract class ElementOperatorMath extends ElementExpression { private _operator: TOperator; - constructor(name: string, returnType: TDataName[], operator: TOperator, initialValue: T) { + constructor(name: TElementName, returnType: TDataName[], operator: TOperator, initialValue: T) { super(name, '', { operand1: returnType, operand2: returnType }, returnType, initialValue); this._operator = operator; this.updateLabel(this._operator); @@ -57,8 +58,8 @@ abstract class ElementOperatorMath extends ElementExpression { * Performs addition on numbers and concatenation on strings. */ export class ElementOperatorMathPlus extends ElementOperatorMath { - constructor() { - super('operator-plus', ['number', 'string'], '+', 0); + constructor(name: TElementName) { + super(name, ['number', 'string'], '+', 0); } } @@ -70,8 +71,8 @@ export class ElementOperatorMathPlus extends ElementOperatorMath { - constructor() { - super('operator-minus', ['number'], '-', 0); + constructor(name: TElementName) { + super(name, ['number'], '-', 0); } } @@ -83,8 +84,8 @@ export class ElementOperatorMathMinus extends ElementOperatorMath { * Performs multiplication on numbers. */ export class ElementOperatorMathTimes extends ElementOperatorMath { - constructor() { - super('operator-times', ['number'], '*', 0); + constructor(name: TElementName) { + super(name, ['number'], '*', 0); } } @@ -96,8 +97,8 @@ export class ElementOperatorMathTimes extends ElementOperatorMath { * Performs division on numbers. */ export class ElementOperatorMathDivide extends ElementOperatorMath { - constructor() { - super('operator-divide', ['number'], '/', 0); + constructor(name: TElementName) { + super(name, ['number'], '/', 0); } } @@ -109,7 +110,7 @@ export class ElementOperatorMathDivide extends ElementOperatorMath { * Performs modulus operation on numbers. */ export class ElementOperatorMathModulus extends ElementOperatorMath { - constructor() { - super('operator-modulus', ['number'], '%', 0); + constructor(name: TElementName) { + super(name, ['number'], '%', 0); } } diff --git a/src/syntax/elements/program/values/elementValue.spec.ts b/src/syntax/elements/program/values/elementValue.spec.ts index 6d32fb1..9fc7f96 100644 --- a/src/syntax/elements/program/values/elementValue.spec.ts +++ b/src/syntax/elements/program/values/elementValue.spec.ts @@ -4,7 +4,7 @@ describe('class ElementValueBoolean', () => { let elementValueBoolean: ElementValueBoolean; test('instantiate element and verify initial value', () => { - elementValueBoolean = new ElementValueBoolean(); + elementValueBoolean = new ElementValueBoolean('value-boolean'); expect(elementValueBoolean.value).toBe(true); }); @@ -19,7 +19,7 @@ describe('class ElementValueNumber', () => { let elementValueNumber: ElementValueNumber; test('instantiate element and verify initial value', () => { - elementValueNumber = new ElementValueNumber(); + elementValueNumber = new ElementValueNumber('value-number'); expect(elementValueNumber.value).toBe(0); }); @@ -34,7 +34,7 @@ describe('class ElementValueString', () => { let elementValueString: ElementValueString; test('instantiate element and verify initial value', () => { - elementValueString = new ElementValueString(); + elementValueString = new ElementValueString('value-string'); expect(elementValueString.value).toBe(''); }); diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts index 8dd740c..ba88b3a 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -1,4 +1,5 @@ import { TDataName } from '@/@types/syntax/data'; +import { TElementName } from '@/@types/syntax/elementSpecification'; import { ElementData } from '../../core/elementArgument'; /** @@ -10,10 +11,10 @@ import { ElementData } from '../../core/elementArgument'; * Value elements return a stored value. */ abstract class ElementValue extends ElementData { - constructor(name: string, returnType: ['number'], initialValue: number); - constructor(name: string, returnType: ['string'], initialValue: string); - constructor(name: string, returnType: ['boolean'], initialValue: boolean); - constructor(name: string, returnType: [TDataName], initialValue: T) { + constructor(name: TElementName, returnType: ['number'], initialValue: number); + constructor(name: TElementName, returnType: ['string'], initialValue: string); + constructor(name: TElementName, returnType: ['boolean'], initialValue: boolean); + constructor(name: TElementName, returnType: [TDataName], initialValue: T) { super(name, '', {}, returnType, initialValue); } @@ -47,8 +48,8 @@ abstract class ElementValue extends ElementData { * @throws `Error` (TypeMismatchError) */ export class ElementValueBoolean extends ElementValue { - constructor() { - super('value-boolean', ['boolean'], true); + constructor(name: TElementName) { + super(name, ['boolean'], true); } } @@ -58,8 +59,8 @@ export class ElementValueBoolean extends ElementValue { * @throws `Error` (TypeMismatchError) */ export class ElementValueNumber extends ElementValue { - constructor() { - super('value-number', ['number'], 0); + constructor(name: TElementName) { + super(name, ['number'], 0); } } @@ -69,7 +70,7 @@ export class ElementValueNumber extends ElementValue { * @throws `Error` (TypeMismatchError) */ export class ElementValueString extends ElementValue { - constructor() { - super('value-string', ['string'], ''); + constructor(name: TElementName) { + super(name, ['string'], ''); } } From 70e99fbd005e73da6c2c973f9eb33149054c3c1b Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 23:07:21 +0530 Subject: [PATCH 107/176] specification: [feat] Create specification table with tests --- src/@types/syntax/elementSpecification.d.ts | 42 +++++ src/syntax/elements/specification.spec.ts | 92 ++++++++++ src/syntax/elements/specification.ts | 194 ++++++++++++++++++++ 3 files changed, 328 insertions(+) create mode 100644 src/@types/syntax/elementSpecification.d.ts create mode 100644 src/syntax/elements/specification.spec.ts create mode 100644 src/syntax/elements/specification.ts diff --git a/src/@types/syntax/elementSpecification.d.ts b/src/@types/syntax/elementSpecification.d.ts new file mode 100644 index 0000000..d40c681 --- /dev/null +++ b/src/@types/syntax/elementSpecification.d.ts @@ -0,0 +1,42 @@ +export type TElementCategoryData = 'value' | 'boxidentifier'; +export type TElementCategoryExpression = 'operator-math'; +export type TElementCategoryStatement = 'box'; +export type TElementCategoryBlock = 'block-dummy'; + +export type TElementCategory = + | TElementCategoryData + | TElementCategoryExpression + | TElementCategoryStatement + | TElementCategoryBlock; + +export type TElementDataName = + // value elements + | 'value-boolean' + | 'value-number' + | 'value-string' + // box identifier elements + | 'boxidentifier-generic' + | 'boxidentifier-boolean' + | 'boxidentifier-number' + | 'boxidentifier-string'; + +export type TElementExpressionName = + // math operator elements + | 'operator-math-plus' + | 'operator-math-minus' + | 'operator-math-times' + | 'operator-math-divide' + | 'operator-math-modulus'; + +export type TElementStatementName = + // box elements + 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; + +export type TElementBlockName = 'block-dummy'; + +export type TElementName = + | 'dummy' + | TElementDataName + | TElementExpressionName + | TElementStatementName + | TElementBlockName; diff --git a/src/syntax/elements/specification.spec.ts b/src/syntax/elements/specification.spec.ts new file mode 100644 index 0000000..943eda9 --- /dev/null +++ b/src/syntax/elements/specification.spec.ts @@ -0,0 +1,92 @@ +import { + TElementBlockName, + TElementDataName, + TElementExpressionName, + TElementStatementName +} from '@/@types/syntax/elementSpecification'; +import specification from './specification'; + +import { TData } from '@/@types/syntax/data'; +import { ElementData, ElementExpression } from './core/elementArgument'; +import { ElementStatement, ElementBlock } from './core/elementInstruction'; + +abstract class ElementDataCover extends ElementData {} +abstract class ElementExpressionCover extends ElementExpression {} + +describe('Syntax Element Specification', () => { + describe('data element', () => { + const dataElementEntry = specification['value-boolean']; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.type).toBe('Data'); + expect(dataElementEntry.category).toBe('value'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementDataName + ) => ElementDataCover; + const elementInstance = prototype('value-boolean'); + expect(elementInstance.name).toBe('value-boolean'); + expect(elementInstance.kind).toBe('Argument'); + expect(elementInstance.type).toBe('Data'); + }); + }); + + describe('expression element', () => { + const dataElementEntry = specification['operator-math-plus']; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.type).toBe('Expression'); + expect(dataElementEntry.category).toBe('operator-math'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementExpressionName + ) => ElementExpressionCover; + const elementInstance = prototype('operator-math-plus'); + expect(elementInstance.name).toBe('operator-math-plus'); + expect(elementInstance.kind).toBe('Argument'); + expect(elementInstance.type).toBe('Expression'); + }); + }); + + describe('statement element', () => { + const dataElementEntry = specification['box-generic']; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.type).toBe('Statement'); + expect(dataElementEntry.category).toBe('box'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementStatementName + ) => ElementStatement; + const elementInstance = prototype('box-generic'); + expect(elementInstance.name).toBe('box-generic'); + expect(elementInstance.kind).toBe('Instruction'); + expect(elementInstance.type).toBe('Statement'); + }); + }); + + describe('block element', () => { + const dataElementEntry = specification['block-dummy']; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.type).toBe('Block'); + expect(dataElementEntry.category).toBe('block-dummy'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementBlockName + ) => ElementBlock; + const elementInstance = prototype('block-dummy'); + expect(elementInstance.name).toBe('block-dummy'); + expect(elementInstance.kind).toBe('Instruction'); + expect(elementInstance.type).toBe('Block'); + }); + }); +}); diff --git a/src/syntax/elements/specification.ts b/src/syntax/elements/specification.ts new file mode 100644 index 0000000..626f600 --- /dev/null +++ b/src/syntax/elements/specification.ts @@ -0,0 +1,194 @@ +import { + TElementBlockName, + TElementCategoryBlock, + TElementCategoryData, + TElementCategoryExpression, + TElementCategoryStatement, + TElementDataName, + TElementExpressionName, + TElementName, + TElementStatementName +} from '@/@types/syntax/elementSpecification'; +import { TData } from '@/@types/syntax/data'; + +import { ElementData, ElementExpression } from './core/elementArgument'; +import { ElementBlock, ElementStatement } from './core/elementInstruction'; + +import { + ElementValueBoolean, + ElementValueNumber, + ElementValueString +} from './program/values/elementValue'; +import { + ElementBoxGeneric, + ElementBoxBoolean, + ElementBoxNumber, + ElementBoxString +} from './program/boxes/elementBox'; +import { + ElementBoxIdentifierGeneric, + ElementBoxIdentifierBoolean, + ElementBoxIdentifierNumber, + ElementBoxIdentifierString +} from './program/boxes/elementBoxIdentifier'; +import { + ElementOperatorMathPlus, + ElementOperatorMathMinus, + ElementOperatorMathTimes, + ElementOperatorMathDivide, + ElementOperatorMathModulus +} from './program/operators/elementOperatorMath'; + +class ElementBlockDummy extends ElementBlock { + constructor(name: TElementBlockName) { + super(name, 'block-dummy', {}); + } + + onVisit(): void { + console.log('dummy onVisit'); + } + + onInnerVisit(): void { + console.log('dummy onInnerVisit'); + } + + onInnerExit(): void { + console.log('dummy onInnerExit'); + } + + onExit(): void { + console.log('dummy onExit'); + } +} + +abstract class ElementDataCover extends ElementData {} +abstract class ElementExpressionCover extends ElementExpression {} + +interface IElementInstructionSpecification { + allowAbove?: TElementName[] | boolean; + allowBelow?: TElementName[] | boolean; + forbidAbove?: TElementName[] | boolean; + forbidBelow?: TElementName[] | boolean; + allowedNestLevel?: number[] | 'any'; + allowedNestInside?: TElementBlockName[] | boolean; + forbiddenNestInside?: TElementBlockName[] | boolean; +} + +const elementSpecification: { + [identifier: string]: + | { + type: 'Data'; + category: TElementCategoryData; + prototype: (name: TElementDataName) => ElementDataCover; + } + | { + type: 'Expression'; + category: TElementCategoryExpression; + prototype: (name: TElementExpressionName) => ElementExpressionCover; + } + | (IElementInstructionSpecification & { + type: 'Statement'; + category: TElementCategoryStatement; + prototype: (name: TElementStatementName) => ElementStatement; + }) + | (IElementInstructionSpecification & { + type: 'Block'; + category: TElementCategoryBlock; + prototype: (name: TElementBlockName) => ElementBlock; + allowNestInside?: TElementBlockName[] | boolean; + forbidNestInside?: TElementBlockName[] | boolean; + }); +} = { + // -- value elements --------------------------------------------------------------------------- + 'value-boolean': { + type: 'Data', + category: 'value', + prototype: (name: TElementDataName) => new ElementValueBoolean(name) + }, + 'value-number': { + type: 'Data', + category: 'value', + prototype: (name: TElementDataName) => new ElementValueNumber(name) + }, + 'value-string': { + type: 'Data', + category: 'value', + prototype: (name: TElementDataName) => new ElementValueString(name) + }, + // -- box elements ----------------------------------------------------------------------------- + 'box-generic': { + type: 'Statement', + category: 'box', + prototype: (name: TElementStatementName) => new ElementBoxGeneric(name) + }, + 'box-boolean': { + type: 'Statement', + category: 'box', + prototype: (name: TElementStatementName) => new ElementBoxBoolean(name) + }, + 'box-number': { + type: 'Statement', + category: 'box', + prototype: (name: TElementStatementName) => new ElementBoxNumber(name) + }, + 'box-string': { + type: 'Statement', + category: 'box', + prototype: (name: TElementStatementName) => new ElementBoxString(name) + }, + // -- box identifier elements ------------------------------------------------------------------ + 'boxidentifier-generic': { + type: 'Data', + category: 'boxidentifier', + prototype: (name: TElementDataName) => new ElementBoxIdentifierGeneric(name) + }, + 'boxidentifier-boolean': { + type: 'Data', + category: 'boxidentifier', + prototype: (name: TElementDataName) => new ElementBoxIdentifierBoolean(name) + }, + 'boxidentifier-number': { + type: 'Data', + category: 'boxidentifier', + prototype: (name: TElementDataName) => new ElementBoxIdentifierNumber(name) + }, + 'boxidentifier-string': { + type: 'Data', + category: 'boxidentifier', + prototype: (name: TElementDataName) => new ElementBoxIdentifierString(name) + }, + // -- math operator elements ------------------------------------------------------------------- + 'operator-math-plus': { + type: 'Expression', + category: 'operator-math', + prototype: (name: TElementExpressionName) => new ElementOperatorMathPlus(name) + }, + 'operator-math-minus': { + type: 'Expression', + category: 'operator-math', + prototype: (name: TElementExpressionName) => new ElementOperatorMathMinus(name) + }, + 'operator-math-times': { + type: 'Expression', + category: 'operator-math', + prototype: (name: TElementExpressionName) => new ElementOperatorMathTimes(name) + }, + 'operator-math-divide': { + type: 'Expression', + category: 'operator-math', + prototype: (name: TElementExpressionName) => new ElementOperatorMathDivide(name) + }, + 'operator-math-modulus': { + type: 'Expression', + category: 'operator-math', + prototype: (name: TElementExpressionName) => new ElementOperatorMathModulus(name) + }, + // -- dummy block element ---------------------------------------------------------------------- + 'block-dummy': { + type: 'Block', + category: 'block-dummy', + prototype: (name: TElementBlockName) => new ElementBlockDummy(name) + } +}; + +export default elementSpecification; From fe7f1c852aefb95a469a21cdd2b405b2974c9dde Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 11 Nov 2021 23:50:20 +0530 Subject: [PATCH 108/176] elements: [refactor] Add label field to element constructor Don't hardcode label into element; label will be provided from element specification --- src/syntax/elements/core/elementSyntax.ts | 2 +- .../elements/program/boxes/elementBox.spec.ts | 25 ++--- .../elements/program/boxes/elementBox.ts | 16 +-- .../boxes/elementBoxIdentifier.spec.ts | 16 ++- .../program/boxes/elementBoxIdentifier.ts | 16 +-- .../operators/elementOperatorMath.spec.ts | 100 ++++++++++++------ .../program/operators/elementOperatorMath.ts | 28 +++-- .../program/values/elementValue.spec.ts | 9 +- .../elements/program/values/elementValue.ts | 21 ++-- src/syntax/elements/specification.spec.ts | 24 +++-- src/syntax/elements/specification.ts | 78 ++++++++++---- 11 files changed, 210 insertions(+), 125 deletions(-) diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 7a3ee14..89384fd 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -40,7 +40,7 @@ export abstract class ElementSyntax implements IElementSyntax { argMap: { [key: string]: TDataName[] } ) { this._name = name; - this._label = name; + this._label = label; this._kind = kind; this._type = type; this._argMap = argMap; diff --git a/src/syntax/elements/program/boxes/elementBox.spec.ts b/src/syntax/elements/program/boxes/elementBox.spec.ts index 8da5452..902471e 100644 --- a/src/syntax/elements/program/boxes/elementBox.spec.ts +++ b/src/syntax/elements/program/boxes/elementBox.spec.ts @@ -7,10 +7,10 @@ import { import { getGlobalVariable } from '../../../symbol-table/symbolTable'; describe('Box Elements', () => { - const elementBox = new ElementBoxGeneric('box-generic'); - test('instantiate and verify instance variables', () => { + const elementBox = new ElementBoxGeneric('box-generic', 'Box'); expect(elementBox.name).toBe('box-generic'); + expect(elementBox.label).toBe('Box'); expect(elementBox.kind).toBe('Instruction'); expect(elementBox.type).toBe('Statement'); expect(elementBox.argCount).toBe(2); @@ -18,10 +18,9 @@ describe('Box Elements', () => { }); describe('class ElementBoxBoolean', () => { - let elementBoxBoolean: ElementBoxBoolean; - test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxBoolean = new ElementBoxBoolean('box-boolean'); + const elementBoxBoolean = new ElementBoxBoolean('box-boolean', 'Box (boolean)'); + expect(elementBoxBoolean.label).toBe('Box (boolean)'); elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }); expect(getGlobalVariable('booleanBox')).toEqual({ dataType: 'boolean', @@ -31,10 +30,9 @@ describe('Box Elements', () => { }); describe('class ElementBoxNumber', () => { - let elementBoxNumber: ElementBoxNumber; - test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxNumber = new ElementBoxNumber('box-number'); + const elementBoxNumber = new ElementBoxNumber('box-number', 'Box (number)'); + expect(elementBoxNumber.label).toBe('Box (number)'); elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }); expect(getGlobalVariable('numberBox')).toEqual({ dataType: 'number', @@ -44,10 +42,9 @@ describe('Box Elements', () => { }); describe('class ElementBoxString', () => { - let elementBoxString: ElementBoxString; - test('execute with parameters and verify variable addition in symbol table', () => { - elementBoxString = new ElementBoxString('box-string'); + const elementBoxString = new ElementBoxString('box-string', 'Box (string)'); + expect(elementBoxString.label).toBe('Box (string)'); elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }); expect(getGlobalVariable('stringBox')).toEqual({ dataType: 'string', @@ -58,7 +55,7 @@ describe('Box Elements', () => { describe('class ElementBoxGeneric', () => { test('execute with boolean value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric('box-generic'); + const elementBoxGeneric = new ElementBoxGeneric('box-generic', 'Box'); elementBoxGeneric.onVisit({ name: 'genericBox', value: true }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'boolean', @@ -67,7 +64,7 @@ describe('Box Elements', () => { }); test('execute with number value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric('box-generic'); + const elementBoxGeneric = new ElementBoxGeneric('box-generic', 'Box'); elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'number', @@ -76,7 +73,7 @@ describe('Box Elements', () => { }); test('execute with string value parameter and verify variable addition in symbol table', () => { - const elementBoxGeneric = new ElementBoxGeneric('box-generic'); + const elementBoxGeneric = new ElementBoxGeneric('box-generic', 'Box'); elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'string', diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts index ee8015a..a26f097 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -42,8 +42,8 @@ abstract class ElementBox extends ElementStatement { * Defines a box element that declares a variable of any data type. */ export class ElementBoxGeneric extends ElementBox { - constructor(name: TElementName) { - super(name, 'box', ['boolean', 'number', 'string']); + constructor(name: TElementName, label: string) { + super(name, label, ['boolean', 'number', 'string']); } /** @override */ @@ -57,8 +57,8 @@ export class ElementBoxGeneric extends ElementBox { * Defines a box element that declares a variable of boolean type. */ export class ElementBoxBoolean extends ElementBox { - constructor(name: TElementName) { - super(name, 'box (boolean)', ['boolean']); + constructor(name: TElementName, label: string) { + super(name, label, ['boolean']); } /** @override */ @@ -72,8 +72,8 @@ export class ElementBoxBoolean extends ElementBox { * Defines a box element that declares a variable of number type. */ export class ElementBoxNumber extends ElementBox { - constructor(name: TElementName) { - super(name, 'box (number)', ['number']); + constructor(name: TElementName, label: string) { + super(name, label, ['number']); } /** @override */ @@ -87,8 +87,8 @@ export class ElementBoxNumber extends ElementBox { * Defines a box element that declares a variable of string type. */ export class ElementBoxString extends ElementBox { - constructor(name: TElementName) { - super(name, 'box (string)', ['string']); + constructor(name: TElementName, label: string) { + super(name, label, ['string']); } /** @override */ diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts index 7082ada..7fc5a25 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts @@ -13,7 +13,8 @@ addGlobalVariable('myVar3', 'string', 'foo'); describe('Box Identifier Elements', () => { describe('class ElementBoxIdentifierGeneric', () => { const elementBoxIdentifierGeneric = new ElementBoxIdentifierGeneric( - 'boxidentifier-generic' + 'boxidentifier-generic', + 'Box 1' ); test('update label to name with boolean variable in symbol table and verify evaluation', () => { @@ -44,7 +45,8 @@ describe('Box Identifier Elements', () => { describe('class ElementBoxIdentifierBoolean', () => { const elementBoxIdentifierBoolean = new ElementBoxIdentifierBoolean( - 'boxidentifier-boolean' + 'boxidentifier-boolean', + 'Box 2' ); test('update label to name with boolean variable in symbol table and verify evaluation', () => { @@ -62,7 +64,10 @@ describe('Box Identifier Elements', () => { }); describe('class ElementBoxIdentifierNumber', () => { - const elementBoxIdentifierNumber = new ElementBoxIdentifierNumber('boxidentifier-number'); + const elementBoxIdentifierNumber = new ElementBoxIdentifierNumber( + 'boxidentifier-number', + 'Box 3' + ); test('update label to name with number variable in symbol table and verify evaluation', () => { elementBoxIdentifierNumber.updateLabel('myVar2'); @@ -79,7 +84,10 @@ describe('Box Identifier Elements', () => { }); describe('class ElementBoxIdentifierString', () => { - const elementBoxIdentifierString = new ElementBoxIdentifierString('boxidentifier-string'); + const elementBoxIdentifierString = new ElementBoxIdentifierString( + 'boxidentifier-string', + 'Box 4' + ); test('update label to name with string variable in symbol table and verify evaluation', () => { elementBoxIdentifierString.updateLabel('myVar3'); diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts index 0a23618..63d88ee 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -56,8 +56,8 @@ abstract class ElementBoxIdentifier extends ElementData { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { - constructor(name: TElementName) { - super(name, '', ['boolean', 'number', 'string'], ''); + constructor(name: TElementName, label: string) { + super(name, label, ['boolean', 'number', 'string'], ''); } } @@ -67,8 +67,8 @@ export class ElementBoxIdentifierGeneric extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { - constructor(name: TElementName) { - super(name, '', ['boolean'], true); + constructor(name: TElementName, label: string) { + super(name, label, ['boolean'], true); } } @@ -78,8 +78,8 @@ export class ElementBoxIdentifierBoolean extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { - constructor(name: TElementName) { - super(name, '', ['number'], 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], 0); } } @@ -89,7 +89,7 @@ export class ElementBoxIdentifierNumber extends ElementBoxIdentifier { * @throws `Error` (ItemNotFoundError) */ export class ElementBoxIdentifierString extends ElementBoxIdentifier { - constructor(name: TElementName) { - super(name, '', ['string'], ''); + constructor(name: TElementName, label: string) { + super(name, label, ['string'], ''); } } diff --git a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts index c1b1c31..06ef8ae 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.spec.ts @@ -8,65 +8,95 @@ import { describe('Operator Elements', () => { describe('class ElementOperatorPlus', () => { - const elementOperatorPlus = new ElementOperatorMathPlus('operator-math-plus'); + const elementOperatorPlus = new ElementOperatorMathPlus('operator-math-plus', '+'); - test('pass two numbers as parameters to evaluate and verify result', () => { - elementOperatorPlus.evaluate({ operand1: 5, operand2: 15 }); - expect(elementOperatorPlus.value).toBe(20); + test('verify label', () => { + expect(elementOperatorPlus.label).toBe('+'); }); - test('pass a number and a string as parameters to evaluate and verify result', () => { - elementOperatorPlus.evaluate({ operand1: 5, operand2: 'foo' }); - expect(elementOperatorPlus.value).toBe('5foo'); - }); + describe('evaluation', () => { + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: 5, operand2: 15 }); + expect(elementOperatorPlus.value).toBe(20); + }); + + test('pass a number and a string as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: 5, operand2: 'foo' }); + expect(elementOperatorPlus.value).toBe('5foo'); + }); - test('pass two strings as parameters to evaluate and verify result', () => { - elementOperatorPlus.evaluate({ operand1: '5', operand2: '15' }); - expect(elementOperatorPlus.value).toBe('515'); + test('pass two strings as parameters to evaluate and verify result', () => { + elementOperatorPlus.evaluate({ operand1: '5', operand2: '15' }); + expect(elementOperatorPlus.value).toBe('515'); + }); }); }); describe('class ElementOperatorMinus', () => { - const elementOperatorMinus = new ElementOperatorMathMinus('operator-math-minus'); + const elementOperatorMinus = new ElementOperatorMathMinus('operator-math-minus', '-'); - test('pass two numbers as parameters to evaluate and verify result', () => { - elementOperatorMinus.evaluate({ operand1: 15, operand2: 5 }); - expect(elementOperatorMinus.value).toBe(10); - elementOperatorMinus.evaluate({ operand1: 5, operand2: 15 }); - expect(elementOperatorMinus.value).toBe(-10); + test('verify label', () => { + expect(elementOperatorMinus.label).toBe('-'); + }); + + describe('evaluation', () => { + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorMinus.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorMinus.value).toBe(10); + elementOperatorMinus.evaluate({ operand1: 5, operand2: 15 }); + expect(elementOperatorMinus.value).toBe(-10); + }); }); }); describe('class ElementOperatorTimes', () => { - const elementOperatorTime = new ElementOperatorMathTimes('operator-math-times'); + const elementOperatorTimes = new ElementOperatorMathTimes('operator-math-times', '*'); + + describe('verify label', () => { + expect(elementOperatorTimes.label).toBe('*'); + }); - test('pass two numbers as parameters to evaluate and verify result', () => { - elementOperatorTime.evaluate({ operand1: 15, operand2: 5 }); - expect(elementOperatorTime.value).toBe(75); - elementOperatorTime.evaluate({ operand1: -5, operand2: 15 }); - expect(elementOperatorTime.value).toBe(-75); + describe('evaluation', () => { + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorTimes.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorTimes.value).toBe(75); + elementOperatorTimes.evaluate({ operand1: -5, operand2: 15 }); + expect(elementOperatorTimes.value).toBe(-75); + }); }); }); describe('class ElementOperatorDivide', () => { - const elementOperatorDivide = new ElementOperatorMathDivide('operator-math-divide'); + const elementOperatorDivide = new ElementOperatorMathDivide('operator-math-divide', '/'); + + describe('verify label', () => { + expect(elementOperatorDivide.label).toBe('/'); + }); - test('pass two numbers as parameters to evaluate and verify result', () => { - elementOperatorDivide.evaluate({ operand1: 15, operand2: 5 }); - expect(elementOperatorDivide.value).toBe(3); - elementOperatorDivide.evaluate({ operand1: -5, operand2: 10 }); - expect(elementOperatorDivide.value).toBe(-0.5); + describe('evaluation', () => { + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorDivide.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorDivide.value).toBe(3); + elementOperatorDivide.evaluate({ operand1: -5, operand2: 10 }); + expect(elementOperatorDivide.value).toBe(-0.5); + }); }); }); describe('class ElementOperatorModulus', () => { - const elementOperatorModulus = new ElementOperatorMathModulus('operator-math-modulus'); + const elementOperatorModulus = new ElementOperatorMathModulus('operator-math-modulus', '%'); + + describe('verify label', () => { + expect(elementOperatorModulus.label).toBe('%'); + }); - test('pass two numbers as parameters to evaluate and verify result', () => { - elementOperatorModulus.evaluate({ operand1: 15, operand2: 5 }); - expect(elementOperatorModulus.value).toBe(0); - elementOperatorModulus.evaluate({ operand1: 15, operand2: 7 }); - expect(elementOperatorModulus.value).toBe(1); + describe('evaluation', () => { + test('pass two numbers as parameters to evaluate and verify result', () => { + elementOperatorModulus.evaluate({ operand1: 15, operand2: 5 }); + expect(elementOperatorModulus.value).toBe(0); + elementOperatorModulus.evaluate({ operand1: 15, operand2: 7 }); + expect(elementOperatorModulus.value).toBe(1); + }); }); }); }); diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/program/operators/elementOperatorMath.ts index e93af43..0dfa086 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.ts @@ -17,7 +17,13 @@ type TOperator = '+' | '-' | '*' | '/' | '%'; abstract class ElementOperatorMath extends ElementExpression { private _operator: TOperator; - constructor(name: TElementName, returnType: TDataName[], operator: TOperator, initialValue: T) { + constructor( + name: TElementName, + label: string, + returnType: TDataName[], + operator: TOperator, + initialValue: T + ) { super(name, '', { operand1: returnType, operand2: returnType }, returnType, initialValue); this._operator = operator; this.updateLabel(this._operator); @@ -58,8 +64,8 @@ abstract class ElementOperatorMath extends ElementExpression { * Performs addition on numbers and concatenation on strings. */ export class ElementOperatorMathPlus extends ElementOperatorMath { - constructor(name: TElementName) { - super(name, ['number', 'string'], '+', 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number', 'string'], '+', 0); } } @@ -71,8 +77,8 @@ export class ElementOperatorMathPlus extends ElementOperatorMath { - constructor(name: TElementName) { - super(name, ['number'], '-', 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], '-', 0); } } @@ -84,8 +90,8 @@ export class ElementOperatorMathMinus extends ElementOperatorMath { * Performs multiplication on numbers. */ export class ElementOperatorMathTimes extends ElementOperatorMath { - constructor(name: TElementName) { - super(name, ['number'], '*', 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], '*', 0); } } @@ -97,8 +103,8 @@ export class ElementOperatorMathTimes extends ElementOperatorMath { * Performs division on numbers. */ export class ElementOperatorMathDivide extends ElementOperatorMath { - constructor(name: TElementName) { - super(name, ['number'], '/', 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], '/', 0); } } @@ -110,7 +116,7 @@ export class ElementOperatorMathDivide extends ElementOperatorMath { * Performs modulus operation on numbers. */ export class ElementOperatorMathModulus extends ElementOperatorMath { - constructor(name: TElementName) { - super(name, ['number'], '%', 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], '%', 0); } } diff --git a/src/syntax/elements/program/values/elementValue.spec.ts b/src/syntax/elements/program/values/elementValue.spec.ts index 9fc7f96..98297bf 100644 --- a/src/syntax/elements/program/values/elementValue.spec.ts +++ b/src/syntax/elements/program/values/elementValue.spec.ts @@ -4,8 +4,9 @@ describe('class ElementValueBoolean', () => { let elementValueBoolean: ElementValueBoolean; test('instantiate element and verify initial value', () => { - elementValueBoolean = new ElementValueBoolean('value-boolean'); + elementValueBoolean = new ElementValueBoolean('value-boolean', 'true'); expect(elementValueBoolean.value).toBe(true); + expect(elementValueBoolean.label).toBe('true'); }); test('update label and verify new value', () => { @@ -19,8 +20,9 @@ describe('class ElementValueNumber', () => { let elementValueNumber: ElementValueNumber; test('instantiate element and verify initial value', () => { - elementValueNumber = new ElementValueNumber('value-number'); + elementValueNumber = new ElementValueNumber('value-number', '0'); expect(elementValueNumber.value).toBe(0); + expect(elementValueNumber.label).toBe('0'); }); test('update label and verify new value', () => { @@ -34,8 +36,9 @@ describe('class ElementValueString', () => { let elementValueString: ElementValueString; test('instantiate element and verify initial value', () => { - elementValueString = new ElementValueString('value-string'); + elementValueString = new ElementValueString('value-string', 'foobar'); expect(elementValueString.value).toBe(''); + expect(elementValueString.label).toBe('foobar'); }); test('update label and verify new value', () => { diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts index ba88b3a..c3553b8 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -11,11 +11,12 @@ import { ElementData } from '../../core/elementArgument'; * Value elements return a stored value. */ abstract class ElementValue extends ElementData { - constructor(name: TElementName, returnType: ['number'], initialValue: number); - constructor(name: TElementName, returnType: ['string'], initialValue: string); - constructor(name: TElementName, returnType: ['boolean'], initialValue: boolean); - constructor(name: TElementName, returnType: [TDataName], initialValue: T) { + constructor(name: TElementName, label: string, returnType: ['number'], initialValue: number); + constructor(name: TElementName, label: string, returnType: ['string'], initialValue: string); + constructor(name: TElementName, label: string, returnType: ['boolean'], initialValue: boolean); + constructor(name: TElementName, label: string, returnType: [TDataName], initialValue: T) { super(name, '', {}, returnType, initialValue); + this.updateLabel(label); } /** @throws `Error` (TypeMismatchError) */ @@ -48,8 +49,8 @@ abstract class ElementValue extends ElementData { * @throws `Error` (TypeMismatchError) */ export class ElementValueBoolean extends ElementValue { - constructor(name: TElementName) { - super(name, ['boolean'], true); + constructor(name: TElementName, label: string) { + super(name, label, ['boolean'], true); } } @@ -59,8 +60,8 @@ export class ElementValueBoolean extends ElementValue { * @throws `Error` (TypeMismatchError) */ export class ElementValueNumber extends ElementValue { - constructor(name: TElementName) { - super(name, ['number'], 0); + constructor(name: TElementName, label: string) { + super(name, label, ['number'], 0); } } @@ -70,7 +71,7 @@ export class ElementValueNumber extends ElementValue { * @throws `Error` (TypeMismatchError) */ export class ElementValueString extends ElementValue { - constructor(name: TElementName) { - super(name, ['string'], ''); + constructor(name: TElementName, label: string) { + super(name, label, ['string'], ''); } } diff --git a/src/syntax/elements/specification.spec.ts b/src/syntax/elements/specification.spec.ts index 943eda9..652f083 100644 --- a/src/syntax/elements/specification.spec.ts +++ b/src/syntax/elements/specification.spec.ts @@ -16,6 +16,7 @@ abstract class ElementExpressionCover extends ElementExpression {} describe('Syntax Element Specification', () => { describe('data element', () => { const dataElementEntry = specification['value-boolean']; + expect(dataElementEntry.label).toBe('true'); test('fetch element and verify entry', () => { expect(dataElementEntry.type).toBe('Data'); @@ -24,9 +25,10 @@ describe('Syntax Element Specification', () => { test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementDataName + name: TElementDataName, + label: string ) => ElementDataCover; - const elementInstance = prototype('value-boolean'); + const elementInstance = prototype('value-boolean', dataElementEntry.label); expect(elementInstance.name).toBe('value-boolean'); expect(elementInstance.kind).toBe('Argument'); expect(elementInstance.type).toBe('Data'); @@ -37,15 +39,17 @@ describe('Syntax Element Specification', () => { const dataElementEntry = specification['operator-math-plus']; test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('+'); expect(dataElementEntry.type).toBe('Expression'); expect(dataElementEntry.category).toBe('operator-math'); }); test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementExpressionName + name: TElementExpressionName, + label: string ) => ElementExpressionCover; - const elementInstance = prototype('operator-math-plus'); + const elementInstance = prototype('operator-math-plus', dataElementEntry.label); expect(elementInstance.name).toBe('operator-math-plus'); expect(elementInstance.kind).toBe('Argument'); expect(elementInstance.type).toBe('Expression'); @@ -56,15 +60,17 @@ describe('Syntax Element Specification', () => { const dataElementEntry = specification['box-generic']; test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('Box'); expect(dataElementEntry.type).toBe('Statement'); expect(dataElementEntry.category).toBe('box'); }); test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementStatementName + name: TElementStatementName, + label: string ) => ElementStatement; - const elementInstance = prototype('box-generic'); + const elementInstance = prototype('box-generic', dataElementEntry.label); expect(elementInstance.name).toBe('box-generic'); expect(elementInstance.kind).toBe('Instruction'); expect(elementInstance.type).toBe('Statement'); @@ -75,15 +81,17 @@ describe('Syntax Element Specification', () => { const dataElementEntry = specification['block-dummy']; test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('dummy'); expect(dataElementEntry.type).toBe('Block'); expect(dataElementEntry.category).toBe('block-dummy'); }); test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementBlockName + name: TElementBlockName, + label: string ) => ElementBlock; - const elementInstance = prototype('block-dummy'); + const elementInstance = prototype('block-dummy', dataElementEntry.label); expect(elementInstance.name).toBe('block-dummy'); expect(elementInstance.kind).toBe('Instruction'); expect(elementInstance.type).toBe('Block'); diff --git a/src/syntax/elements/specification.ts b/src/syntax/elements/specification.ts index 626f600..4e8e2a9 100644 --- a/src/syntax/elements/specification.ts +++ b/src/syntax/elements/specification.ts @@ -40,8 +40,8 @@ import { } from './program/operators/elementOperatorMath'; class ElementBlockDummy extends ElementBlock { - constructor(name: TElementBlockName) { - super(name, 'block-dummy', {}); + constructor(name: TElementBlockName, label: string) { + super(name, label, {}); } onVisit(): void { @@ -77,117 +77,149 @@ interface IElementInstructionSpecification { const elementSpecification: { [identifier: string]: | { + label: string; type: 'Data'; category: TElementCategoryData; - prototype: (name: TElementDataName) => ElementDataCover; + prototype: (name: TElementDataName, label: string) => ElementDataCover; } | { + label: string; type: 'Expression'; category: TElementCategoryExpression; - prototype: (name: TElementExpressionName) => ElementExpressionCover; + prototype: (name: TElementExpressionName, label: string) => ElementExpressionCover; } | (IElementInstructionSpecification & { + label: string; type: 'Statement'; category: TElementCategoryStatement; - prototype: (name: TElementStatementName) => ElementStatement; + prototype: (name: TElementStatementName, label: string) => ElementStatement; }) | (IElementInstructionSpecification & { + label: string; type: 'Block'; category: TElementCategoryBlock; - prototype: (name: TElementBlockName) => ElementBlock; + prototype: (name: TElementBlockName, label: string) => ElementBlock; allowNestInside?: TElementBlockName[] | boolean; forbidNestInside?: TElementBlockName[] | boolean; }); } = { // -- value elements --------------------------------------------------------------------------- 'value-boolean': { + label: 'true', type: 'Data', category: 'value', - prototype: (name: TElementDataName) => new ElementValueBoolean(name) + prototype: (name: TElementDataName, label: string) => new ElementValueBoolean(name, label) }, 'value-number': { + label: '0', type: 'Data', category: 'value', - prototype: (name: TElementDataName) => new ElementValueNumber(name) + prototype: (name: TElementDataName, label: string) => new ElementValueNumber(name, label) }, 'value-string': { + label: 'string', type: 'Data', category: 'value', - prototype: (name: TElementDataName) => new ElementValueString(name) + prototype: (name: TElementDataName, label: string) => new ElementValueString(name, label) }, // -- box elements ----------------------------------------------------------------------------- 'box-generic': { + label: 'Box', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName) => new ElementBoxGeneric(name) + prototype: (name: TElementStatementName, label: string) => + new ElementBoxGeneric(name, label) }, 'box-boolean': { + label: 'Box (boolean)', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName) => new ElementBoxBoolean(name) + prototype: (name: TElementStatementName, label: string) => + new ElementBoxBoolean(name, label) }, 'box-number': { + label: 'Box (number)', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName) => new ElementBoxNumber(name) + prototype: (name: TElementStatementName, label: string) => new ElementBoxNumber(name, label) }, 'box-string': { + label: 'Box (string)', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName) => new ElementBoxString(name) + prototype: (name: TElementStatementName, label: string) => new ElementBoxString(name, label) }, // -- box identifier elements ------------------------------------------------------------------ 'boxidentifier-generic': { + label: 'Box 1', type: 'Data', category: 'boxidentifier', - prototype: (name: TElementDataName) => new ElementBoxIdentifierGeneric(name) + prototype: (name: TElementDataName, label: string) => + new ElementBoxIdentifierGeneric(name, label) }, 'boxidentifier-boolean': { + label: 'Box 1', type: 'Data', category: 'boxidentifier', - prototype: (name: TElementDataName) => new ElementBoxIdentifierBoolean(name) + prototype: (name: TElementDataName, label: string) => + new ElementBoxIdentifierBoolean(name, label) }, 'boxidentifier-number': { + label: 'Box 1', type: 'Data', category: 'boxidentifier', - prototype: (name: TElementDataName) => new ElementBoxIdentifierNumber(name) + prototype: (name: TElementDataName, label: string) => + new ElementBoxIdentifierNumber(name, label) }, 'boxidentifier-string': { + label: 'Box 1', type: 'Data', category: 'boxidentifier', - prototype: (name: TElementDataName) => new ElementBoxIdentifierString(name) + prototype: (name: TElementDataName, label: string) => + new ElementBoxIdentifierString(name, label) }, // -- math operator elements ------------------------------------------------------------------- 'operator-math-plus': { + label: '+', type: 'Expression', category: 'operator-math', - prototype: (name: TElementExpressionName) => new ElementOperatorMathPlus(name) + prototype: (name: TElementExpressionName, label: string) => + new ElementOperatorMathPlus(name, label) }, 'operator-math-minus': { + label: '-', type: 'Expression', category: 'operator-math', - prototype: (name: TElementExpressionName) => new ElementOperatorMathMinus(name) + prototype: (name: TElementExpressionName, label: string) => + new ElementOperatorMathMinus(name, label) }, 'operator-math-times': { + label: '\u00d7', type: 'Expression', category: 'operator-math', - prototype: (name: TElementExpressionName) => new ElementOperatorMathTimes(name) + prototype: (name: TElementExpressionName, label: string) => + new ElementOperatorMathTimes(name, label) }, 'operator-math-divide': { + label: '\u00f7', type: 'Expression', category: 'operator-math', - prototype: (name: TElementExpressionName) => new ElementOperatorMathDivide(name) + prototype: (name: TElementExpressionName, label: string) => + new ElementOperatorMathDivide(name, label) }, 'operator-math-modulus': { + label: '%', type: 'Expression', category: 'operator-math', - prototype: (name: TElementExpressionName) => new ElementOperatorMathModulus(name) + prototype: (name: TElementExpressionName, label: string) => + new ElementOperatorMathModulus(name, label) }, // -- dummy block element ---------------------------------------------------------------------- 'block-dummy': { + label: 'dummy', type: 'Block', category: 'block-dummy', - prototype: (name: TElementBlockName) => new ElementBlockDummy(name) + prototype: (name: TElementBlockName, label: string) => new ElementBlockDummy(name, label) } }; From 0633bf026a098ecc77c58f4abdfe348981779bdb Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 12 Nov 2021 00:05:04 +0530 Subject: [PATCH 109/176] specification: [refactor] Move specification types to @types --- src/@types/syntax/elementSpecification.d.ts | 43 ++++++++++++++++ src/syntax/elements/specification.ts | 57 ++++----------------- 2 files changed, 54 insertions(+), 46 deletions(-) diff --git a/src/@types/syntax/elementSpecification.d.ts b/src/@types/syntax/elementSpecification.d.ts index d40c681..5d3bca4 100644 --- a/src/@types/syntax/elementSpecification.d.ts +++ b/src/@types/syntax/elementSpecification.d.ts @@ -1,3 +1,6 @@ +import { TData } from './data'; +import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elementsCore'; + export type TElementCategoryData = 'value' | 'boxidentifier'; export type TElementCategoryExpression = 'operator-math'; export type TElementCategoryStatement = 'box'; @@ -40,3 +43,43 @@ export type TElementName = | TElementExpressionName | TElementStatementName | TElementBlockName; + +export interface IElementDataSpecification { + label: string; + type: 'Data'; + category: TElementCategoryData; + prototype: (name: TElementDataName, label: string) => IElementData; +} + +export interface IElementExpressionSpecification { + label: string; + type: 'Expression'; + category: TElementCategoryExpression; + prototype: (name: TElementExpressionName, label: string) => IElementExpression; +} + +interface IElementInstructionSpecification { + allowAbove?: TElementName[] | boolean; + allowBelow?: TElementName[] | boolean; + forbidAbove?: TElementName[] | boolean; + forbidBelow?: TElementName[] | boolean; + allowedNestLevel?: number[] | 'any'; + allowedNestInside?: TElementBlockName[] | boolean; + forbiddenNestInside?: TElementBlockName[] | boolean; +} + +export type IElementStatementSpecification = IElementInstructionSpecification & { + label: string; + type: 'Statement'; + category: TElementCategoryStatement; + prototype: (name: TElementStatementName, label: string) => IElementStatement; +}; + +export type IElementBlockSpecification = IElementInstructionSpecification & { + label: string; + type: 'Block'; + category: TElementCategoryBlock; + prototype: (name: TElementBlockName, label: string) => IElementBlock; + allowNestInside?: TElementBlockName[] | boolean; + forbidNestInside?: TElementBlockName[] | boolean; +}; diff --git a/src/syntax/elements/specification.ts b/src/syntax/elements/specification.ts index 4e8e2a9..58ebd05 100644 --- a/src/syntax/elements/specification.ts +++ b/src/syntax/elements/specification.ts @@ -1,18 +1,11 @@ import { TElementBlockName, - TElementCategoryBlock, - TElementCategoryData, - TElementCategoryExpression, - TElementCategoryStatement, TElementDataName, TElementExpressionName, - TElementName, TElementStatementName } from '@/@types/syntax/elementSpecification'; -import { TData } from '@/@types/syntax/data'; -import { ElementData, ElementExpression } from './core/elementArgument'; -import { ElementBlock, ElementStatement } from './core/elementInstruction'; +import { ElementBlock } from './core/elementInstruction'; import { ElementValueBoolean, @@ -61,47 +54,19 @@ class ElementBlockDummy extends ElementBlock { } } -abstract class ElementDataCover extends ElementData {} -abstract class ElementExpressionCover extends ElementExpression {} - -interface IElementInstructionSpecification { - allowAbove?: TElementName[] | boolean; - allowBelow?: TElementName[] | boolean; - forbidAbove?: TElementName[] | boolean; - forbidBelow?: TElementName[] | boolean; - allowedNestLevel?: number[] | 'any'; - allowedNestInside?: TElementBlockName[] | boolean; - forbiddenNestInside?: TElementBlockName[] | boolean; -} +import { + IElementDataSpecification, + IElementExpressionSpecification, + IElementStatementSpecification, + IElementBlockSpecification +} from '@/@types/syntax/elementSpecification'; const elementSpecification: { [identifier: string]: - | { - label: string; - type: 'Data'; - category: TElementCategoryData; - prototype: (name: TElementDataName, label: string) => ElementDataCover; - } - | { - label: string; - type: 'Expression'; - category: TElementCategoryExpression; - prototype: (name: TElementExpressionName, label: string) => ElementExpressionCover; - } - | (IElementInstructionSpecification & { - label: string; - type: 'Statement'; - category: TElementCategoryStatement; - prototype: (name: TElementStatementName, label: string) => ElementStatement; - }) - | (IElementInstructionSpecification & { - label: string; - type: 'Block'; - category: TElementCategoryBlock; - prototype: (name: TElementBlockName, label: string) => ElementBlock; - allowNestInside?: TElementBlockName[] | boolean; - forbidNestInside?: TElementBlockName[] | boolean; - }); + | IElementDataSpecification + | IElementExpressionSpecification + | IElementStatementSpecification + | IElementBlockSpecification; } = { // -- value elements --------------------------------------------------------------------------- 'value-boolean': { From 4ca95ca6808f73e4f096879085ccf05acc5e4daa Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 12 Nov 2021 02:24:10 +0530 Subject: [PATCH 110/176] syntax: [feat] Create syntax warehouse with tests --- package-lock.json | 20 +- package.json | 4 +- src/@types/syntax/elementSpecification.d.ts | 5 + src/@types/syntax/elementsCore.d.ts | 6 +- src/syntax/elements/warehouse.spec.ts | 186 +++++++++++ src/syntax/elements/warehouse.ts | 328 ++++++++++++++++++++ 6 files changed, 541 insertions(+), 8 deletions(-) create mode 100644 src/syntax/elements/warehouse.spec.ts create mode 100644 src/syntax/elements/warehouse.ts diff --git a/package-lock.json b/package-lock.json index d81fc41..c3ebc3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,15 @@ "license": "AGPL-3.0", "devDependencies": { "@types/jest": "^26.0.19", + "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.11.1", "@typescript-eslint/parser": "^4.11.1", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", "jest": "^26.6.3", "ts-jest": "^26.4.4", - "typescript": "^4.1.3" + "typescript": "^4.1.3", + "uuid": "^8.3.2" } }, "node_modules/@babel/code-frame": { @@ -1151,6 +1153,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", + "dev": true + }, "node_modules/@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -6834,7 +6842,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "optional": true, "bin": { "uuid": "dist/bin/uuid" } @@ -8020,6 +8027,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", + "dev": true + }, "@types/yargs": { "version": "15.0.14", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", @@ -12382,8 +12395,7 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true + "dev": true }, "v8-compile-cache": { "version": "2.3.0", diff --git a/package.json b/package.json index 7c29a9c..d210d8c 100644 --- a/package.json +++ b/package.json @@ -16,13 +16,15 @@ "types": "dist", "devDependencies": { "@types/jest": "^26.0.19", + "@types/uuid": "^8.3.1", "@typescript-eslint/eslint-plugin": "^4.11.1", "@typescript-eslint/parser": "^4.11.1", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", "jest": "^26.6.3", "ts-jest": "^26.4.4", - "typescript": "^4.1.3" + "typescript": "^4.1.3", + "uuid": "^8.3.2" }, "scripts": { "build": "rm -rf dist/* && tsc -p .", diff --git a/src/@types/syntax/elementSpecification.d.ts b/src/@types/syntax/elementSpecification.d.ts index 5d3bca4..02ac977 100644 --- a/src/@types/syntax/elementSpecification.d.ts +++ b/src/@types/syntax/elementSpecification.d.ts @@ -1,6 +1,11 @@ import { TData } from './data'; import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elementsCore'; +/** Kind (`Argument`, `Instruction`) of the syntax element. */ +export type TElementKind = 'Argument' | 'Instruction'; +/** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ +export type TElementType = 'Data' | 'Expression' | 'Statement' | 'Block'; + export type TElementCategoryData = 'value' | 'boxidentifier'; export type TElementCategoryExpression = 'operator-math'; export type TElementCategoryStatement = 'box'; diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/syntax/elementsCore.d.ts index e2ff8b3..e48c868 100644 --- a/src/@types/syntax/elementsCore.d.ts +++ b/src/@types/syntax/elementsCore.d.ts @@ -1,5 +1,5 @@ import { TData, TDataName } from './data'; -import { TElementName } from './elementSpecification'; +import { TElementName, TElementKind, TElementType } from './elementSpecification'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { @@ -8,9 +8,9 @@ export interface IElementSyntax { /** Display name of the syntax element. */ label: string; /** Kind (`Argument`, `Instruction`) of the syntax element. */ - kind: 'Argument' | 'Instruction'; + kind: TElementKind; /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ - type: 'Data' | 'Expression' | 'Statement' | 'Block'; + type: TElementType; /** Number of arguments the syntax element registers. */ argCount: number; /** Names of the arguments the syntax element registers. */ diff --git a/src/syntax/elements/warehouse.spec.ts b/src/syntax/elements/warehouse.spec.ts new file mode 100644 index 0000000..1599e29 --- /dev/null +++ b/src/syntax/elements/warehouse.spec.ts @@ -0,0 +1,186 @@ +import { ElementBlock } from './core/elementInstruction'; +import { ElementBoxBoolean } from './program/boxes/elementBox'; +import { ElementOperatorMathPlus } from './program/operators/elementOperatorMath'; +import { ElementValueBoolean } from './program/values/elementValue'; +import { + addInstance, + getInstance, + removeInstance, + getNameCount, + getNameCountAll, + getKindCount, + getKindCountAll, + getTypeCount, + getTypeCountAll, + getCategoryCount, + getCategoryCountAll, + resetWarehouse +} from './warehouse'; + +describe('Syntax Element Warehouse', () => { + let instanceID1: string; + let instanceID2: string; + let instanceID3: string; + let instanceID4: string; + + describe('adding instance', () => { + test('add an instance of a data element', () => { + instanceID1 = addInstance('value-boolean'); + expect(typeof instanceID1).toBe('string'); + }); + + test('add an instance of an expression element', () => { + instanceID2 = addInstance('operator-math-plus'); + expect(typeof instanceID2).toBe('string'); + }); + + test('add an instance of a statement element', () => { + instanceID3 = addInstance('box-boolean'); + expect(typeof instanceID3).toBe('string'); + }); + + test('add an instance of a block element', () => { + instanceID4 = addInstance('block-dummy'); + expect(typeof instanceID4).toBe('string'); + }); + }); + + describe('fetching instance', () => { + test('fetch instance with invalid instance ID and expect null', () => { + expect(getInstance(instanceID1 + '00')).toBe(null); + }); + + test('fetch instance of a data element with valid instance ID and verify', () => { + const { name, kind, type, category, instance } = getInstance(instanceID1)!; + expect(name).toBe('value-boolean'); + expect(kind).toBe('Argument'); + expect(type).toBe('Data'); + expect(category).toBe('value'); + expect(instance instanceof ElementValueBoolean); + }); + + test('fetch instance of an expression element with valid instance ID and verify', () => { + const { name, kind, type, category, instance } = getInstance(instanceID2)!; + expect(name).toBe('operator-math-plus'); + expect(kind).toBe('Argument'); + expect(type).toBe('Expression'); + expect(category).toBe('operator-math'); + expect(instance instanceof ElementOperatorMathPlus); + }); + + test('fetch instance of a statement element with valid instance ID and verify', () => { + const { name, kind, type, category, instance } = getInstance(instanceID3)!; + expect(name).toBe('box-boolean'); + expect(kind).toBe('Instruction'); + expect(type).toBe('Statement'); + expect(category).toBe('box'); + expect(instance instanceof ElementBoxBoolean); + }); + + test('fetch instance of a block element with valid instance ID and verify', () => { + const { name, kind, type, category, instance } = getInstance(instanceID4)!; + expect(name).toBe('block-dummy'); + expect(kind).toBe('Instruction'); + expect(type).toBe('Block'); + expect(category).toBe('block-dummy'); + expect(instance instanceof ElementBlock); + }); + }); + + describe('get stats', () => { + addInstance('value-boolean'); + addInstance('boxidentifier-boolean'); + addInstance('operator-math-divide'); + addInstance('box-number'); + + test('verify name count', () => { + expect(getNameCount('value-boolean')).toBe(2); + expect(getNameCount('value-number')).toBe(0); + }); + + test('verify kind count', () => { + expect(getKindCount('Argument')).toBe(5); + expect(getKindCount('Instruction')).toBe(3); + }); + + test('verify kind count all', () => { + expect(new Set(Object.entries(getKindCountAll()))).toEqual( + new Set([ + ['Argument', 5], + ['Instruction', 3] + ]) + ); + }); + + test('verify type count', () => { + expect(getTypeCount('Data')).toBe(3); + expect(getTypeCount('Expression')).toBe(2); + expect(getTypeCount('Statement')).toBe(2); + expect(getTypeCount('Block')).toBe(1); + }); + + test('verify type count all', () => { + expect(new Set(Object.entries(getTypeCountAll()))).toEqual( + new Set([ + ['Data', 3], + ['Expression', 2], + ['Statement', 2], + ['Block', 1] + ]) + ); + }); + + test('verify category count', () => { + expect(getCategoryCount('value')).toBe(2); + expect(getCategoryCount('boxidentifier')).toBe(1); + expect(getCategoryCount('operator-math')).toBe(2); + expect(getCategoryCount('box')).toBe(2); + expect(getCategoryCount('block-dummy')).toBe(1); + }); + + test('verify category count all', () => { + expect(new Set(Object.entries(getCategoryCountAll()))).toEqual( + new Set([ + ['value', 2], + ['boxidentifier', 1], + ['operator-math', 2], + ['box', 2], + ['block-dummy', 1] + ]) + ); + }); + }); + + describe('removing instance', () => { + test('remove an existing instance ID and verify', () => { + removeInstance(instanceID1); + expect(getInstance(instanceID1)).toBe(null); + expect(getNameCount('value-boolean')).toBe(1); + expect(getKindCount('Argument')).toBe(4); + expect(getKindCount('Instruction')).toBe(3); + expect(getTypeCount('Data')).toBe(2); + expect(getTypeCount('Expression')).toBe(2); + expect(getTypeCount('Statement')).toBe(2); + expect(getTypeCount('Block')).toBe(1); + expect(getCategoryCount('value')).toBe(1); + expect(getCategoryCount('boxidentifier')).toBe(1); + expect(getCategoryCount('operator-math')).toBe(2); + expect(getCategoryCount('box')).toBe(2); + expect(getCategoryCount('block-dummy')).toBe(1); + }); + }); + + describe('reset', () => { + function _checkEmpty(table: { [key: string]: number }): boolean { + return Object.values(table).reduce((a, b) => a + b) === 0; + } + + test('reset warehouse and verify from stats', () => { + resetWarehouse(); + expect(_checkEmpty(getNameCountAll())).toBe(true); + expect(_checkEmpty(getKindCountAll())).toBe(true); + expect(_checkEmpty(getTypeCountAll())).toBe(true); + expect(_checkEmpty(getCategoryCountAll())).toBe(true); + }); + }); +}); diff --git a/src/syntax/elements/warehouse.ts b/src/syntax/elements/warehouse.ts new file mode 100644 index 0000000..a7898c2 --- /dev/null +++ b/src/syntax/elements/warehouse.ts @@ -0,0 +1,328 @@ +import { v4 as uuidv4 } from 'uuid'; + +import { + TElementName, + TElementKind, + TElementType, + TElementCategory, + TElementCategoryData, + TElementCategoryExpression, + TElementCategoryStatement, + TElementCategoryBlock, + TElementDataName, + TElementExpressionName, + TElementStatementName, + TElementBlockName +} from '@/@types/syntax/elementSpecification'; +import elementSpecification from './specification'; + +import { TData } from '@/@types/syntax/data'; +import { ElementSyntax } from './core/elementSyntax'; +import { ElementData, ElementExpression } from './core/elementArgument'; +import { ElementStatement, ElementBlock } from './core/elementInstruction'; + +abstract class ElementDataCover extends ElementData {} +abstract class ElementExpressionCover extends ElementExpression {} + +/** Stores the count of element name. */ +let _elementNameCountMap: { [elementName: string]: number } = {}; +/** Stores the count of element kind. */ +let _elementKindCountMap: { [elementKind: string]: number } = {}; +/** Stores the count of element type. */ +let _elementTypeCountMap: { [elementKind: string]: number } = {}; +/** Stores the count of element category. */ +let _elementCategoryCountMap: { [elementKind: string]: number } = {}; + +/** Stores an extensive table of element name, kind, type, category, instance, by instance ID. */ +let _elementMap: { + [elementID: string]: + | { + instance: ElementDataCover; + type: 'Data'; + name: TElementDataName; + kind: 'Argument'; + category: TElementCategoryData; + } + | { + instance: ElementExpressionCover; + type: 'Expression'; + name: TElementExpressionName; + kind: 'Argument'; + category: TElementCategoryExpression; + } + | { + instance: ElementStatement; + type: 'Statement'; + name: TElementStatementName; + kind: 'Instruction'; + category: TElementCategoryStatement; + } + | { + instance: ElementBlock; + type: 'Block'; + name: TElementBlockName; + kind: 'Instruction'; + category: TElementCategoryBlock; + }; +} = {}; + +/** + * Helper function that creates a new instance, adds to element table, and updates count tables. + * @param elementName - name of the element + * @param instanceID - key for entry in element table + * @param instance - element instance + * @param type - type of the element + * @param category - category of the element + */ +function _addInstance( + elementName: TElementName, + instanceID: string, + instance: ElementSyntax, + type: TElementType, + category: TElementCategory +): void { + const kind = type === 'Data' || type === 'Expression' ? 'Argument' : 'Instruction'; + + switch (type) { + case 'Data': + _elementMap[instanceID] = { + instance: instance as ElementDataCover, + name: elementName as TElementDataName, + type: type as 'Data', + kind: 'Argument', + category: category as TElementCategoryData + }; + break; + case 'Expression': + _elementMap[instanceID] = { + instance: instance as ElementExpressionCover, + name: elementName as TElementExpressionName, + type: type as 'Expression', + kind: 'Argument', + category: category as TElementCategoryExpression + }; + break; + case 'Statement': + _elementMap[instanceID] = { + instance: instance as ElementStatement, + name: elementName as TElementStatementName, + type: type as 'Statement', + kind: 'Instruction', + category: category as TElementCategoryStatement + }; + break; + case 'Block': + _elementMap[instanceID] = { + instance: instance as ElementBlock, + name: elementName as TElementBlockName, + type: type as 'Block', + kind: 'Instruction', + category: category as TElementCategoryBlock + }; + break; + } + + _elementNameCountMap[elementName]++; + _elementKindCountMap[kind]++; + _elementTypeCountMap[type]++; + _elementCategoryCountMap[category]++; +} + +/** + * Creates a new instance, adds to element table, and updates count tables. + * @param elementName - name of the element + * @returns - unique instance ID for the element instance + */ +export function addInstance(elementName: TElementName): string { + const { label, type, category, prototype } = elementSpecification[elementName]; + + let instance: ElementSyntax; + + switch (type) { + case 'Data': + instance = (prototype as (name: TElementDataName, label: string) => ElementDataCover)( + elementName as TElementDataName, + label + ); + break; + case 'Expression': + instance = ( + prototype as (name: TElementExpressionName, label: string) => ElementExpressionCover + )(elementName as TElementExpressionName, label); + break; + case 'Statement': + instance = ( + prototype as (name: TElementStatementName, label: string) => ElementStatement + )(elementName as TElementStatementName, label); + break; + case 'Block': + instance = (prototype as (name: TElementBlockName, label: string) => ElementBlock)( + elementName as TElementBlockName, + label + ); + } + + let instanceID: string; + do { + instanceID = uuidv4(); + } while (instanceID in _elementMap); + + _addInstance(elementName, instanceID, instance, type, category); + + return instanceID; +} + +/** + * Fetches the element instance entry from element table. + * @param instanceID - instance ID of the element in element table + * @returns element instance with additional properties + */ +export function getInstance(instanceID: string): { + name: TElementName; + kind: TElementKind; + type: TElementType; + category: TElementCategory; + instance: ElementSyntax; +} | null { + return instanceID in _elementMap ? { ..._elementMap[instanceID] } : null; +} + +/** + * Removes the element entry corresponding to the instance ID and updates count tables. + * @param instanceID - instance ID of the element in element table + */ +export function removeInstance(instanceID: string): void { + if (!(instanceID in _elementMap)) { + return; + } + + const { name, kind, type, category } = _elementMap[instanceID]; + _elementNameCountMap[name]--; + _elementKindCountMap[kind]--; + _elementTypeCountMap[type]--; + _elementCategoryCountMap[category]--; + delete _elementMap[instanceID]; +} + +/** + * Returns the number of element instances of an element name exists in element table. + * @param name - name of the element + * @returns count of the element instances for the element name + */ +export function getNameCount(name: TElementName): number { + return _elementNameCountMap[name]; +} + +/** + * Generates a table of element instance counts by element name. + * @returns an object with key-value pairs of element name and instance count + */ +export function getNameCountAll(): { [name: string]: number } { + return { ..._elementNameCountMap }; +} + +/** + * Returns the number of element instances of an element kind exists in element table. + * @param kind - kind of the element + * @returns count of the element instances for the element kind + */ +export function getKindCount(kind: TElementKind): number { + return _elementKindCountMap[kind]; +} + +/** + * Generates a table of element instance counts by element kind. + * @returns an object with key-value pairs of element kind and instance count + */ +export function getKindCountAll(): { [kind: string]: number } { + return { ..._elementKindCountMap }; +} + +/** + * Returns the number of element instances of an element type exists in element table. + * @param type - type of the element + * @returns count of the element instances for the element type + */ +export function getTypeCount(type: TElementType): number { + return _elementTypeCountMap[type]; +} + +/** + * Generates a table of element instance counts by element type. + * @returns an object with key-value pairs of element type and instance count + */ +export function getTypeCountAll(): { [type: string]: number } { + return { ..._elementTypeCountMap }; +} + +/** + * Returns the number of element instances of an element category exists in element table. + * @param category - category of the element + * @returns count of the element instances for the element category + */ +export function getCategoryCount(category: TElementCategory): number { + return _elementCategoryCountMap[category]; +} + +/** + * Generates a table of element instance counts by element category. + * @returns an object with key-value pairs of element category and instance count + */ +export function getCategoryCountAll(): { [category: string]: number } { + return { ..._elementCategoryCountMap }; +} + +/** + * Helper that resets the element name count table. + */ +function _resetElementNameCountMap(): void { + _elementNameCountMap = {}; + (Object.keys(elementSpecification) as TElementName[]).forEach( + (elementName) => (_elementNameCountMap[elementName] = 0) + ); +} + +/** + * Helper that resets the element kind count table. + */ +function _resetElementKindCountMap(): void { + _elementKindCountMap = { + Argument: 0, + Instruction: 0 + }; +} + +/** + * Helper that resets the element type count table. + */ +function _resetElementTypeCountMap(): void { + _elementTypeCountMap = { + Data: 0, + Expression: 0, + Statement: 0, + Block: 0 + }; +} + +/** + * Helper that resets the element category count table. + */ +function _resetElementCategoryCountMap(): void { + _elementCategoryCountMap = {}; + const categorySet = new Set(); + Object.entries(elementSpecification).forEach(([_, { category }]) => categorySet.add(category)); + [...categorySet].forEach((category) => (_elementCategoryCountMap[category] = 0)); +} + +/** + * Resets all the count tables and element map. + */ +export function resetWarehouse(): void { + _elementMap = {}; + _resetElementNameCountMap(); + _resetElementKindCountMap(); + _resetElementTypeCountMap(); + _resetElementCategoryCountMap(); +} + +resetWarehouse(); From 82a9e2eb5e6aaec751d6382a97ebd0ada1db5f3a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 15:14:19 +0530 Subject: [PATCH 111/176] refactor: Remove unused code From 4be0a291f472157228c5260f3c19eb7d153ad11c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 15:46:07 +0530 Subject: [PATCH 112/176] refactor: Move type definitions to root of @types --- src/@types/{syntax => }/data.d.ts | 0 src/@types/{syntax => }/elementSpecification.d.ts | 0 src/@types/{syntax => }/elementsCore.d.ts | 0 src/syntax/elements/core/elementArgument.ts | 6 +++--- src/syntax/elements/core/elementInstruction.ts | 10 +++------- src/syntax/elements/core/elementSyntax.spec.ts | 4 ++-- src/syntax/elements/core/elementSyntax.ts | 6 +++--- src/syntax/elements/program/boxes/elementBox.ts | 4 ++-- .../elements/program/boxes/elementBoxIdentifier.ts | 4 ++-- .../elements/program/operators/elementOperatorMath.ts | 4 ++-- src/syntax/elements/program/values/elementValue.ts | 4 ++-- src/syntax/elements/specification.spec.ts | 4 ++-- src/syntax/elements/warehouse.ts | 5 +++-- src/syntax/symbol-table/symbolTable.ts | 2 +- 14 files changed, 25 insertions(+), 28 deletions(-) rename src/@types/{syntax => }/data.d.ts (100%) rename src/@types/{syntax => }/elementSpecification.d.ts (100%) rename src/@types/{syntax => }/elementsCore.d.ts (100%) diff --git a/src/@types/syntax/data.d.ts b/src/@types/data.d.ts similarity index 100% rename from src/@types/syntax/data.d.ts rename to src/@types/data.d.ts diff --git a/src/@types/syntax/elementSpecification.d.ts b/src/@types/elementSpecification.d.ts similarity index 100% rename from src/@types/syntax/elementSpecification.d.ts rename to src/@types/elementSpecification.d.ts diff --git a/src/@types/syntax/elementsCore.d.ts b/src/@types/elementsCore.d.ts similarity index 100% rename from src/@types/syntax/elementsCore.d.ts rename to src/@types/elementsCore.d.ts diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index 36788e3..f03c382 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,7 +1,7 @@ -import { IElementArgument, IElementExpression, IElementData } from '@/@types/syntax/elementsCore'; -import { TData, TDataName } from '@/@types/syntax/data'; +import { TData, TDataName } from '@/@types/data'; import { ElementSyntax } from './elementSyntax'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TElementName } from '@/@types/elementSpecification'; +import { IElementArgument, IElementExpression, IElementData } from '@/@types/elementsCore'; /** * @virtual diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index a1658e2..c11233b 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -1,11 +1,7 @@ -import { - IElementBlock, - IElementInstruction, - IElementStatement -} from '@/@types/syntax/elementsCore'; -import { TData, TDataName } from '@/@types/syntax/data'; +import { TData, TDataName } from '@/@types/data'; import { ElementSyntax } from './elementSyntax'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TElementName } from '@/@types/elementSpecification'; +import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elementsCore'; /** * @virtual diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index efff644..4d080db 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -1,5 +1,5 @@ -import { TDataName } from '@/@types/syntax/data'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TDataName } from '@/@types/data'; +import { TElementName } from '@/@types/elementSpecification'; import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 89384fd..0e23e30 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -1,6 +1,6 @@ -import { IElementSyntax } from '@/@types/syntax/elementsCore'; -import { TDataName } from '@/@types/syntax/data'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TDataName } from '@/@types/data'; +import { TElementName } from '@/@types/elementSpecification'; +import { IElementSyntax } from '@/@types/elementsCore'; /** * @virtual diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/program/boxes/elementBox.ts index a26f097..2560ab7 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/program/boxes/elementBox.ts @@ -1,7 +1,7 @@ -import { TData, TDataName } from '@/@types/syntax/data'; +import { TData, TDataName } from '@/@types/data'; import { ElementStatement } from '../../core/elementInstruction'; import { addGlobalVariable } from '../../../symbol-table/symbolTable'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TElementName } from '@/@types/elementSpecification'; /** * @virtual diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts index 63d88ee..cab6f11 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/program/boxes/elementBoxIdentifier.ts @@ -1,7 +1,7 @@ -import { TData, TDataName } from '@/@types/syntax/data'; +import { TData, TDataName } from '@/@types/data'; import { ElementData } from '../../core/elementArgument'; import { getGlobalVariable } from '../../../symbol-table/symbolTable'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TElementName } from '@/@types/elementSpecification'; /** * @virtual diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/program/operators/elementOperatorMath.ts index 0dfa086..7528462 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.ts +++ b/src/syntax/elements/program/operators/elementOperatorMath.ts @@ -1,5 +1,5 @@ -import { TData, TDataName } from '@/@types/syntax/data'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TData, TDataName } from '@/@types/data'; +import { TElementName } from '@/@types/elementSpecification'; import { ElementExpression } from '../../core/elementArgument'; /** Type definition for the operator symbols */ diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/program/values/elementValue.ts index c3553b8..e8b6417 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/program/values/elementValue.ts @@ -1,5 +1,5 @@ -import { TDataName } from '@/@types/syntax/data'; -import { TElementName } from '@/@types/syntax/elementSpecification'; +import { TDataName } from '@/@types/data'; +import { TElementName } from '@/@types/elementSpecification'; import { ElementData } from '../../core/elementArgument'; /** diff --git a/src/syntax/elements/specification.spec.ts b/src/syntax/elements/specification.spec.ts index 652f083..5bd9f2c 100644 --- a/src/syntax/elements/specification.spec.ts +++ b/src/syntax/elements/specification.spec.ts @@ -3,10 +3,10 @@ import { TElementDataName, TElementExpressionName, TElementStatementName -} from '@/@types/syntax/elementSpecification'; +} from '@/@types/elementSpecification'; import specification from './specification'; -import { TData } from '@/@types/syntax/data'; +import { TData } from '@/@types/data'; import { ElementData, ElementExpression } from './core/elementArgument'; import { ElementStatement, ElementBlock } from './core/elementInstruction'; diff --git a/src/syntax/elements/warehouse.ts b/src/syntax/elements/warehouse.ts index a7898c2..32d89d2 100644 --- a/src/syntax/elements/warehouse.ts +++ b/src/syntax/elements/warehouse.ts @@ -13,10 +13,10 @@ import { TElementExpressionName, TElementStatementName, TElementBlockName -} from '@/@types/syntax/elementSpecification'; +} from '@/@types/elementSpecification'; import elementSpecification from './specification'; -import { TData } from '@/@types/syntax/data'; +import { TData } from '@/@types/data'; import { ElementSyntax } from './core/elementSyntax'; import { ElementData, ElementExpression } from './core/elementArgument'; import { ElementStatement, ElementBlock } from './core/elementInstruction'; @@ -156,6 +156,7 @@ export function addInstance(elementName: TElementName): string { )(elementName as TElementStatementName, label); break; case 'Block': + default: instance = (prototype as (name: TElementBlockName, label: string) => ElementBlock)( elementName as TElementBlockName, label diff --git a/src/syntax/symbol-table/symbolTable.ts b/src/syntax/symbol-table/symbolTable.ts index 1ac8db1..50b65a9 100644 --- a/src/syntax/symbol-table/symbolTable.ts +++ b/src/syntax/symbol-table/symbolTable.ts @@ -1,4 +1,4 @@ -import { TData, TDataName } from '@/@types/syntax/data'; +import { TData, TDataName } from '@/@types/data'; // -- types ---------------------------------------------------------------------------------------- From 6704f9ba73a48dd926e3a095e3388165f1350983 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 16:35:07 +0530 Subject: [PATCH 113/176] refactor: Use syntax and execution as root directories --- jest.config.js | 6 +- src/@types/elementsCore.d.ts | 2 +- ...tSpecification.d.ts => specification.d.ts} | 0 .../symbolTable.spec.ts | 0 .../symbol-table => execution}/symbolTable.ts | 0 .../{program => }/boxes/elementBox.spec.ts | 16 ++--- .../{program => }/boxes/elementBox.ts | 8 +-- .../boxes/elementBoxIdentifier.spec.ts | 4 +- .../boxes/elementBoxIdentifier.ts | 6 +- src/syntax/elements/core/elementArgument.ts | 2 +- .../elements/core/elementInstruction.ts | 2 +- .../elements/core/elementSyntax.spec.ts | 2 +- src/syntax/elements/core/elementSyntax.ts | 2 +- .../operators/elementOperatorMath.spec.ts | 0 .../operators/elementOperatorMath.ts | 4 +- .../{program => }/values/elementValue.spec.ts | 0 .../{program => }/values/elementValue.ts | 4 +- .../{elements => }/specification.spec.ts | 6 +- src/syntax/{elements => }/specification.ts | 71 +++++++++---------- src/syntax/{elements => }/warehouse.spec.ts | 8 +-- src/syntax/{elements => }/warehouse.ts | 8 +-- tsconfig.json | 2 +- 22 files changed, 78 insertions(+), 75 deletions(-) rename src/@types/{elementSpecification.d.ts => specification.d.ts} (100%) rename src/{syntax/symbol-table => execution}/symbolTable.spec.ts (100%) rename src/{syntax/symbol-table => execution}/symbolTable.ts (100%) rename src/syntax/elements/{program => }/boxes/elementBox.spec.ts (92%) rename src/syntax/elements/{program => }/boxes/elementBox.ts (91%) rename src/syntax/elements/{program => }/boxes/elementBoxIdentifier.spec.ts (97%) rename src/syntax/elements/{program => }/boxes/elementBoxIdentifier.ts (94%) rename src/syntax/elements/{program => }/operators/elementOperatorMath.spec.ts (100%) rename src/syntax/elements/{program => }/operators/elementOperatorMath.ts (96%) rename src/syntax/elements/{program => }/values/elementValue.spec.ts (100%) rename src/syntax/elements/{program => }/values/elementValue.ts (95%) rename src/syntax/{elements => }/specification.spec.ts (95%) rename src/syntax/{elements => }/specification.ts (78%) rename src/syntax/{elements => }/warehouse.spec.ts (95%) rename src/syntax/{elements => }/warehouse.ts (97%) diff --git a/jest.config.js b/jest.config.js index d404e0a..53de91f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,5 +1,9 @@ /* eslint-disable no-undef */ module.exports = { preset: 'ts-jest', - testEnvironment: 'node' + testEnvironment: 'node', + rootDir: 'src', + moduleNameMapper: { + '^@/(.*)$': '/$1', + }, }; diff --git a/src/@types/elementsCore.d.ts b/src/@types/elementsCore.d.ts index e48c868..8ba9eef 100644 --- a/src/@types/elementsCore.d.ts +++ b/src/@types/elementsCore.d.ts @@ -1,5 +1,5 @@ import { TData, TDataName } from './data'; -import { TElementName, TElementKind, TElementType } from './elementSpecification'; +import { TElementName, TElementKind, TElementType } from './specification'; /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { diff --git a/src/@types/elementSpecification.d.ts b/src/@types/specification.d.ts similarity index 100% rename from src/@types/elementSpecification.d.ts rename to src/@types/specification.d.ts diff --git a/src/syntax/symbol-table/symbolTable.spec.ts b/src/execution/symbolTable.spec.ts similarity index 100% rename from src/syntax/symbol-table/symbolTable.spec.ts rename to src/execution/symbolTable.spec.ts diff --git a/src/syntax/symbol-table/symbolTable.ts b/src/execution/symbolTable.ts similarity index 100% rename from src/syntax/symbol-table/symbolTable.ts rename to src/execution/symbolTable.ts diff --git a/src/syntax/elements/program/boxes/elementBox.spec.ts b/src/syntax/elements/boxes/elementBox.spec.ts similarity index 92% rename from src/syntax/elements/program/boxes/elementBox.spec.ts rename to src/syntax/elements/boxes/elementBox.spec.ts index 902471e..9c91a7b 100644 --- a/src/syntax/elements/program/boxes/elementBox.spec.ts +++ b/src/syntax/elements/boxes/elementBox.spec.ts @@ -2,9 +2,9 @@ import { ElementBoxBoolean, ElementBoxNumber, ElementBoxString, - ElementBoxGeneric + ElementBoxGeneric, } from './elementBox'; -import { getGlobalVariable } from '../../../symbol-table/symbolTable'; +import { getGlobalVariable } from '@/execution/symbolTable'; describe('Box Elements', () => { test('instantiate and verify instance variables', () => { @@ -24,7 +24,7 @@ describe('Box Elements', () => { elementBoxBoolean.onVisit({ name: 'booleanBox', value: true }); expect(getGlobalVariable('booleanBox')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); }); @@ -36,7 +36,7 @@ describe('Box Elements', () => { elementBoxNumber.onVisit({ name: 'numberBox', value: 5 }); expect(getGlobalVariable('numberBox')).toEqual({ dataType: 'number', - value: 5 + value: 5, }); }); }); @@ -48,7 +48,7 @@ describe('Box Elements', () => { elementBoxString.onVisit({ name: 'stringBox', value: 'foo' }); expect(getGlobalVariable('stringBox')).toEqual({ dataType: 'string', - value: 'foo' + value: 'foo', }); }); }); @@ -59,7 +59,7 @@ describe('Box Elements', () => { elementBoxGeneric.onVisit({ name: 'genericBox', value: true }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); @@ -68,7 +68,7 @@ describe('Box Elements', () => { elementBoxGeneric.onVisit({ name: 'genericBox', value: 5 }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'number', - value: 5 + value: 5, }); }); @@ -77,7 +77,7 @@ describe('Box Elements', () => { elementBoxGeneric.onVisit({ name: 'genericBox', value: 'foo' }); expect(getGlobalVariable('genericBox')).toEqual({ dataType: 'string', - value: 'foo' + value: 'foo', }); }); }); diff --git a/src/syntax/elements/program/boxes/elementBox.ts b/src/syntax/elements/boxes/elementBox.ts similarity index 91% rename from src/syntax/elements/program/boxes/elementBox.ts rename to src/syntax/elements/boxes/elementBox.ts index 2560ab7..b64db23 100644 --- a/src/syntax/elements/program/boxes/elementBox.ts +++ b/src/syntax/elements/boxes/elementBox.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; -import { ElementStatement } from '../../core/elementInstruction'; -import { addGlobalVariable } from '../../../symbol-table/symbolTable'; -import { TElementName } from '@/@types/elementSpecification'; +import { addGlobalVariable } from '@/execution/symbolTable'; +import { ElementStatement } from '../core/elementInstruction'; +import { TElementName } from '@/@types/specification'; /** * @virtual @@ -15,7 +15,7 @@ abstract class ElementBox extends ElementStatement { constructor(name: TElementName, label: string, types: TDataName[]) { super(name, label, { name: ['string'], - value: types + value: types, }); } diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts similarity index 97% rename from src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts rename to src/syntax/elements/boxes/elementBoxIdentifier.spec.ts index 7fc5a25..922aed6 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.spec.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts @@ -2,9 +2,9 @@ import { ElementBoxIdentifierGeneric, ElementBoxIdentifierBoolean, ElementBoxIdentifierNumber, - ElementBoxIdentifierString + ElementBoxIdentifierString, } from './elementBoxIdentifier'; -import { addGlobalVariable } from '../../../symbol-table/symbolTable'; +import { addGlobalVariable } from '@/execution/symbolTable'; addGlobalVariable('myVar1', 'boolean', true); addGlobalVariable('myVar2', 'number', 5); diff --git a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts b/src/syntax/elements/boxes/elementBoxIdentifier.ts similarity index 94% rename from src/syntax/elements/program/boxes/elementBoxIdentifier.ts rename to src/syntax/elements/boxes/elementBoxIdentifier.ts index cab6f11..e7e33ab 100644 --- a/src/syntax/elements/program/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; -import { ElementData } from '../../core/elementArgument'; -import { getGlobalVariable } from '../../../symbol-table/symbolTable'; -import { TElementName } from '@/@types/elementSpecification'; +import { ElementData } from '../core/elementArgument'; +import { getGlobalVariable } from '@/execution/symbolTable'; +import { TElementName } from '@/@types/specification'; /** * @virtual diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index f03c382..e9fd957 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { ElementSyntax } from './elementSyntax'; -import { TElementName } from '@/@types/elementSpecification'; +import { TElementName } from '@/@types/specification'; import { IElementArgument, IElementExpression, IElementData } from '@/@types/elementsCore'; /** diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index c11233b..daf7289 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { ElementSyntax } from './elementSyntax'; -import { TElementName } from '@/@types/elementSpecification'; +import { TElementName } from '@/@types/specification'; import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elementsCore'; /** diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 4d080db..c3c1937 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -1,5 +1,5 @@ import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/elementSpecification'; +import { TElementName } from '@/@types/specification'; import { ElementSyntax } from './elementSyntax'; class DummyElementSyntax extends ElementSyntax { diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 0e23e30..7abe5dd 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -1,5 +1,5 @@ import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/elementSpecification'; +import { TElementName } from '@/@types/specification'; import { IElementSyntax } from '@/@types/elementsCore'; /** diff --git a/src/syntax/elements/program/operators/elementOperatorMath.spec.ts b/src/syntax/elements/operators/elementOperatorMath.spec.ts similarity index 100% rename from src/syntax/elements/program/operators/elementOperatorMath.spec.ts rename to src/syntax/elements/operators/elementOperatorMath.spec.ts diff --git a/src/syntax/elements/program/operators/elementOperatorMath.ts b/src/syntax/elements/operators/elementOperatorMath.ts similarity index 96% rename from src/syntax/elements/program/operators/elementOperatorMath.ts rename to src/syntax/elements/operators/elementOperatorMath.ts index 7528462..2636b3b 100644 --- a/src/syntax/elements/program/operators/elementOperatorMath.ts +++ b/src/syntax/elements/operators/elementOperatorMath.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/elementSpecification'; -import { ElementExpression } from '../../core/elementArgument'; +import { TElementName } from '@/@types/specification'; +import { ElementExpression } from '../core/elementArgument'; /** Type definition for the operator symbols */ type TOperator = '+' | '-' | '*' | '/' | '%'; diff --git a/src/syntax/elements/program/values/elementValue.spec.ts b/src/syntax/elements/values/elementValue.spec.ts similarity index 100% rename from src/syntax/elements/program/values/elementValue.spec.ts rename to src/syntax/elements/values/elementValue.spec.ts diff --git a/src/syntax/elements/program/values/elementValue.ts b/src/syntax/elements/values/elementValue.ts similarity index 95% rename from src/syntax/elements/program/values/elementValue.ts rename to src/syntax/elements/values/elementValue.ts index e8b6417..45eaa9d 100644 --- a/src/syntax/elements/program/values/elementValue.ts +++ b/src/syntax/elements/values/elementValue.ts @@ -1,6 +1,6 @@ import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/elementSpecification'; -import { ElementData } from '../../core/elementArgument'; +import { TElementName } from '@/@types/specification'; +import { ElementData } from '../core/elementArgument'; /** * @virtual diff --git a/src/syntax/elements/specification.spec.ts b/src/syntax/specification.spec.ts similarity index 95% rename from src/syntax/elements/specification.spec.ts rename to src/syntax/specification.spec.ts index 5bd9f2c..29d9c64 100644 --- a/src/syntax/elements/specification.spec.ts +++ b/src/syntax/specification.spec.ts @@ -3,12 +3,12 @@ import { TElementDataName, TElementExpressionName, TElementStatementName -} from '@/@types/elementSpecification'; +} from '@/@types/specification'; import specification from './specification'; import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from './core/elementArgument'; -import { ElementStatement, ElementBlock } from './core/elementInstruction'; +import { ElementData, ElementExpression } from './elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; abstract class ElementDataCover extends ElementData {} abstract class ElementExpressionCover extends ElementExpression {} diff --git a/src/syntax/elements/specification.ts b/src/syntax/specification.ts similarity index 78% rename from src/syntax/elements/specification.ts rename to src/syntax/specification.ts index 58ebd05..f4c932c 100644 --- a/src/syntax/elements/specification.ts +++ b/src/syntax/specification.ts @@ -1,36 +1,40 @@ import { + IElementDataSpecification, + IElementExpressionSpecification, + IElementStatementSpecification, + IElementBlockSpecification, TElementBlockName, TElementDataName, TElementExpressionName, - TElementStatementName -} from '@/@types/syntax/elementSpecification'; + TElementStatementName, +} from '@/@types/specification'; -import { ElementBlock } from './core/elementInstruction'; +import { ElementBlock } from './elements/core/elementInstruction'; import { ElementValueBoolean, ElementValueNumber, - ElementValueString -} from './program/values/elementValue'; + ElementValueString, +} from './elements/values/elementValue'; import { ElementBoxGeneric, ElementBoxBoolean, ElementBoxNumber, - ElementBoxString -} from './program/boxes/elementBox'; + ElementBoxString, +} from './elements/boxes/elementBox'; import { ElementBoxIdentifierGeneric, ElementBoxIdentifierBoolean, ElementBoxIdentifierNumber, - ElementBoxIdentifierString -} from './program/boxes/elementBoxIdentifier'; + ElementBoxIdentifierString, +} from './elements/boxes/elementBoxIdentifier'; import { ElementOperatorMathPlus, ElementOperatorMathMinus, ElementOperatorMathTimes, ElementOperatorMathDivide, - ElementOperatorMathModulus -} from './program/operators/elementOperatorMath'; + ElementOperatorMathModulus, +} from './elements/operators/elementOperatorMath'; class ElementBlockDummy extends ElementBlock { constructor(name: TElementBlockName, label: string) { @@ -54,13 +58,6 @@ class ElementBlockDummy extends ElementBlock { } } -import { - IElementDataSpecification, - IElementExpressionSpecification, - IElementStatementSpecification, - IElementBlockSpecification -} from '@/@types/syntax/elementSpecification'; - const elementSpecification: { [identifier: string]: | IElementDataSpecification @@ -73,19 +70,19 @@ const elementSpecification: { label: 'true', type: 'Data', category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueBoolean(name, label) + prototype: (name: TElementDataName, label: string) => new ElementValueBoolean(name, label), }, 'value-number': { label: '0', type: 'Data', category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueNumber(name, label) + prototype: (name: TElementDataName, label: string) => new ElementValueNumber(name, label), }, 'value-string': { label: 'string', type: 'Data', category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueString(name, label) + prototype: (name: TElementDataName, label: string) => new ElementValueString(name, label), }, // -- box elements ----------------------------------------------------------------------------- 'box-generic': { @@ -93,26 +90,28 @@ const elementSpecification: { type: 'Statement', category: 'box', prototype: (name: TElementStatementName, label: string) => - new ElementBoxGeneric(name, label) + new ElementBoxGeneric(name, label), }, 'box-boolean': { label: 'Box (boolean)', type: 'Statement', category: 'box', prototype: (name: TElementStatementName, label: string) => - new ElementBoxBoolean(name, label) + new ElementBoxBoolean(name, label), }, 'box-number': { label: 'Box (number)', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName, label: string) => new ElementBoxNumber(name, label) + prototype: (name: TElementStatementName, label: string) => + new ElementBoxNumber(name, label), }, 'box-string': { label: 'Box (string)', type: 'Statement', category: 'box', - prototype: (name: TElementStatementName, label: string) => new ElementBoxString(name, label) + prototype: (name: TElementStatementName, label: string) => + new ElementBoxString(name, label), }, // -- box identifier elements ------------------------------------------------------------------ 'boxidentifier-generic': { @@ -120,28 +119,28 @@ const elementSpecification: { type: 'Data', category: 'boxidentifier', prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierGeneric(name, label) + new ElementBoxIdentifierGeneric(name, label), }, 'boxidentifier-boolean': { label: 'Box 1', type: 'Data', category: 'boxidentifier', prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierBoolean(name, label) + new ElementBoxIdentifierBoolean(name, label), }, 'boxidentifier-number': { label: 'Box 1', type: 'Data', category: 'boxidentifier', prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierNumber(name, label) + new ElementBoxIdentifierNumber(name, label), }, 'boxidentifier-string': { label: 'Box 1', type: 'Data', category: 'boxidentifier', prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierString(name, label) + new ElementBoxIdentifierString(name, label), }, // -- math operator elements ------------------------------------------------------------------- 'operator-math-plus': { @@ -149,43 +148,43 @@ const elementSpecification: { type: 'Expression', category: 'operator-math', prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathPlus(name, label) + new ElementOperatorMathPlus(name, label), }, 'operator-math-minus': { label: '-', type: 'Expression', category: 'operator-math', prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathMinus(name, label) + new ElementOperatorMathMinus(name, label), }, 'operator-math-times': { label: '\u00d7', type: 'Expression', category: 'operator-math', prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathTimes(name, label) + new ElementOperatorMathTimes(name, label), }, 'operator-math-divide': { label: '\u00f7', type: 'Expression', category: 'operator-math', prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathDivide(name, label) + new ElementOperatorMathDivide(name, label), }, 'operator-math-modulus': { label: '%', type: 'Expression', category: 'operator-math', prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathModulus(name, label) + new ElementOperatorMathModulus(name, label), }, // -- dummy block element ---------------------------------------------------------------------- 'block-dummy': { label: 'dummy', type: 'Block', category: 'block-dummy', - prototype: (name: TElementBlockName, label: string) => new ElementBlockDummy(name, label) - } + prototype: (name: TElementBlockName, label: string) => new ElementBlockDummy(name, label), + }, }; export default elementSpecification; diff --git a/src/syntax/elements/warehouse.spec.ts b/src/syntax/warehouse.spec.ts similarity index 95% rename from src/syntax/elements/warehouse.spec.ts rename to src/syntax/warehouse.spec.ts index 1599e29..cba313b 100644 --- a/src/syntax/elements/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -1,7 +1,7 @@ -import { ElementBlock } from './core/elementInstruction'; -import { ElementBoxBoolean } from './program/boxes/elementBox'; -import { ElementOperatorMathPlus } from './program/operators/elementOperatorMath'; -import { ElementValueBoolean } from './program/values/elementValue'; +import { ElementBlock } from './elements/core/elementInstruction'; +import { ElementBoxBoolean } from './elements/boxes/elementBox'; +import { ElementOperatorMathPlus } from './elements/operators/elementOperatorMath'; +import { ElementValueBoolean } from './elements/values/elementValue'; import { addInstance, getInstance, diff --git a/src/syntax/elements/warehouse.ts b/src/syntax/warehouse.ts similarity index 97% rename from src/syntax/elements/warehouse.ts rename to src/syntax/warehouse.ts index 32d89d2..2b14133 100644 --- a/src/syntax/elements/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -13,13 +13,13 @@ import { TElementExpressionName, TElementStatementName, TElementBlockName -} from '@/@types/elementSpecification'; +} from '@/@types/specification'; import elementSpecification from './specification'; import { TData } from '@/@types/data'; -import { ElementSyntax } from './core/elementSyntax'; -import { ElementData, ElementExpression } from './core/elementArgument'; -import { ElementStatement, ElementBlock } from './core/elementInstruction'; +import { ElementSyntax } from './elements/core/elementSyntax'; +import { ElementData, ElementExpression } from './elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; abstract class ElementDataCover extends ElementData {} abstract class ElementExpressionCover extends ElementExpression {} diff --git a/tsconfig.json b/tsconfig.json index cfbbd3f..b89edbe 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -47,7 +47,7 @@ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - "@/*": ["./*"] + "@/*": ["./*"], }, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ From 396ee9758bf631469f24d33c3090094b4d63e52f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 16:41:18 +0530 Subject: [PATCH 114/176] prettier: Use trailing commas in objects and arrays --- .prettierrc.json | 2 +- package-lock.json | 19 ++++++++++ package.json | 4 ++- src/execution/symbolTable.spec.ts | 36 +++++++++---------- .../elements/core/elementSyntax.spec.ts | 4 +-- .../operators/elementOperatorMath.spec.ts | 2 +- src/syntax/specification.spec.ts | 2 +- src/syntax/warehouse.spec.ts | 8 ++--- src/syntax/warehouse.ts | 14 ++++---- 9 files changed, 56 insertions(+), 35 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index fb3cbbc..8c24ac1 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -5,7 +5,7 @@ "semi": true, "singleQuote": true, "quoteProps": "consistent", - "trailingComma": "none", + "trailingComma": "es5", "bracketSpacing": true, "arrowParens": "always", "endOfLine": "lf", diff --git a/package-lock.json b/package-lock.json index c3ebc3d..ec54cf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", "jest": "^26.6.3", + "prettier": "^2.4.1", "ts-jest": "^26.4.4", "typescript": "^4.1.3", "uuid": "^8.3.2" @@ -5167,6 +5168,18 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -11090,6 +11103,12 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", diff --git a/package.json b/package.json index d210d8c..05e0a33 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,15 @@ "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", "jest": "^26.6.3", + "prettier": "^2.4.1", "ts-jest": "^26.4.4", "typescript": "^4.1.3", "uuid": "^8.3.2" }, "scripts": { "build": "rm -rf dist/* && tsc -p .", + "test": "jest --passWithNoTests", "lint": "eslint src/**/*.ts", - "test": "jest --passWithNoTests" + "prettify": "prettier --write src/@types src/syntax src/execution" } } diff --git a/src/execution/symbolTable.spec.ts b/src/execution/symbolTable.spec.ts index e0fdb9b..3dd55d8 100644 --- a/src/execution/symbolTable.spec.ts +++ b/src/execution/symbolTable.spec.ts @@ -6,7 +6,7 @@ describe('Symbol Table', () => { symbolTable.addGlobalVariable('myVar1', 'number', 5); expect(symbolTable.getGlobalVariable('myVar1')).toEqual({ dataType: 'number', - value: 5 + value: 5, }); }); @@ -14,7 +14,7 @@ describe('Symbol Table', () => { symbolTable.addGlobalVariable('myVar2', 'string', 'foo'); expect(symbolTable.getGlobalVariable('myVar2')).toEqual({ dataType: 'string', - value: 'foo' + value: 'foo', }); }); @@ -22,7 +22,7 @@ describe('Symbol Table', () => { symbolTable.addGlobalVariable('myVar3', 'boolean', true); expect(symbolTable.getGlobalVariable('myVar3')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); @@ -30,7 +30,7 @@ describe('Symbol Table', () => { symbolTable.addGlobalVariable('myVar1', 'boolean', true); expect(symbolTable.getGlobalVariable('myVar1')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); @@ -42,7 +42,7 @@ describe('Symbol Table', () => { symbolTable.addGlobalVariable('myVarx', 'number', 0); expect(symbolTable.getGlobalVariable('myVarx')).toEqual({ dataType: 'number', - value: 0 + value: 0, }); symbolTable.removeGlobalVariable('myVarx'); expect(symbolTable.getGlobalVariable('myVarx')).toBe(null); @@ -54,7 +54,7 @@ describe('Symbol Table', () => { symbolTable.addProgramVariable('myVar1', 'number', 5, 'myProgram1'); expect(symbolTable.getProgramVariable('myVar1', 'myProgram1')).toEqual({ dataType: 'number', - value: 5 + value: 5, }); }); @@ -62,7 +62,7 @@ describe('Symbol Table', () => { symbolTable.addProgramVariable('myVar2', 'string', 'foo', 'myProgram1'); expect(symbolTable.getProgramVariable('myVar2', 'myProgram1')).toEqual({ dataType: 'string', - value: 'foo' + value: 'foo', }); }); @@ -70,7 +70,7 @@ describe('Symbol Table', () => { symbolTable.addProgramVariable('myVar1', 'boolean', true, 'myProgram2'); expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); @@ -78,7 +78,7 @@ describe('Symbol Table', () => { symbolTable.addProgramVariable('myVar1', 'string', 'bar', 'myProgram2'); expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ dataType: 'string', - value: 'bar' + value: 'bar', }); }); @@ -100,7 +100,7 @@ describe('Symbol Table', () => { symbolTable.addRoutineVariable('myVar1', 'number', 5, 'myRoutine1'); expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine1')).toEqual({ dataType: 'number', - value: 5 + value: 5, }); }); @@ -108,7 +108,7 @@ describe('Symbol Table', () => { symbolTable.addRoutineVariable('myVar2', 'string', 'foo', 'myRoutine1'); expect(symbolTable.getRoutineVariable('myVar2', 'myRoutine1')).toEqual({ dataType: 'string', - value: 'foo' + value: 'foo', }); }); @@ -116,7 +116,7 @@ describe('Symbol Table', () => { symbolTable.addRoutineVariable('myVar1', 'boolean', true, 'myRoutine2'); expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine2')).toEqual({ dataType: 'boolean', - value: true + value: true, }); }); @@ -124,7 +124,7 @@ describe('Symbol Table', () => { symbolTable.addRoutineVariable('myVar1', 'string', 'bar', 'myRoutine2'); expect(symbolTable.getRoutineVariable('myVar1', 'myRoutine2')).toEqual({ dataType: 'string', - value: 'bar' + value: 'bar', }); }); @@ -153,7 +153,7 @@ describe('Symbol Table', () => { new Set([ ['myVar1', 'boolean'], ['myVar2', 'string'], - ['myVar3', 'boolean'] + ['myVar3', 'boolean'], ]) ); }); @@ -170,7 +170,7 @@ describe('Symbol Table', () => { ).toEqual( new Set([ ['myVar1', 'number'], - ['myVar2', 'string'] + ['myVar2', 'string'], ]) ); }); @@ -192,7 +192,7 @@ describe('Symbol Table', () => { expect(new Set(Object.entries(variables['myProgram1']))).toEqual( new Set([ ['myVar1', 'number'], - ['myVar2', 'string'] + ['myVar2', 'string'], ]) ); expect(new Set(Object.entries(variables['myProgram2']))).toEqual( @@ -212,7 +212,7 @@ describe('Symbol Table', () => { ).toEqual( new Set([ ['myVar1', 'number'], - ['myVar2', 'string'] + ['myVar2', 'string'], ]) ); }); @@ -234,7 +234,7 @@ describe('Symbol Table', () => { expect(new Set(Object.entries(variables['myRoutine1']))).toEqual( new Set([ ['myVar1', 'number'], - ['myVar2', 'string'] + ['myVar2', 'string'], ]) ); expect(new Set(Object.entries(variables['myRoutine2']))).toEqual( diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index c3c1937..03b1831 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -83,7 +83,7 @@ describe('class ElementSyntax', () => { { arg1: ['number'], arg2: ['string', 'number'], - arg3: ['boolean'] + arg3: ['boolean'], } ); expect(dummyElementSyntax.name).toBe('dummy'); @@ -95,7 +95,7 @@ describe('class ElementSyntax', () => { expect(dummyElementSyntax.argMap).toEqual({ arg1: ['number'], arg2: ['string', 'number'], - arg3: ['boolean'] + arg3: ['boolean'], }); }); }); diff --git a/src/syntax/elements/operators/elementOperatorMath.spec.ts b/src/syntax/elements/operators/elementOperatorMath.spec.ts index 06ef8ae..39e3c44 100644 --- a/src/syntax/elements/operators/elementOperatorMath.spec.ts +++ b/src/syntax/elements/operators/elementOperatorMath.spec.ts @@ -3,7 +3,7 @@ import { ElementOperatorMathMinus, ElementOperatorMathTimes, ElementOperatorMathDivide, - ElementOperatorMathModulus + ElementOperatorMathModulus, } from './elementOperatorMath'; describe('Operator Elements', () => { diff --git a/src/syntax/specification.spec.ts b/src/syntax/specification.spec.ts index 29d9c64..59e35bb 100644 --- a/src/syntax/specification.spec.ts +++ b/src/syntax/specification.spec.ts @@ -2,7 +2,7 @@ import { TElementBlockName, TElementDataName, TElementExpressionName, - TElementStatementName + TElementStatementName, } from '@/@types/specification'; import specification from './specification'; diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse.spec.ts index cba313b..67b5550 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -14,7 +14,7 @@ import { getTypeCountAll, getCategoryCount, getCategoryCountAll, - resetWarehouse + resetWarehouse, } from './warehouse'; describe('Syntax Element Warehouse', () => { @@ -107,7 +107,7 @@ describe('Syntax Element Warehouse', () => { expect(new Set(Object.entries(getKindCountAll()))).toEqual( new Set([ ['Argument', 5], - ['Instruction', 3] + ['Instruction', 3], ]) ); }); @@ -125,7 +125,7 @@ describe('Syntax Element Warehouse', () => { ['Data', 3], ['Expression', 2], ['Statement', 2], - ['Block', 1] + ['Block', 1], ]) ); }); @@ -145,7 +145,7 @@ describe('Syntax Element Warehouse', () => { ['boxidentifier', 1], ['operator-math', 2], ['box', 2], - ['block-dummy', 1] + ['block-dummy', 1], ]) ); }); diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index 2b14133..6420a58 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -12,7 +12,7 @@ import { TElementDataName, TElementExpressionName, TElementStatementName, - TElementBlockName + TElementBlockName, } from '@/@types/specification'; import elementSpecification from './specification'; @@ -90,7 +90,7 @@ function _addInstance( name: elementName as TElementDataName, type: type as 'Data', kind: 'Argument', - category: category as TElementCategoryData + category: category as TElementCategoryData, }; break; case 'Expression': @@ -99,7 +99,7 @@ function _addInstance( name: elementName as TElementExpressionName, type: type as 'Expression', kind: 'Argument', - category: category as TElementCategoryExpression + category: category as TElementCategoryExpression, }; break; case 'Statement': @@ -108,7 +108,7 @@ function _addInstance( name: elementName as TElementStatementName, type: type as 'Statement', kind: 'Instruction', - category: category as TElementCategoryStatement + category: category as TElementCategoryStatement, }; break; case 'Block': @@ -117,7 +117,7 @@ function _addInstance( name: elementName as TElementBlockName, type: type as 'Block', kind: 'Instruction', - category: category as TElementCategoryBlock + category: category as TElementCategoryBlock, }; break; } @@ -289,7 +289,7 @@ function _resetElementNameCountMap(): void { function _resetElementKindCountMap(): void { _elementKindCountMap = { Argument: 0, - Instruction: 0 + Instruction: 0, }; } @@ -301,7 +301,7 @@ function _resetElementTypeCountMap(): void { Data: 0, Expression: 0, Statement: 0, - Block: 0 + Block: 0, }; } From 1f86e9967b46330af253597b1b7ea46085d5caf6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 16:55:20 +0530 Subject: [PATCH 115/176] refactor: Add visual markers to separate import code --- src/@types/elementsCore.d.ts | 2 + src/@types/specification.d.ts | 2 + src/execution/symbolTable.spec.ts | 2 + src/execution/symbolTable.ts | 2 +- src/syntax/elements/boxes/elementBox.spec.ts | 2 + src/syntax/elements/boxes/elementBox.ts | 7 +- .../boxes/elementBoxIdentifier.spec.ts | 2 + .../elements/boxes/elementBoxIdentifier.ts | 5 +- .../elements/core/elementArgument.spec.ts | 4 +- src/syntax/elements/core/elementArgument.ts | 5 +- .../elements/core/elementInstruction.ts | 5 +- .../elements/core/elementSyntax.spec.ts | 2 + src/syntax/elements/core/elementSyntax.ts | 2 + .../operators/elementOperatorMath.spec.ts | 2 + .../elements/operators/elementOperatorMath.ts | 2 + .../elements/values/elementValue.spec.ts | 2 + src/syntax/elements/values/elementValue.ts | 3 + src/syntax/specification.spec.ts | 2 + src/syntax/specification.ts | 3 + src/syntax/warehouse.spec.ts | 2 + src/syntax/warehouse.ts | 111 ++++++++++-------- 21 files changed, 112 insertions(+), 57 deletions(-) diff --git a/src/@types/elementsCore.d.ts b/src/@types/elementsCore.d.ts index 8ba9eef..cc60510 100644 --- a/src/@types/elementsCore.d.ts +++ b/src/@types/elementsCore.d.ts @@ -1,6 +1,8 @@ import { TData, TDataName } from './data'; import { TElementName, TElementKind, TElementType } from './specification'; +// ------------------------------------------------------------------------------------------------- + /** Interface for the class that implements a syntax element. */ export interface IElementSyntax { /** Name of the syntax element. */ diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index 02ac977..61e6e6a 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -1,6 +1,8 @@ import { TData } from './data'; import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elementsCore'; +// ------------------------------------------------------------------------------------------------- + /** Kind (`Argument`, `Instruction`) of the syntax element. */ export type TElementKind = 'Argument' | 'Instruction'; /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ diff --git a/src/execution/symbolTable.spec.ts b/src/execution/symbolTable.spec.ts index 3dd55d8..2cd54ba 100644 --- a/src/execution/symbolTable.spec.ts +++ b/src/execution/symbolTable.spec.ts @@ -1,5 +1,7 @@ import * as symbolTable from './symbolTable'; +// ------------------------------------------------------------------------------------------------- + describe('Symbol Table', () => { describe('global variables', () => { test('add a new number variable and verify entry by fetching the entry for the variable', () => { diff --git a/src/execution/symbolTable.ts b/src/execution/symbolTable.ts index 50b65a9..f3c1ed4 100644 --- a/src/execution/symbolTable.ts +++ b/src/execution/symbolTable.ts @@ -22,7 +22,7 @@ let _programTable: { [program: string]: IVariableTable } = {}; /** Stores the routines' table. */ let _routineTable: { [routine: string]: IVariableTable } = {}; -// -- private function ----------------------------------------------------------------------------- +// -- private functions ---------------------------------------------------------------------------- /** * A helper that adds a variable for a program or routine. If already present, overwrites it. diff --git a/src/syntax/elements/boxes/elementBox.spec.ts b/src/syntax/elements/boxes/elementBox.spec.ts index 9c91a7b..61fd5fe 100644 --- a/src/syntax/elements/boxes/elementBox.spec.ts +++ b/src/syntax/elements/boxes/elementBox.spec.ts @@ -6,6 +6,8 @@ import { } from './elementBox'; import { getGlobalVariable } from '@/execution/symbolTable'; +// ------------------------------------------------------------------------------------------------- + describe('Box Elements', () => { test('instantiate and verify instance variables', () => { const elementBox = new ElementBoxGeneric('box-generic', 'Box'); diff --git a/src/syntax/elements/boxes/elementBox.ts b/src/syntax/elements/boxes/elementBox.ts index b64db23..b5d79c1 100644 --- a/src/syntax/elements/boxes/elementBox.ts +++ b/src/syntax/elements/boxes/elementBox.ts @@ -1,8 +1,11 @@ import { TData, TDataName } from '@/@types/data'; -import { addGlobalVariable } from '@/execution/symbolTable'; -import { ElementStatement } from '../core/elementInstruction'; import { TElementName } from '@/@types/specification'; +import { ElementStatement } from '../core/elementInstruction'; +import { addGlobalVariable } from '@/execution/symbolTable'; + +// ------------------------------------------------------------------------------------------------- + /** * @virtual * @class diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts index 922aed6..027f534 100644 --- a/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts @@ -6,6 +6,8 @@ import { } from './elementBoxIdentifier'; import { addGlobalVariable } from '@/execution/symbolTable'; +// ------------------------------------------------------------------------------------------------- + addGlobalVariable('myVar1', 'boolean', true); addGlobalVariable('myVar2', 'number', 5); addGlobalVariable('myVar3', 'string', 'foo'); diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.ts b/src/syntax/elements/boxes/elementBoxIdentifier.ts index e7e33ab..ec4afbc 100644 --- a/src/syntax/elements/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.ts @@ -1,7 +1,10 @@ import { TData, TDataName } from '@/@types/data'; +import { TElementName } from '@/@types/specification'; + import { ElementData } from '../core/elementArgument'; import { getGlobalVariable } from '@/execution/symbolTable'; -import { TElementName } from '@/@types/specification'; + +// ------------------------------------------------------------------------------------------------- /** * @virtual diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts index 0cf4055..906abca 100644 --- a/src/syntax/elements/core/elementArgument.spec.ts +++ b/src/syntax/elements/core/elementArgument.spec.ts @@ -1,4 +1,6 @@ -import { ElementArgument, ElementExpression, ElementData } from './elementArgument'; +import { ElementArgument, ElementData, ElementExpression } from './elementArgument'; + +// ------------------------------------------------------------------------------------------------- class DummyElementArgument extends ElementArgument {} diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts index e9fd957..8c44d66 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/core/elementArgument.ts @@ -1,8 +1,11 @@ import { TData, TDataName } from '@/@types/data'; -import { ElementSyntax } from './elementSyntax'; import { TElementName } from '@/@types/specification'; import { IElementArgument, IElementExpression, IElementData } from '@/@types/elementsCore'; +import { ElementSyntax } from './elementSyntax'; + +// ------------------------------------------------------------------------------------------------- + /** * @virtual * @class diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts index daf7289..ce5a2a4 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/core/elementInstruction.ts @@ -1,8 +1,11 @@ import { TData, TDataName } from '@/@types/data'; -import { ElementSyntax } from './elementSyntax'; import { TElementName } from '@/@types/specification'; import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elementsCore'; +import { ElementSyntax } from './elementSyntax'; + +// ------------------------------------------------------------------------------------------------- + /** * @virtual * @class diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 03b1831..22fdb06 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -2,6 +2,8 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; import { ElementSyntax } from './elementSyntax'; +// ------------------------------------------------------------------------------------------------- + class DummyElementSyntax extends ElementSyntax { constructor( name: TElementName, diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 7abe5dd..8aadece 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -2,6 +2,8 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; import { IElementSyntax } from '@/@types/elementsCore'; +// ------------------------------------------------------------------------------------------------- + /** * @virtual * @class diff --git a/src/syntax/elements/operators/elementOperatorMath.spec.ts b/src/syntax/elements/operators/elementOperatorMath.spec.ts index 39e3c44..e5408bc 100644 --- a/src/syntax/elements/operators/elementOperatorMath.spec.ts +++ b/src/syntax/elements/operators/elementOperatorMath.spec.ts @@ -6,6 +6,8 @@ import { ElementOperatorMathModulus, } from './elementOperatorMath'; +// ------------------------------------------------------------------------------------------------- + describe('Operator Elements', () => { describe('class ElementOperatorPlus', () => { const elementOperatorPlus = new ElementOperatorMathPlus('operator-math-plus', '+'); diff --git a/src/syntax/elements/operators/elementOperatorMath.ts b/src/syntax/elements/operators/elementOperatorMath.ts index 2636b3b..25f1ae5 100644 --- a/src/syntax/elements/operators/elementOperatorMath.ts +++ b/src/syntax/elements/operators/elementOperatorMath.ts @@ -2,6 +2,8 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; import { ElementExpression } from '../core/elementArgument'; +// ------------------------------------------------------------------------------------------------- + /** Type definition for the operator symbols */ type TOperator = '+' | '-' | '*' | '/' | '%'; diff --git a/src/syntax/elements/values/elementValue.spec.ts b/src/syntax/elements/values/elementValue.spec.ts index 98297bf..806c1c7 100644 --- a/src/syntax/elements/values/elementValue.spec.ts +++ b/src/syntax/elements/values/elementValue.spec.ts @@ -1,5 +1,7 @@ import { ElementValueBoolean, ElementValueNumber, ElementValueString } from './elementValue'; +// ------------------------------------------------------------------------------------------------- + describe('class ElementValueBoolean', () => { let elementValueBoolean: ElementValueBoolean; diff --git a/src/syntax/elements/values/elementValue.ts b/src/syntax/elements/values/elementValue.ts index 45eaa9d..9d1c60c 100644 --- a/src/syntax/elements/values/elementValue.ts +++ b/src/syntax/elements/values/elementValue.ts @@ -1,7 +1,10 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; + import { ElementData } from '../core/elementArgument'; +// ------------------------------------------------------------------------------------------------- + /** * @virtual * @class diff --git a/src/syntax/specification.spec.ts b/src/syntax/specification.spec.ts index 59e35bb..32eab24 100644 --- a/src/syntax/specification.spec.ts +++ b/src/syntax/specification.spec.ts @@ -10,6 +10,8 @@ import { TData } from '@/@types/data'; import { ElementData, ElementExpression } from './elements/core/elementArgument'; import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; +// ------------------------------------------------------------------------------------------------- + abstract class ElementDataCover extends ElementData {} abstract class ElementExpressionCover extends ElementExpression {} diff --git a/src/syntax/specification.ts b/src/syntax/specification.ts index f4c932c..c55763c 100644 --- a/src/syntax/specification.ts +++ b/src/syntax/specification.ts @@ -58,6 +58,9 @@ class ElementBlockDummy extends ElementBlock { } } +// ------------------------------------------------------------------------------------------------- + +/** Stores the specifications for each element as a key-value pair of name: specification. */ const elementSpecification: { [identifier: string]: | IElementDataSpecification diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse.spec.ts index 67b5550..6c18470 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -17,6 +17,8 @@ import { resetWarehouse, } from './warehouse'; +// ------------------------------------------------------------------------------------------------- + describe('Syntax Element Warehouse', () => { let instanceID1: string; let instanceID2: string; diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index 6420a58..a39633a 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -21,8 +21,12 @@ import { ElementSyntax } from './elements/core/elementSyntax'; import { ElementData, ElementExpression } from './elements/core/elementArgument'; import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; -abstract class ElementDataCover extends ElementData {} -abstract class ElementExpressionCover extends ElementExpression {} +// -- private variables ---------------------------------------------------------------------------- + +/** A non-generic wrapper for class `ElementData`. */ +abstract class _ElementDataCover extends ElementData {} +/** A non-generic wrapper for class `ElementExpression`. */ +abstract class _ElementExpressionCover extends ElementExpression {} /** Stores the count of element name. */ let _elementNameCountMap: { [elementName: string]: number } = {}; @@ -37,14 +41,14 @@ let _elementCategoryCountMap: { [elementKind: string]: number } = {}; let _elementMap: { [elementID: string]: | { - instance: ElementDataCover; + instance: _ElementDataCover; type: 'Data'; name: TElementDataName; kind: 'Argument'; category: TElementCategoryData; } | { - instance: ElementExpressionCover; + instance: _ElementExpressionCover; type: 'Expression'; name: TElementExpressionName; kind: 'Argument'; @@ -66,6 +70,8 @@ let _elementMap: { }; } = {}; +// -- private functions ---------------------------------------------------------------------------- + /** * Helper function that creates a new instance, adds to element table, and updates count tables. * @param elementName - name of the element @@ -86,7 +92,7 @@ function _addInstance( switch (type) { case 'Data': _elementMap[instanceID] = { - instance: instance as ElementDataCover, + instance: instance as _ElementDataCover, name: elementName as TElementDataName, type: type as 'Data', kind: 'Argument', @@ -95,7 +101,7 @@ function _addInstance( break; case 'Expression': _elementMap[instanceID] = { - instance: instance as ElementExpressionCover, + instance: instance as _ElementExpressionCover, name: elementName as TElementExpressionName, type: type as 'Expression', kind: 'Argument', @@ -128,6 +134,50 @@ function _addInstance( _elementCategoryCountMap[category]++; } +/** + * Helper that resets the element name count table. + */ +function _resetElementNameCountMap(): void { + _elementNameCountMap = {}; + (Object.keys(elementSpecification) as TElementName[]).forEach( + (elementName) => (_elementNameCountMap[elementName] = 0) + ); +} + +/** + * Helper that resets the element kind count table. + */ +function _resetElementKindCountMap(): void { + _elementKindCountMap = { + Argument: 0, + Instruction: 0, + }; +} + +/** + * Helper that resets the element type count table. + */ +function _resetElementTypeCountMap(): void { + _elementTypeCountMap = { + Data: 0, + Expression: 0, + Statement: 0, + Block: 0, + }; +} + +/** + * Helper that resets the element category count table. + */ +function _resetElementCategoryCountMap(): void { + _elementCategoryCountMap = {}; + const categorySet = new Set(); + Object.entries(elementSpecification).forEach(([_, { category }]) => categorySet.add(category)); + [...categorySet].forEach((category) => (_elementCategoryCountMap[category] = 0)); +} + +// -- public functions ----------------------------------------------------------------------------- + /** * Creates a new instance, adds to element table, and updates count tables. * @param elementName - name of the element @@ -140,14 +190,17 @@ export function addInstance(elementName: TElementName): string { switch (type) { case 'Data': - instance = (prototype as (name: TElementDataName, label: string) => ElementDataCover)( + instance = (prototype as (name: TElementDataName, label: string) => _ElementDataCover)( elementName as TElementDataName, label ); break; case 'Expression': instance = ( - prototype as (name: TElementExpressionName, label: string) => ElementExpressionCover + prototype as ( + name: TElementExpressionName, + label: string + ) => _ElementExpressionCover )(elementName as TElementExpressionName, label); break; case 'Statement': @@ -273,48 +326,6 @@ export function getCategoryCountAll(): { [category: string]: number } { return { ..._elementCategoryCountMap }; } -/** - * Helper that resets the element name count table. - */ -function _resetElementNameCountMap(): void { - _elementNameCountMap = {}; - (Object.keys(elementSpecification) as TElementName[]).forEach( - (elementName) => (_elementNameCountMap[elementName] = 0) - ); -} - -/** - * Helper that resets the element kind count table. - */ -function _resetElementKindCountMap(): void { - _elementKindCountMap = { - Argument: 0, - Instruction: 0, - }; -} - -/** - * Helper that resets the element type count table. - */ -function _resetElementTypeCountMap(): void { - _elementTypeCountMap = { - Data: 0, - Expression: 0, - Statement: 0, - Block: 0, - }; -} - -/** - * Helper that resets the element category count table. - */ -function _resetElementCategoryCountMap(): void { - _elementCategoryCountMap = {}; - const categorySet = new Set(); - Object.entries(elementSpecification).forEach(([_, { category }]) => categorySet.add(category)); - [...categorySet].forEach((category) => (_elementCategoryCountMap[category] = 0)); -} - /** * Resets all the count tables and element map. */ From 75b08e56031cc75933c016b7a8422fbc9e82033e Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 16:59:43 +0530 Subject: [PATCH 116/176] refactor: Move 'core' elements to root of elements --- src/@types/{elementsCore.d.ts => elements.d.ts} | 0 src/@types/specification.d.ts | 2 +- src/syntax/elements/boxes/elementBox.ts | 2 +- src/syntax/elements/boxes/elementBoxIdentifier.ts | 2 +- src/syntax/elements/{core => }/elementArgument.spec.ts | 0 src/syntax/elements/{core => }/elementArgument.ts | 2 +- src/syntax/elements/{core => }/elementInstruction.ts | 2 +- src/syntax/elements/{core => }/elementSyntax.spec.ts | 0 src/syntax/elements/{core => }/elementSyntax.ts | 2 +- src/syntax/elements/operators/elementOperatorMath.ts | 2 +- src/syntax/elements/values/elementValue.ts | 2 +- src/syntax/specification.spec.ts | 4 ++-- src/syntax/specification.ts | 2 +- src/syntax/warehouse.spec.ts | 2 +- src/syntax/warehouse.ts | 6 +++--- 15 files changed, 15 insertions(+), 15 deletions(-) rename src/@types/{elementsCore.d.ts => elements.d.ts} (100%) rename src/syntax/elements/{core => }/elementArgument.spec.ts (100%) rename src/syntax/elements/{core => }/elementArgument.ts (99%) rename src/syntax/elements/{core => }/elementInstruction.ts (98%) rename src/syntax/elements/{core => }/elementSyntax.spec.ts (100%) rename src/syntax/elements/{core => }/elementSyntax.ts (97%) diff --git a/src/@types/elementsCore.d.ts b/src/@types/elements.d.ts similarity index 100% rename from src/@types/elementsCore.d.ts rename to src/@types/elements.d.ts diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index 61e6e6a..67dd833 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -1,5 +1,5 @@ import { TData } from './data'; -import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elementsCore'; +import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elements'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/boxes/elementBox.ts b/src/syntax/elements/boxes/elementBox.ts index b5d79c1..3f613f9 100644 --- a/src/syntax/elements/boxes/elementBox.ts +++ b/src/syntax/elements/boxes/elementBox.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementStatement } from '../core/elementInstruction'; +import { ElementStatement } from '../elementInstruction'; import { addGlobalVariable } from '@/execution/symbolTable'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.ts b/src/syntax/elements/boxes/elementBoxIdentifier.ts index ec4afbc..be15e36 100644 --- a/src/syntax/elements/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from '../core/elementArgument'; +import { ElementData } from '../elementArgument'; import { getGlobalVariable } from '@/execution/symbolTable'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/elementArgument.spec.ts similarity index 100% rename from src/syntax/elements/core/elementArgument.spec.ts rename to src/syntax/elements/elementArgument.spec.ts diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/elementArgument.ts similarity index 99% rename from src/syntax/elements/core/elementArgument.ts rename to src/syntax/elements/elementArgument.ts index 8c44d66..a713c4c 100644 --- a/src/syntax/elements/core/elementArgument.ts +++ b/src/syntax/elements/elementArgument.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { IElementArgument, IElementExpression, IElementData } from '@/@types/elementsCore'; +import { IElementArgument, IElementExpression, IElementData } from '@/@types/elements'; import { ElementSyntax } from './elementSyntax'; diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/elementInstruction.ts similarity index 98% rename from src/syntax/elements/core/elementInstruction.ts rename to src/syntax/elements/elementInstruction.ts index ce5a2a4..d293b03 100644 --- a/src/syntax/elements/core/elementInstruction.ts +++ b/src/syntax/elements/elementInstruction.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elementsCore'; +import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elements'; import { ElementSyntax } from './elementSyntax'; diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/elementSyntax.spec.ts similarity index 100% rename from src/syntax/elements/core/elementSyntax.spec.ts rename to src/syntax/elements/elementSyntax.spec.ts diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/elementSyntax.ts similarity index 97% rename from src/syntax/elements/core/elementSyntax.ts rename to src/syntax/elements/elementSyntax.ts index 8aadece..805d415 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/elementSyntax.ts @@ -1,6 +1,6 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { IElementSyntax } from '@/@types/elementsCore'; +import { IElementSyntax } from '@/@types/elements'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/operators/elementOperatorMath.ts b/src/syntax/elements/operators/elementOperatorMath.ts index 25f1ae5..8c5f24b 100644 --- a/src/syntax/elements/operators/elementOperatorMath.ts +++ b/src/syntax/elements/operators/elementOperatorMath.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementExpression } from '../core/elementArgument'; +import { ElementExpression } from '../elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/values/elementValue.ts b/src/syntax/elements/values/elementValue.ts index 9d1c60c..9f8b430 100644 --- a/src/syntax/elements/values/elementValue.ts +++ b/src/syntax/elements/values/elementValue.ts @@ -1,7 +1,7 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from '../core/elementArgument'; +import { ElementData } from '../elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification.spec.ts b/src/syntax/specification.spec.ts index 32eab24..11adfd4 100644 --- a/src/syntax/specification.spec.ts +++ b/src/syntax/specification.spec.ts @@ -7,8 +7,8 @@ import { import specification from './specification'; import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from './elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; +import { ElementData, ElementExpression } from './elements/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/elementInstruction'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification.ts b/src/syntax/specification.ts index c55763c..5182942 100644 --- a/src/syntax/specification.ts +++ b/src/syntax/specification.ts @@ -9,7 +9,7 @@ import { TElementStatementName, } from '@/@types/specification'; -import { ElementBlock } from './elements/core/elementInstruction'; +import { ElementBlock } from './elements/elementInstruction'; import { ElementValueBoolean, diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse.spec.ts index 6c18470..35d56cc 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -1,4 +1,4 @@ -import { ElementBlock } from './elements/core/elementInstruction'; +import { ElementBlock } from './elements/elementInstruction'; import { ElementBoxBoolean } from './elements/boxes/elementBox'; import { ElementOperatorMathPlus } from './elements/operators/elementOperatorMath'; import { ElementValueBoolean } from './elements/values/elementValue'; diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index a39633a..94c205c 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -17,9 +17,9 @@ import { import elementSpecification from './specification'; import { TData } from '@/@types/data'; -import { ElementSyntax } from './elements/core/elementSyntax'; -import { ElementData, ElementExpression } from './elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; +import { ElementSyntax } from './elements/elementSyntax'; +import { ElementData, ElementExpression } from './elements/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/elementInstruction'; // -- private variables ---------------------------------------------------------------------------- From 07965727e458d76ee500f4cbc40a53866a77a973 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 17:35:56 +0530 Subject: [PATCH 117/176] interpreter: Add proxy functions for symbol table operations --- src/@types/execution.d.ts | 5 ++++ src/execution/interpreter.ts | 28 ++++++++++++++++++++++ src/execution/symbolTable.ts | 46 +----------------------------------- 3 files changed, 34 insertions(+), 45 deletions(-) create mode 100644 src/@types/execution.d.ts create mode 100644 src/execution/interpreter.ts diff --git a/src/@types/execution.d.ts b/src/@types/execution.d.ts new file mode 100644 index 0000000..7ab6f1e --- /dev/null +++ b/src/@types/execution.d.ts @@ -0,0 +1,5 @@ +/** Type describing a variable entry in symbol table. */ +export type IVariable = { + dataType: TDataName; + value: TData; +}; diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts new file mode 100644 index 0000000..fcb8dc4 --- /dev/null +++ b/src/execution/interpreter.ts @@ -0,0 +1,28 @@ +import { TData, TDataName } from '@/@types/data'; +import { IVariable } from '@/@types/execution'; + +import { addGlobalVariable, getGlobalVariable } from './symbolTable'; + +// -- public functions ----------------------------------------------------------------------------- + +/** + * Adds a new variable entry to the symbol table. + * @param variable - name of the variable + * @param dataType - data type of the variable + * @param value - value of the variable + */ +export function declareVariable(variable: string, dataType: 'number', value: number): void; +export function declareVariable(variable: string, dataType: 'string', value: string): void; +export function declareVariable(variable: string, dataType: 'boolean', value: boolean): void; +export function declareVariable(variable: string, dataType: TDataName, value: TData): void { + addGlobalVariable(variable, dataType, value); +} + +/** + * Fetches a variable entry from the symbol table. + * @param variable - name of the variable + * @returns the variable entry if present, else `null` + */ +export function queryVariable(variable: string): IVariable | null { + return getGlobalVariable(variable); +} diff --git a/src/execution/symbolTable.ts b/src/execution/symbolTable.ts index f3c1ed4..7abf6fc 100644 --- a/src/execution/symbolTable.ts +++ b/src/execution/symbolTable.ts @@ -1,13 +1,8 @@ import { TData, TDataName } from '@/@types/data'; +import { IVariable } from '@/@types/execution'; // -- types ---------------------------------------------------------------------------------------- -/** Type describing a variable entry. */ -type IVariable = { - dataType: TDataName; - value: TData; -}; - /** Type describing a set of variables. */ type IVariableTable = { [variable: string]: IVariable; @@ -168,9 +163,6 @@ function _flushTableVariables(selector: string, tableName: 'program' | 'routine' * @param dataType - data type of the variable * @param value - value of the variable */ -export function addGlobalVariable(variable: string, dataType: 'number', value: number): void; -export function addGlobalVariable(variable: string, dataType: 'string', value: string): void; -export function addGlobalVariable(variable: string, dataType: 'boolean', value: boolean): void; export function addGlobalVariable(variable: string, dataType: TDataName, value: TData): void { _globalTable[variable] = { dataType, value }; } @@ -221,24 +213,6 @@ export function removeGlobalVariable(variable: string): void { * @param value - value of the variable * @param program - ID of the program */ -export function addProgramVariable( - variable: string, - dataType: 'number', - value: number, - program: string -): void; -export function addProgramVariable( - variable: string, - dataType: 'string', - value: string, - program: string -): void; -export function addProgramVariable( - variable: string, - dataType: 'boolean', - value: boolean, - program: string -): void; export function addProgramVariable( variable: string, dataType: TDataName, @@ -314,24 +288,6 @@ export function removeProgramVariable(variable: string, program: string): void { * @param value - value of the variable * @param routine - ID of the routine */ -export function addRoutineVariable( - variable: string, - dataType: 'number', - value: number, - routine: string -): void; -export function addRoutineVariable( - variable: string, - dataType: 'string', - value: string, - routine: string -): void; -export function addRoutineVariable( - variable: string, - dataType: 'boolean', - value: boolean, - routine: string -): void; export function addRoutineVariable( variable: string, dataType: TDataName, From ad9fe4ecd35364a17cc8fb9c2c971acf6b8bb847 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 17:36:50 +0530 Subject: [PATCH 118/176] syntax: [elements] Use interpreter variable functions --- src/syntax/elements/boxes/elementBox.ts | 8 ++++---- src/syntax/elements/boxes/elementBoxIdentifier.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/syntax/elements/boxes/elementBox.ts b/src/syntax/elements/boxes/elementBox.ts index 3f613f9..69a24fa 100644 --- a/src/syntax/elements/boxes/elementBox.ts +++ b/src/syntax/elements/boxes/elementBox.ts @@ -2,7 +2,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; import { ElementStatement } from '../elementInstruction'; -import { addGlobalVariable } from '@/execution/symbolTable'; +import { declareVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- @@ -26,13 +26,13 @@ abstract class ElementBox extends ElementStatement { public onVisit(params: { name: string; value: TData }): void { switch (typeof params.value) { case 'boolean': - addGlobalVariable(params.name, 'boolean', params.value); + declareVariable(params.name, 'boolean', params.value); break; case 'number': - addGlobalVariable(params.name, 'number', params.value); + declareVariable(params.name, 'number', params.value); break; case 'string': - addGlobalVariable(params.name, 'string', params.value); + declareVariable(params.name, 'string', params.value); break; default: throw Error('Trespassing access: This should never be reached'); diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.ts b/src/syntax/elements/boxes/elementBoxIdentifier.ts index be15e36..f6253d7 100644 --- a/src/syntax/elements/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/boxes/elementBoxIdentifier.ts @@ -2,7 +2,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; import { ElementData } from '../elementArgument'; -import { getGlobalVariable } from '@/execution/symbolTable'; +import { queryVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- @@ -33,7 +33,7 @@ abstract class ElementBoxIdentifier extends ElementData { const expectedType = typeof this._value as TDataName; try { - const { dataType, value } = getGlobalVariable(this.label)!; + const { dataType, value } = queryVariable(this.label)!; if (this.returnType.length > 1) { this._value = value as unknown as T; } else if (dataType === expectedType) { From 6041238756e2d53422cc8913f6a4ecaf644c2262 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 17:46:10 +0530 Subject: [PATCH 119/176] refactor: [syntax/elements] Reorganise directory --- src/syntax/elements/{ => core}/elementArgument.spec.ts | 0 src/syntax/elements/{ => core}/elementArgument.ts | 0 src/syntax/elements/{ => core}/elementInstruction.ts | 0 src/syntax/elements/{ => core}/elementSyntax.spec.ts | 0 src/syntax/elements/{ => core}/elementSyntax.ts | 0 src/syntax/elements/{boxes => }/elementBox.spec.ts | 0 src/syntax/elements/{boxes => }/elementBox.ts | 2 +- .../elements/{boxes => }/elementBoxIdentifier.spec.ts | 0 .../elements/{boxes => }/elementBoxIdentifier.ts | 2 +- .../{operators => }/elementOperatorMath.spec.ts | 0 .../elements/{operators => }/elementOperatorMath.ts | 2 +- src/syntax/elements/{values => }/elementValue.spec.ts | 0 src/syntax/elements/{values => }/elementValue.ts | 2 +- src/syntax/specification.spec.ts | 4 ++-- src/syntax/specification.ts | 10 +++++----- src/syntax/warehouse.spec.ts | 9 +++++---- src/syntax/warehouse.ts | 6 +++--- 17 files changed, 19 insertions(+), 18 deletions(-) rename src/syntax/elements/{ => core}/elementArgument.spec.ts (100%) rename src/syntax/elements/{ => core}/elementArgument.ts (100%) rename src/syntax/elements/{ => core}/elementInstruction.ts (100%) rename src/syntax/elements/{ => core}/elementSyntax.spec.ts (100%) rename src/syntax/elements/{ => core}/elementSyntax.ts (100%) rename src/syntax/elements/{boxes => }/elementBox.spec.ts (100%) rename src/syntax/elements/{boxes => }/elementBox.ts (97%) rename src/syntax/elements/{boxes => }/elementBoxIdentifier.spec.ts (100%) rename src/syntax/elements/{boxes => }/elementBoxIdentifier.ts (98%) rename src/syntax/elements/{operators => }/elementOperatorMath.spec.ts (100%) rename src/syntax/elements/{operators => }/elementOperatorMath.ts (98%) rename src/syntax/elements/{values => }/elementValue.spec.ts (100%) rename src/syntax/elements/{values => }/elementValue.ts (97%) diff --git a/src/syntax/elements/elementArgument.spec.ts b/src/syntax/elements/core/elementArgument.spec.ts similarity index 100% rename from src/syntax/elements/elementArgument.spec.ts rename to src/syntax/elements/core/elementArgument.spec.ts diff --git a/src/syntax/elements/elementArgument.ts b/src/syntax/elements/core/elementArgument.ts similarity index 100% rename from src/syntax/elements/elementArgument.ts rename to src/syntax/elements/core/elementArgument.ts diff --git a/src/syntax/elements/elementInstruction.ts b/src/syntax/elements/core/elementInstruction.ts similarity index 100% rename from src/syntax/elements/elementInstruction.ts rename to src/syntax/elements/core/elementInstruction.ts diff --git a/src/syntax/elements/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts similarity index 100% rename from src/syntax/elements/elementSyntax.spec.ts rename to src/syntax/elements/core/elementSyntax.spec.ts diff --git a/src/syntax/elements/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts similarity index 100% rename from src/syntax/elements/elementSyntax.ts rename to src/syntax/elements/core/elementSyntax.ts diff --git a/src/syntax/elements/boxes/elementBox.spec.ts b/src/syntax/elements/elementBox.spec.ts similarity index 100% rename from src/syntax/elements/boxes/elementBox.spec.ts rename to src/syntax/elements/elementBox.spec.ts diff --git a/src/syntax/elements/boxes/elementBox.ts b/src/syntax/elements/elementBox.ts similarity index 97% rename from src/syntax/elements/boxes/elementBox.ts rename to src/syntax/elements/elementBox.ts index 69a24fa..fec22cf 100644 --- a/src/syntax/elements/boxes/elementBox.ts +++ b/src/syntax/elements/elementBox.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementStatement } from '../elementInstruction'; +import { ElementStatement } from './core/elementInstruction'; import { declareVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.spec.ts b/src/syntax/elements/elementBoxIdentifier.spec.ts similarity index 100% rename from src/syntax/elements/boxes/elementBoxIdentifier.spec.ts rename to src/syntax/elements/elementBoxIdentifier.spec.ts diff --git a/src/syntax/elements/boxes/elementBoxIdentifier.ts b/src/syntax/elements/elementBoxIdentifier.ts similarity index 98% rename from src/syntax/elements/boxes/elementBoxIdentifier.ts rename to src/syntax/elements/elementBoxIdentifier.ts index f6253d7..7c98705 100644 --- a/src/syntax/elements/boxes/elementBoxIdentifier.ts +++ b/src/syntax/elements/elementBoxIdentifier.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from '../elementArgument'; +import { ElementData } from './core/elementArgument'; import { queryVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/operators/elementOperatorMath.spec.ts b/src/syntax/elements/elementOperatorMath.spec.ts similarity index 100% rename from src/syntax/elements/operators/elementOperatorMath.spec.ts rename to src/syntax/elements/elementOperatorMath.spec.ts diff --git a/src/syntax/elements/operators/elementOperatorMath.ts b/src/syntax/elements/elementOperatorMath.ts similarity index 98% rename from src/syntax/elements/operators/elementOperatorMath.ts rename to src/syntax/elements/elementOperatorMath.ts index 8c5f24b..2abd934 100644 --- a/src/syntax/elements/operators/elementOperatorMath.ts +++ b/src/syntax/elements/elementOperatorMath.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementExpression } from '../elementArgument'; +import { ElementExpression } from './core/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/values/elementValue.spec.ts b/src/syntax/elements/elementValue.spec.ts similarity index 100% rename from src/syntax/elements/values/elementValue.spec.ts rename to src/syntax/elements/elementValue.spec.ts diff --git a/src/syntax/elements/values/elementValue.ts b/src/syntax/elements/elementValue.ts similarity index 97% rename from src/syntax/elements/values/elementValue.ts rename to src/syntax/elements/elementValue.ts index 9f8b430..1efafde 100644 --- a/src/syntax/elements/values/elementValue.ts +++ b/src/syntax/elements/elementValue.ts @@ -1,7 +1,7 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from '../elementArgument'; +import { ElementData } from './core/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification.spec.ts b/src/syntax/specification.spec.ts index 11adfd4..32eab24 100644 --- a/src/syntax/specification.spec.ts +++ b/src/syntax/specification.spec.ts @@ -7,8 +7,8 @@ import { import specification from './specification'; import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from './elements/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/elementInstruction'; +import { ElementData, ElementExpression } from './elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification.ts b/src/syntax/specification.ts index 5182942..5651078 100644 --- a/src/syntax/specification.ts +++ b/src/syntax/specification.ts @@ -9,32 +9,32 @@ import { TElementStatementName, } from '@/@types/specification'; -import { ElementBlock } from './elements/elementInstruction'; +import { ElementBlock } from './elements/core/elementInstruction'; import { ElementValueBoolean, ElementValueNumber, ElementValueString, -} from './elements/values/elementValue'; +} from './elements/elementValue'; import { ElementBoxGeneric, ElementBoxBoolean, ElementBoxNumber, ElementBoxString, -} from './elements/boxes/elementBox'; +} from './elements/elementBox'; import { ElementBoxIdentifierGeneric, ElementBoxIdentifierBoolean, ElementBoxIdentifierNumber, ElementBoxIdentifierString, -} from './elements/boxes/elementBoxIdentifier'; +} from './elements/elementBoxIdentifier'; import { ElementOperatorMathPlus, ElementOperatorMathMinus, ElementOperatorMathTimes, ElementOperatorMathDivide, ElementOperatorMathModulus, -} from './elements/operators/elementOperatorMath'; +} from './elements/elementOperatorMath'; class ElementBlockDummy extends ElementBlock { constructor(name: TElementBlockName, label: string) { diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse.spec.ts index 35d56cc..8e620e4 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -1,7 +1,3 @@ -import { ElementBlock } from './elements/elementInstruction'; -import { ElementBoxBoolean } from './elements/boxes/elementBox'; -import { ElementOperatorMathPlus } from './elements/operators/elementOperatorMath'; -import { ElementValueBoolean } from './elements/values/elementValue'; import { addInstance, getInstance, @@ -17,6 +13,11 @@ import { resetWarehouse, } from './warehouse'; +import { ElementBlock } from './elements/core/elementInstruction'; +import { ElementBoxBoolean } from './elements/elementBox'; +import { ElementOperatorMathPlus } from './elements/elementOperatorMath'; +import { ElementValueBoolean } from './elements/elementValue'; + // ------------------------------------------------------------------------------------------------- describe('Syntax Element Warehouse', () => { diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index 94c205c..a39633a 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -17,9 +17,9 @@ import { import elementSpecification from './specification'; import { TData } from '@/@types/data'; -import { ElementSyntax } from './elements/elementSyntax'; -import { ElementData, ElementExpression } from './elements/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/elementInstruction'; +import { ElementSyntax } from './elements/core/elementSyntax'; +import { ElementData, ElementExpression } from './elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; // -- private variables ---------------------------------------------------------------------------- From 50e5dedd7c7e9e82cce44b69b348b1f75efeddf4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 01:51:02 +0530 Subject: [PATCH 120/176] chore: Update test command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 05e0a33..15a15ee 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "scripts": { "build": "rm -rf dist/* && tsc -p .", - "test": "jest --passWithNoTests", + "test": "jest --passWithNoTests --verbose src/syntax src/execution", "lint": "eslint src/**/*.ts", "prettify": "prettier --write src/@types src/syntax src/execution" } From 3b373dfa9e97a505531beca4992a4daeca3eba76 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 01:58:25 +0530 Subject: [PATCH 121/176] ci: Run GitHub Actions CI test on Node v16 --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8993e9f..3c0dac6 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -32,7 +32,7 @@ jobs: strategy: matrix: - node-version: [12.x, 14.x] + node-version: [16.x] ################## # Load all steps # From fe85905fb6ee15057f320b3fc45d5a5676bdb15d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 20:40:12 +0530 Subject: [PATCH 122/176] symbol table: [refactor] Rename program to process --- src/execution/symbolTable.spec.ts | 100 ++++++++++---------- src/execution/symbolTable.ts | 152 +++++++++++++++--------------- 2 files changed, 126 insertions(+), 126 deletions(-) diff --git a/src/execution/symbolTable.spec.ts b/src/execution/symbolTable.spec.ts index 2cd54ba..5429b62 100644 --- a/src/execution/symbolTable.spec.ts +++ b/src/execution/symbolTable.spec.ts @@ -51,49 +51,49 @@ describe('Symbol Table', () => { }); }); - describe('program variables', () => { - test('add a new variable to a new program and verify entry by fetching the entry for the variable', () => { - symbolTable.addProgramVariable('myVar1', 'number', 5, 'myProgram1'); - expect(symbolTable.getProgramVariable('myVar1', 'myProgram1')).toEqual({ + describe('process variables', () => { + test('add a new variable to a new process and verify entry by fetching the entry for the variable', () => { + symbolTable.addProcessVariable('myVar1', 'number', 5, 'myProcess1'); + expect(symbolTable.getProcessVariable('myVar1', 'myProcess1')).toEqual({ dataType: 'number', value: 5, }); }); - test('add a new variable to an existing program and verify entry by fetching the entry for the variable', () => { - symbolTable.addProgramVariable('myVar2', 'string', 'foo', 'myProgram1'); - expect(symbolTable.getProgramVariable('myVar2', 'myProgram1')).toEqual({ + test('add a new variable to an existing process and verify entry by fetching the entry for the variable', () => { + symbolTable.addProcessVariable('myVar2', 'string', 'foo', 'myProcess1'); + expect(symbolTable.getProcessVariable('myVar2', 'myProcess1')).toEqual({ dataType: 'string', value: 'foo', }); }); - test('add an existing variable to a new program and verify entry by fetching the entry for the variable', () => { - symbolTable.addProgramVariable('myVar1', 'boolean', true, 'myProgram2'); - expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ + test('add an existing variable to a new process and verify entry by fetching the entry for the variable', () => { + symbolTable.addProcessVariable('myVar1', 'boolean', true, 'myProcess2'); + expect(symbolTable.getProcessVariable('myVar1', 'myProcess2')).toEqual({ dataType: 'boolean', value: true, }); }); - test('add an existing variable-program pair and verify rewrite by fetching the entry for the variable', () => { - symbolTable.addProgramVariable('myVar1', 'string', 'bar', 'myProgram2'); - expect(symbolTable.getProgramVariable('myVar1', 'myProgram2')).toEqual({ + test('add an existing variable-process pair and verify rewrite by fetching the entry for the variable', () => { + symbolTable.addProcessVariable('myVar1', 'string', 'bar', 'myProcess2'); + expect(symbolTable.getProcessVariable('myVar1', 'myProcess2')).toEqual({ dataType: 'string', value: 'bar', }); }); - test('fetch a non-existing variable in an existing program and expect null', () => { - expect(symbolTable.getProgramVariable('noVar', 'myProgram1')).toBe(null); + test('fetch a non-existing variable in an existing process and expect null', () => { + expect(symbolTable.getProcessVariable('noVar', 'myProcess1')).toBe(null); }); - test('fetch an existing variable in a non-existing program and expect null', () => { - expect(symbolTable.getProgramVariable('myVar1', 'myProgram')).toBe(null); + test('fetch an existing variable in a non-existing process and expect null', () => { + expect(symbolTable.getProcessVariable('myVar1', 'myProcess')).toBe(null); }); - test('fetch an existing variable in an existing program but with no overlap and expect null', () => { - expect(symbolTable.getProgramVariable('myVar2', 'myProgram2')).toBe(null); + test('fetch an existing variable in an existing process but with no overlap and expect null', () => { + expect(symbolTable.getProcessVariable('myVar2', 'myProcess2')).toBe(null); }); }); @@ -160,15 +160,15 @@ describe('Symbol Table', () => { ); }); - test('verify program variable names for an existing program', () => { - expect(new Set(symbolTable.getProgramVariableNames('myProgram1'))).toEqual( + test('verify process variable names for an existing process', () => { + expect(new Set(symbolTable.getProcessVariableNames('myProcess1'))).toEqual( new Set(['myVar1', 'myVar2']) ); }); - test('verify program variable names with types for an existing program', () => { + test('verify process variable names with types for an existing process', () => { expect( - new Set(Object.entries(symbolTable.getProgramVariableNamesWithTypes('myProgram1'))) + new Set(Object.entries(symbolTable.getProcessVariableNamesWithTypes('myProcess1'))) ).toEqual( new Set([ ['myVar1', 'number'], @@ -177,38 +177,38 @@ describe('Symbol Table', () => { ); }); - test('fetch program variable names for a non-existing program and expect empty list', () => { - expect(new Set(symbolTable.getProgramVariableNames('myProgram'))).toEqual(new Set([])); + test('fetch process variable names for a non-existing process and expect empty list', () => { + expect(new Set(symbolTable.getProcessVariableNames('myProcess'))).toEqual(new Set([])); }); - test('verify all program variable names', () => { - const variables = symbolTable.getProgramVariableNamesAll(); - expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram1', 'myProgram2'])); - expect(new Set(variables['myProgram1'])).toEqual(new Set(['myVar1', 'myVar2'])); - expect(new Set(variables['myProgram2'])).toEqual(new Set(['myVar1'])); + test('verify all process variable names', () => { + const variables = symbolTable.getProcessVariableNamesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProcess1', 'myProcess2'])); + expect(new Set(variables['myProcess1'])).toEqual(new Set(['myVar1', 'myVar2'])); + expect(new Set(variables['myProcess2'])).toEqual(new Set(['myVar1'])); }); - test('verify all program variable names with types', () => { - const variables = symbolTable.getProgramVariableNamesWithTypesAll(); - expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram1', 'myProgram2'])); - expect(new Set(Object.entries(variables['myProgram1']))).toEqual( + test('verify all process variable names with types', () => { + const variables = symbolTable.getProcessVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProcess1', 'myProcess2'])); + expect(new Set(Object.entries(variables['myProcess1']))).toEqual( new Set([ ['myVar1', 'number'], ['myVar2', 'string'], ]) ); - expect(new Set(Object.entries(variables['myProgram2']))).toEqual( + expect(new Set(Object.entries(variables['myProcess2']))).toEqual( new Set([['myVar1', 'string']]) ); }); - test('verify routine variable names for an existing program', () => { + test('verify routine variable names for an existing process', () => { expect(new Set(symbolTable.getRoutineVariableNames('myRoutine1'))).toEqual( new Set(['myVar1', 'myVar2']) ); }); - test('verify routine variable names with types for an existing program', () => { + test('verify routine variable names with types for an existing process', () => { expect( new Set(Object.entries(symbolTable.getRoutineVariableNamesWithTypes('myRoutine1'))) ).toEqual( @@ -219,7 +219,7 @@ describe('Symbol Table', () => { ); }); - test('fetch routine variable names for a non-existing program and expect empty list', () => { + test('fetch routine variable names for a non-existing process and expect empty list', () => { expect(new Set(symbolTable.getRoutineVariableNames('myRoutine'))).toEqual(new Set([])); }); @@ -251,18 +251,18 @@ describe('Symbol Table', () => { expect(symbolTable.getGlobalVariableNames()).toEqual([]); }); - test('flush variables of an existing program and verify by checking listing', () => { - symbolTable.flushProgramVariables('myProgram1'); - const variables = symbolTable.getProgramVariableNamesWithTypesAll(); - expect(new Set(Object.keys(variables))).toEqual(new Set(['myProgram2'])); - expect(new Set(Object.entries(variables['myProgram2']))).toEqual( + test('flush variables of an existing process and verify by checking listing', () => { + symbolTable.flushProcessVariables('myProcess1'); + const variables = symbolTable.getProcessVariableNamesWithTypesAll(); + expect(new Set(Object.keys(variables))).toEqual(new Set(['myProcess2'])); + expect(new Set(Object.entries(variables['myProcess2']))).toEqual( new Set([['myVar1', 'string']]) ); }); - test('flush all program variables and verify by checking listing', () => { - symbolTable.flushProgramVariablesAll(); - expect(symbolTable.getProgramVariableNamesAll()).toEqual({}); + test('flush all process variables and verify by checking listing', () => { + symbolTable.flushProcessVariablesAll(); + expect(symbolTable.getProcessVariableNamesAll()).toEqual({}); }); test('flush variables of an existing routine and verify by checking listing', () => { @@ -281,18 +281,18 @@ describe('Symbol Table', () => { test('flush all variables and verify', () => { symbolTable.addGlobalVariable('myVar1', 'number', 0); - symbolTable.addProgramVariable('myVar2', 'number', 0, 'myProgram'); + symbolTable.addProcessVariable('myVar2', 'number', 0, 'myProcess'); symbolTable.addRoutineVariable('myVar3', 'number', 0, 'myRoutine'); expect(new Set(symbolTable.getGlobalVariableNames())).toEqual(new Set(['myVar1'])); - expect(new Set(Object.entries(symbolTable.getProgramVariableNamesAll()))).toEqual( - new Set([['myProgram', ['myVar2']]]) + expect(new Set(Object.entries(symbolTable.getProcessVariableNamesAll()))).toEqual( + new Set([['myProcess', ['myVar2']]]) ); expect(new Set(Object.entries(symbolTable.getRoutineVariableNamesAll()))).toEqual( new Set([['myRoutine', ['myVar3']]]) ); symbolTable.flushAllVariables(); expect(symbolTable.getGlobalVariableNames()).toEqual([]); - expect(symbolTable.getProgramVariableNamesAll()).toEqual({}); + expect(symbolTable.getProcessVariableNamesAll()).toEqual({}); expect(symbolTable.getRoutineVariableNamesAll()).toEqual({}); }); }); diff --git a/src/execution/symbolTable.ts b/src/execution/symbolTable.ts index 7abf6fc..74ddc3c 100644 --- a/src/execution/symbolTable.ts +++ b/src/execution/symbolTable.ts @@ -12,29 +12,29 @@ type IVariableTable = { /** Stores the global table. */ let _globalTable: IVariableTable = {}; -/** Stores the programs' tables. */ -let _programTable: { [program: string]: IVariableTable } = {}; +/** Stores the processes' tables. */ +let _processTable: { [process: string]: IVariableTable } = {}; /** Stores the routines' table. */ let _routineTable: { [routine: string]: IVariableTable } = {}; // -- private functions ---------------------------------------------------------------------------- /** - * A helper that adds a variable for a program or routine. If already present, overwrites it. + * A helper that adds a variable for a process or routine. If already present, overwrites it. * @param variable - name of the variable * @param dataType - data type of the variable * @param value - value of the variable * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` + * @param tableName - `process` or `routine` */ function _addTableVariable( variable: string, dataType: TDataName, value: TData, selector: string, - tableName: 'program' | 'routine' + tableName: 'process' | 'routine' ): void { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; if (!(selector in table)) { table[selector] = {}; } @@ -42,42 +42,42 @@ function _addTableVariable( } /** - * A helper that fetches a variable for a program or routine. + * A helper that fetches a variable for a process or routine. * @param variable - name of the variable * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` + * @param tableName - `process` or `routine` * @returns the variable entry if present, else `null` */ function _getTableVariable( variable: string, selector: string, - tableName: 'program' | 'routine' + tableName: 'process' | 'routine' ): IVariable | null { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; return selector in table && variable in table[selector] ? table[selector][variable] : null; } /** - * A helper that returns names of all variables for a program or routine. + * A helper that returns names of all variables for a process or routine. * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` - * @returns a list of all variable names for a program or routine + * @param tableName - `process` or `routine` + * @returns a list of all variable names for a process or routine */ -function _getTableVariableNames(selector: string, tableName: 'program' | 'routine'): string[] { - const table = tableName === 'program' ? _programTable : _routineTable; +function _getTableVariableNames(selector: string, tableName: 'process' | 'routine'): string[] { + const table = tableName === 'process' ? _processTable : _routineTable; return selector in table ? Object.keys(table[selector]) : []; } /** - * A helper that returns names of all variables for a program or routine with their data types. + * A helper that returns names of all variables for a process or routine with their data types. * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` + * @param tableName - `process` or `routine` * @returns an object with key-value pairs of variable names and corresponding data type */ function _getTableVariableNamesWithTypes( selector: string, - tableName: 'program' | 'routine' + tableName: 'process' | 'routine' ): { [variable: string]: TDataName } { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; if (!(selector in table)) { return {}; } @@ -90,15 +90,15 @@ function _getTableVariableNamesWithTypes( } /** - * A helper that returns names of all program or routine variables. - * @param tableName - `program` or `routine` - * @returns an object with key-value pairs of program or routine names and corresponding list of + * A helper that returns names of all process or routine variables. + * @param tableName - `process` or `routine` + * @returns an object with key-value pairs of process or routine names and corresponding list of * variable names */ -function _getTableVariableNamesAll(tableName: 'program' | 'routine'): { +function _getTableVariableNamesAll(tableName: 'process' | 'routine'): { [key: string]: string[]; } { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; const res: { [key: string]: string[] } = {}; Object.entries(table).forEach(([key, variables]) => { res[key] = Object.keys(variables); @@ -107,15 +107,15 @@ function _getTableVariableNamesAll(tableName: 'program' | 'routine'): { } /** - * A helper that returns names and types of all program or routine variables. - * @param tableName - `program` or `routine` - * @returns an object with key-value pairs of program or routine names and corresponding object with + * A helper that returns names and types of all process or routine variables. + * @param tableName - `process` or `routine` + * @returns an object with key-value pairs of process or routine names and corresponding object with * key-value pairs of variable names and data types. */ -function _getTableVariableNamesWithTypesAll(tableName: 'program' | 'routine'): { +function _getTableVariableNamesWithTypesAll(tableName: 'process' | 'routine'): { [key: string]: { [variable: string]: TDataName }; } { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; const res: { [key: string]: { [variable: string]: TDataName } } = {}; Object.entries(table).forEach(([key, variables]) => { res[key] = {}; @@ -127,29 +127,29 @@ function _getTableVariableNamesWithTypesAll(tableName: 'program' | 'routine'): { } /** - * Removes a variable for a program or routine if present. + * Removes a variable for a process or routine if present. * @param variable - name of the variable * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` + * @param tableName - `process` or `routine` */ function _removeTableVariable( variable: string, selector: string, - tableName: 'program' | 'routine' + tableName: 'process' | 'routine' ): void { - const table = tableName === 'program' ? _programTable : _routineTable; + const table = tableName === 'process' ? _processTable : _routineTable; if (selector in table && variable in table[selector]) { delete table[selector][variable]; } } /** - * A helper that clears all variables for a program or routine. + * A helper that clears all variables for a process or routine. * @param selector - the key to be used for selection (project ID or routine ID) - * @param tableName - `program` or `routine` + * @param tableName - `process` or `routine` */ -function _flushTableVariables(selector: string, tableName: 'program' | 'routine'): void { - const table = tableName === 'program' ? _programTable : _routineTable; +function _flushTableVariables(selector: string, tableName: 'process' | 'routine'): void { + const table = tableName === 'process' ? _processTable : _routineTable; if (selector in table) { delete table[selector]; } @@ -207,78 +207,78 @@ export function removeGlobalVariable(variable: string): void { } /** - * Adds a variable for a program. If already present, overwrites it. + * Adds a variable for a process. If already present, overwrites it. * @param variable - name of the variable * @param dataType - data type of the variable * @param value - value of the variable - * @param program - ID of the program + * @param process - ID of the process */ -export function addProgramVariable( +export function addProcessVariable( variable: string, dataType: TDataName, value: TData, - program: string + process: string ): void { - _addTableVariable(variable, dataType, value, program, 'program'); + _addTableVariable(variable, dataType, value, process, 'process'); } /** - * Fetches a variable for a program. + * Fetches a variable for a process. * @param variable - name of the variable - * @param program - ID of the program + * @param process - ID of the process * @returns the variable entry if present, else `null` */ -export function getProgramVariable(variable: string, program: string): IVariable | null { - return _getTableVariable(variable, program, 'program'); +export function getProcessVariable(variable: string, process: string): IVariable | null { + return _getTableVariable(variable, process, 'process'); } /** - * Returns names of all variables for a program. - * @param program - ID of the program - * @returns a list of all variable names for a program + * Returns names of all variables for a process. + * @param process - ID of the process + * @returns a list of all variable names for a process */ -export function getProgramVariableNames(program: string): string[] { - return _getTableVariableNames(program, 'program'); +export function getProcessVariableNames(process: string): string[] { + return _getTableVariableNames(process, 'process'); } /** - * Returns names of all variables for a program with their data types. - * @param program - ID of the program + * Returns names of all variables for a process with their data types. + * @param process - ID of the process * @returns an object with key-value pairs of variable names and corresponding data type */ -export function getProgramVariableNamesWithTypes(program: string): { +export function getProcessVariableNamesWithTypes(process: string): { [variable: string]: TDataName; } { - return _getTableVariableNamesWithTypes(program, 'program'); + return _getTableVariableNamesWithTypes(process, 'process'); } /** - * Returns names of all program variables. - * @returns an object with key-value pairs of program names and corresponding list of variable + * Returns names of all process variables. + * @returns an object with key-value pairs of process names and corresponding list of variable * names */ -export function getProgramVariableNamesAll(): { [program: string]: string[] } { - return _getTableVariableNamesAll('program'); +export function getProcessVariableNamesAll(): { [process: string]: string[] } { + return _getTableVariableNamesAll('process'); } /** - * Returns names and types of all program variables. - * @returns an object with key-value pairs of program names and corresponding object with key-value + * Returns names and types of all process variables. + * @returns an object with key-value pairs of process names and corresponding object with key-value * pairs of variable names and data types. */ -export function getProgramVariableNamesWithTypesAll(): { - [program: string]: { [variable: string]: TDataName }; +export function getProcessVariableNamesWithTypesAll(): { + [process: string]: { [variable: string]: TDataName }; } { - return _getTableVariableNamesWithTypesAll('program'); + return _getTableVariableNamesWithTypesAll('process'); } /** - * Removes a variable for a program if present. + * Removes a variable for a process if present. * @param variable - name of the variable - * @param program - ID of the program + * @param process - ID of the process */ -export function removeProgramVariable(variable: string, program: string): void { - _removeTableVariable(variable, program, 'program'); +export function removeProcessVariable(variable: string, process: string): void { + _removeTableVariable(variable, process, 'process'); } /** @@ -364,18 +364,18 @@ export function flushGlobalVariables(): void { } /** - * Clears all variables for a program. - * @param program - 0 ID of the program + * Clears all variables for a process. + * @param process - 0 ID of the process */ -export function flushProgramVariables(program: string): void { - _flushTableVariables(program, 'program'); +export function flushProcessVariables(process: string): void { + _flushTableVariables(process, 'process'); } /** - * Clears all program variables. + * Clears all process variables. */ -export function flushProgramVariablesAll(): void { - _programTable = {}; +export function flushProcessVariablesAll(): void { + _processTable = {}; } /** @@ -398,6 +398,6 @@ export function flushRoutineVariablesAll(): void { */ export function flushAllVariables(): void { flushGlobalVariables(); - flushProgramVariablesAll(); + flushProcessVariablesAll(); flushRoutineVariablesAll(); } From 78da9db68ace5e3a5b183b8bb36e9b06a9b866dd Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 23:11:33 +0530 Subject: [PATCH 123/176] specification: [feat] Dynamically manage specification --- .eslintrc.json | 1 + src/@types/specification.d.ts | 76 +++-- src/syntax/elements/elementProgram.ts | 46 +++ src/syntax/specification.spec.ts | 102 ------- src/syntax/specification.ts | 193 ------------ .../specification/specification.spec.ts | 283 ++++++++++++++++++ src/syntax/specification/specification.ts | 112 +++++++ .../specification/specificationEntries.ts | 159 ++++++++++ 8 files changed, 659 insertions(+), 313 deletions(-) create mode 100644 src/syntax/elements/elementProgram.ts delete mode 100644 src/syntax/specification.spec.ts delete mode 100644 src/syntax/specification.ts create mode 100644 src/syntax/specification/specification.spec.ts create mode 100644 src/syntax/specification/specification.ts create mode 100644 src/syntax/specification/specificationEntries.ts diff --git a/.eslintrc.json b/.eslintrc.json index 799ef1d..fbc91f4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -10,6 +10,7 @@ }, "plugins": ["@typescript-eslint"], "rules": { + "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-inferrable-types": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/no-non-null-assertion": "off", diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index 67dd833..b9deb8f 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -1,5 +1,11 @@ import { TData } from './data'; -import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elements'; +import { + IElementData, + IElementExpression, + IElementStatement, + IElementBlock, + IElementSyntax, +} from './elements'; // ------------------------------------------------------------------------------------------------- @@ -8,17 +14,6 @@ export type TElementKind = 'Argument' | 'Instruction'; /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ export type TElementType = 'Data' | 'Expression' | 'Statement' | 'Block'; -export type TElementCategoryData = 'value' | 'boxidentifier'; -export type TElementCategoryExpression = 'operator-math'; -export type TElementCategoryStatement = 'box'; -export type TElementCategoryBlock = 'block-dummy'; - -export type TElementCategory = - | TElementCategoryData - | TElementCategoryExpression - | TElementCategoryStatement - | TElementCategoryBlock; - export type TElementDataName = // value elements | 'value-boolean' @@ -42,10 +37,9 @@ export type TElementStatementName = // box elements 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; -export type TElementBlockName = 'block-dummy'; +export type TElementBlockName = 'process' | 'routine'; export type TElementName = - | 'dummy' | TElementDataName | TElementExpressionName | TElementStatementName @@ -54,17 +48,31 @@ export type TElementName = export interface IElementDataSpecification { label: string; type: 'Data'; - category: TElementCategoryData; + category: string; prototype: (name: TElementDataName, label: string) => IElementData; } +export interface IElementSpecificationEntryData extends IElementDataSpecification { + label: string; + type: 'Data'; + category: string; + prototype: typeof IElementData; +} + export interface IElementExpressionSpecification { label: string; type: 'Expression'; - category: TElementCategoryExpression; + category: string; prototype: (name: TElementExpressionName, label: string) => IElementExpression; } +export interface IElementSpecificationEntryExpression extends IElementExpressionSpecification { + label: string; + type: 'Expression'; + category: string; + prototype: typeof IElementExpression; +} + interface IElementInstructionSpecification { allowAbove?: TElementName[] | boolean; allowBelow?: TElementName[] | boolean; @@ -78,15 +86,47 @@ interface IElementInstructionSpecification { export type IElementStatementSpecification = IElementInstructionSpecification & { label: string; type: 'Statement'; - category: TElementCategoryStatement; + category: string; prototype: (name: TElementStatementName, label: string) => IElementStatement; }; +export type IElementSpecificationEntryStatement = IElementInstructionSpecification & { + label: string; + type: 'Statement'; + category: string; + prototype: typeof IElementStatement; +}; + export type IElementBlockSpecification = IElementInstructionSpecification & { label: string; type: 'Block'; - category: TElementCategoryBlock; + category: string; prototype: (name: TElementBlockName, label: string) => IElementBlock; allowNestInside?: TElementBlockName[] | boolean; forbidNestInside?: TElementBlockName[] | boolean; }; + +export type IElementSpecificationEntryBlock = IElementInstructionSpecification & { + label: string; + type: 'Block'; + category: string; + prototype: typeof IElementBlock; + allowNestInside?: TElementBlockName[] | boolean; + forbidNestInside?: TElementBlockName[] | boolean; +}; + +export interface IElementSpecification { + label: string; + type: TElementType; + category: string; + prototype: new (name: TElementName, label: string) => IElementSyntax; + allowAbove?: TElementName[] | boolean; + allowBelow?: TElementName[] | boolean; + forbidAbove?: TElementName[] | boolean; + forbidBelow?: TElementName[] | boolean; + allowedNestLevel?: number[] | 'any'; + allowedNestInside?: TElementBlockName[] | boolean; + forbiddenNestInside?: TElementBlockName[] | boolean; + allowNestInside?: TElementBlockName[] | boolean; + forbidNestInside?: TElementBlockName[] | boolean; +} diff --git a/src/syntax/elements/elementProgram.ts b/src/syntax/elements/elementProgram.ts new file mode 100644 index 0000000..e4e7237 --- /dev/null +++ b/src/syntax/elements/elementProgram.ts @@ -0,0 +1,46 @@ +import { TElementBlockName } from '@/@types/specification'; +import { ElementBlock } from './core/elementInstruction'; + +export class ElementProcess extends ElementBlock { + constructor(name: TElementBlockName, label: string) { + super(name, label, {}); + } + + onVisit(): void { + 1; + } + + onInnerVisit(): void { + 1; + } + + onInnerExit(): void { + 1; + } + + onExit(): void { + 1; + } +} + +export class ElementRoutine extends ElementBlock { + constructor(name: TElementBlockName, label: string) { + super(name, label, { name: ['string'] }); + } + + onVisit(): void { + 1; + } + + onInnerVisit(): void { + 1; + } + + onInnerExit(): void { + 1; + } + + onExit(): void { + 1; + } +} diff --git a/src/syntax/specification.spec.ts b/src/syntax/specification.spec.ts deleted file mode 100644 index 32eab24..0000000 --- a/src/syntax/specification.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { - TElementBlockName, - TElementDataName, - TElementExpressionName, - TElementStatementName, -} from '@/@types/specification'; -import specification from './specification'; - -import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from './elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; - -// ------------------------------------------------------------------------------------------------- - -abstract class ElementDataCover extends ElementData {} -abstract class ElementExpressionCover extends ElementExpression {} - -describe('Syntax Element Specification', () => { - describe('data element', () => { - const dataElementEntry = specification['value-boolean']; - expect(dataElementEntry.label).toBe('true'); - - test('fetch element and verify entry', () => { - expect(dataElementEntry.type).toBe('Data'); - expect(dataElementEntry.category).toBe('value'); - }); - - test('instantiate prototype fetch from entry query and verify instance', () => { - const prototype = dataElementEntry.prototype as ( - name: TElementDataName, - label: string - ) => ElementDataCover; - const elementInstance = prototype('value-boolean', dataElementEntry.label); - expect(elementInstance.name).toBe('value-boolean'); - expect(elementInstance.kind).toBe('Argument'); - expect(elementInstance.type).toBe('Data'); - }); - }); - - describe('expression element', () => { - const dataElementEntry = specification['operator-math-plus']; - - test('fetch element and verify entry', () => { - expect(dataElementEntry.label).toBe('+'); - expect(dataElementEntry.type).toBe('Expression'); - expect(dataElementEntry.category).toBe('operator-math'); - }); - - test('instantiate prototype fetch from entry query and verify instance', () => { - const prototype = dataElementEntry.prototype as ( - name: TElementExpressionName, - label: string - ) => ElementExpressionCover; - const elementInstance = prototype('operator-math-plus', dataElementEntry.label); - expect(elementInstance.name).toBe('operator-math-plus'); - expect(elementInstance.kind).toBe('Argument'); - expect(elementInstance.type).toBe('Expression'); - }); - }); - - describe('statement element', () => { - const dataElementEntry = specification['box-generic']; - - test('fetch element and verify entry', () => { - expect(dataElementEntry.label).toBe('Box'); - expect(dataElementEntry.type).toBe('Statement'); - expect(dataElementEntry.category).toBe('box'); - }); - - test('instantiate prototype fetch from entry query and verify instance', () => { - const prototype = dataElementEntry.prototype as ( - name: TElementStatementName, - label: string - ) => ElementStatement; - const elementInstance = prototype('box-generic', dataElementEntry.label); - expect(elementInstance.name).toBe('box-generic'); - expect(elementInstance.kind).toBe('Instruction'); - expect(elementInstance.type).toBe('Statement'); - }); - }); - - describe('block element', () => { - const dataElementEntry = specification['block-dummy']; - - test('fetch element and verify entry', () => { - expect(dataElementEntry.label).toBe('dummy'); - expect(dataElementEntry.type).toBe('Block'); - expect(dataElementEntry.category).toBe('block-dummy'); - }); - - test('instantiate prototype fetch from entry query and verify instance', () => { - const prototype = dataElementEntry.prototype as ( - name: TElementBlockName, - label: string - ) => ElementBlock; - const elementInstance = prototype('block-dummy', dataElementEntry.label); - expect(elementInstance.name).toBe('block-dummy'); - expect(elementInstance.kind).toBe('Instruction'); - expect(elementInstance.type).toBe('Block'); - }); - }); -}); diff --git a/src/syntax/specification.ts b/src/syntax/specification.ts deleted file mode 100644 index 5651078..0000000 --- a/src/syntax/specification.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { - IElementDataSpecification, - IElementExpressionSpecification, - IElementStatementSpecification, - IElementBlockSpecification, - TElementBlockName, - TElementDataName, - TElementExpressionName, - TElementStatementName, -} from '@/@types/specification'; - -import { ElementBlock } from './elements/core/elementInstruction'; - -import { - ElementValueBoolean, - ElementValueNumber, - ElementValueString, -} from './elements/elementValue'; -import { - ElementBoxGeneric, - ElementBoxBoolean, - ElementBoxNumber, - ElementBoxString, -} from './elements/elementBox'; -import { - ElementBoxIdentifierGeneric, - ElementBoxIdentifierBoolean, - ElementBoxIdentifierNumber, - ElementBoxIdentifierString, -} from './elements/elementBoxIdentifier'; -import { - ElementOperatorMathPlus, - ElementOperatorMathMinus, - ElementOperatorMathTimes, - ElementOperatorMathDivide, - ElementOperatorMathModulus, -} from './elements/elementOperatorMath'; - -class ElementBlockDummy extends ElementBlock { - constructor(name: TElementBlockName, label: string) { - super(name, label, {}); - } - - onVisit(): void { - console.log('dummy onVisit'); - } - - onInnerVisit(): void { - console.log('dummy onInnerVisit'); - } - - onInnerExit(): void { - console.log('dummy onInnerExit'); - } - - onExit(): void { - console.log('dummy onExit'); - } -} - -// ------------------------------------------------------------------------------------------------- - -/** Stores the specifications for each element as a key-value pair of name: specification. */ -const elementSpecification: { - [identifier: string]: - | IElementDataSpecification - | IElementExpressionSpecification - | IElementStatementSpecification - | IElementBlockSpecification; -} = { - // -- value elements --------------------------------------------------------------------------- - 'value-boolean': { - label: 'true', - type: 'Data', - category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueBoolean(name, label), - }, - 'value-number': { - label: '0', - type: 'Data', - category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueNumber(name, label), - }, - 'value-string': { - label: 'string', - type: 'Data', - category: 'value', - prototype: (name: TElementDataName, label: string) => new ElementValueString(name, label), - }, - // -- box elements ----------------------------------------------------------------------------- - 'box-generic': { - label: 'Box', - type: 'Statement', - category: 'box', - prototype: (name: TElementStatementName, label: string) => - new ElementBoxGeneric(name, label), - }, - 'box-boolean': { - label: 'Box (boolean)', - type: 'Statement', - category: 'box', - prototype: (name: TElementStatementName, label: string) => - new ElementBoxBoolean(name, label), - }, - 'box-number': { - label: 'Box (number)', - type: 'Statement', - category: 'box', - prototype: (name: TElementStatementName, label: string) => - new ElementBoxNumber(name, label), - }, - 'box-string': { - label: 'Box (string)', - type: 'Statement', - category: 'box', - prototype: (name: TElementStatementName, label: string) => - new ElementBoxString(name, label), - }, - // -- box identifier elements ------------------------------------------------------------------ - 'boxidentifier-generic': { - label: 'Box 1', - type: 'Data', - category: 'boxidentifier', - prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierGeneric(name, label), - }, - 'boxidentifier-boolean': { - label: 'Box 1', - type: 'Data', - category: 'boxidentifier', - prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierBoolean(name, label), - }, - 'boxidentifier-number': { - label: 'Box 1', - type: 'Data', - category: 'boxidentifier', - prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierNumber(name, label), - }, - 'boxidentifier-string': { - label: 'Box 1', - type: 'Data', - category: 'boxidentifier', - prototype: (name: TElementDataName, label: string) => - new ElementBoxIdentifierString(name, label), - }, - // -- math operator elements ------------------------------------------------------------------- - 'operator-math-plus': { - label: '+', - type: 'Expression', - category: 'operator-math', - prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathPlus(name, label), - }, - 'operator-math-minus': { - label: '-', - type: 'Expression', - category: 'operator-math', - prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathMinus(name, label), - }, - 'operator-math-times': { - label: '\u00d7', - type: 'Expression', - category: 'operator-math', - prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathTimes(name, label), - }, - 'operator-math-divide': { - label: '\u00f7', - type: 'Expression', - category: 'operator-math', - prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathDivide(name, label), - }, - 'operator-math-modulus': { - label: '%', - type: 'Expression', - category: 'operator-math', - prototype: (name: TElementExpressionName, label: string) => - new ElementOperatorMathModulus(name, label), - }, - // -- dummy block element ---------------------------------------------------------------------- - 'block-dummy': { - label: 'dummy', - type: 'Block', - category: 'block-dummy', - prototype: (name: TElementBlockName, label: string) => new ElementBlockDummy(name, label), - }, -}; - -export default elementSpecification; diff --git a/src/syntax/specification/specification.spec.ts b/src/syntax/specification/specification.spec.ts new file mode 100644 index 0000000..51f1573 --- /dev/null +++ b/src/syntax/specification/specification.spec.ts @@ -0,0 +1,283 @@ +import { + TElementDataName, + TElementExpressionName, + TElementStatementName, + TElementBlockName, + TElementName, +} from '@/@types/specification'; +import { + registerElementSpecificationEntry, + registerElementSpecificationEntries, + queryElementSpecification, + removeElementSpecificationEntry, + removeElementSpecificationEntries, + resetElementSpecificationTable, +} from './specification'; + +import { TData } from '@/@types/data'; +import { ElementData, ElementExpression } from '../elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from '../elements/core/elementInstruction'; + +// ------------------------------------------------------------------------------------------------- + +abstract class ElementDataCover extends ElementData {} +abstract class ElementExpressionCover extends ElementExpression {} + +describe('Syntax Element Specification', () => { + describe('element specifications', () => { + describe('data element', () => { + const dataElementEntry = queryElementSpecification('value-boolean')!; + expect(dataElementEntry.label).toBe('true'); + + test('fetch element and verify entry', () => { + expect(dataElementEntry.type).toBe('Data'); + expect(dataElementEntry.category).toBe('value'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementDataName, + label: string + ) => ElementDataCover; + const elementInstance = prototype('value-boolean', dataElementEntry.label); + expect(elementInstance.name).toBe('value-boolean'); + expect(elementInstance.kind).toBe('Argument'); + expect(elementInstance.type).toBe('Data'); + }); + }); + + describe('expression element', () => { + const dataElementEntry = queryElementSpecification('operator-math-plus')!; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('+'); + expect(dataElementEntry.type).toBe('Expression'); + expect(dataElementEntry.category).toBe('operator-math'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementExpressionName, + label: string + ) => ElementExpressionCover; + const elementInstance = prototype('operator-math-plus', dataElementEntry.label); + expect(elementInstance.name).toBe('operator-math-plus'); + expect(elementInstance.kind).toBe('Argument'); + expect(elementInstance.type).toBe('Expression'); + }); + }); + + describe('statement element', () => { + const dataElementEntry = queryElementSpecification('box-generic')!; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('Box'); + expect(dataElementEntry.type).toBe('Statement'); + expect(dataElementEntry.category).toBe('box'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementStatementName, + label: string + ) => ElementStatement; + const elementInstance = prototype('box-generic', dataElementEntry.label); + expect(elementInstance.name).toBe('box-generic'); + expect(elementInstance.kind).toBe('Instruction'); + expect(elementInstance.type).toBe('Statement'); + }); + }); + + describe('block element', () => { + const dataElementEntry = queryElementSpecification('process')!; + + test('fetch element and verify entry', () => { + expect(dataElementEntry.label).toBe('start'); + expect(dataElementEntry.type).toBe('Block'); + expect(dataElementEntry.category).toBe('program'); + }); + + test('instantiate prototype fetch from entry query and verify instance', () => { + const prototype = dataElementEntry.prototype as ( + name: TElementBlockName, + label: string + ) => ElementBlock; + const elementInstance = prototype('process', dataElementEntry.label); + expect(elementInstance.name).toBe('process'); + expect(elementInstance.kind).toBe('Instruction'); + expect(elementInstance.type).toBe('Block'); + }); + }); + }); + + describe('functions', () => { + class DummyElementData extends ElementData { + constructor(name: TElementName, label: string) { + super(name, label, {}, ['number'], 0); + } + public evaluate(): void { + 1; + } + } + + class DummyElementExpression extends ElementExpression { + constructor(name: TElementName, label: string) { + super(name, label, {}, ['number'], 0); + } + public evaluate(): void { + 1; + } + } + + class DummyElementStatement extends ElementStatement { + constructor(name: TElementName, label: string) { + super(name, label, {}); + } + public onVisit(): void { + 1; + } + } + + class DummyElementBlock extends ElementBlock { + constructor(name: TElementName, label: string) { + super(name, label, {}); + } + public onVisit(): void { + 1; + } + public onInnerVisit(): void { + 1; + } + public onInnerExit(): void { + 1; + } + public onExit(): void { + 1; + } + } + + test('register element specification entry and verify', () => { + registerElementSpecificationEntry('dummy0', { + label: 'dummy0', + type: 'Block', + category: 'dummy', + prototype: DummyElementBlock, + }); + const elementEntry = queryElementSpecification('dummy0' as TElementName)!; + expect(elementEntry.label).toBe('dummy0'); + expect(elementEntry.type).toBe('Block'); + expect(elementEntry.category).toBe('dummy'); + expect( + ( + elementEntry.prototype as ( + name: TElementBlockName, + label: string + ) => ElementBlock + )('dummy0' as TElementBlockName, 'dummy0') instanceof DummyElementBlock + ).toBe(true); + }); + + test('register element specification entries and verify', () => { + registerElementSpecificationEntries({ + dummy1: { + label: 'dummy1', + type: 'Data', + category: 'dummy', + prototype: DummyElementData, + }, + dummy2: { + label: 'dummy2', + type: 'Expression', + category: 'dummy', + prototype: DummyElementExpression, + }, + dummy3: { + label: 'dummy3', + type: 'Statement', + category: 'dummy', + prototype: DummyElementStatement, + }, + dummy4: { + label: 'dummy4', + type: 'Block', + category: 'dummy', + prototype: DummyElementBlock, + }, + }); + + const elementEntry1 = queryElementSpecification('dummy1' as TElementName)!; + const elementEntry2 = queryElementSpecification('dummy2' as TElementName)!; + const elementEntry3 = queryElementSpecification('dummy3' as TElementName)!; + const elementEntry4 = queryElementSpecification('dummy4' as TElementName)!; + + expect(elementEntry1.label).toBe('dummy1'); + expect(elementEntry1.type).toBe('Data'); + expect(elementEntry1.category).toBe('dummy'); + expect( + ( + elementEntry1.prototype as ( + name: TElementDataName, + label: string + ) => ElementDataCover + )('dummy1' as TElementDataName, 'dummy1') instanceof DummyElementData + ).toBe(true); + + expect(elementEntry2.label).toBe('dummy2'); + expect(elementEntry2.type).toBe('Expression'); + expect(elementEntry2.category).toBe('dummy'); + expect( + ( + elementEntry2.prototype as ( + name: TElementExpressionName, + label: string + ) => ElementExpressionCover + )('dummy2' as TElementExpressionName, 'dummy2') instanceof DummyElementExpression + ).toBe(true); + + expect(elementEntry3.label).toBe('dummy3'); + expect(elementEntry3.type).toBe('Statement'); + expect(elementEntry3.category).toBe('dummy'); + expect( + ( + elementEntry3.prototype as ( + name: TElementStatementName, + label: string + ) => ElementStatement + )('dummy3' as TElementStatementName, 'dummy3') instanceof DummyElementStatement + ).toBe(true); + + expect(elementEntry4.label).toBe('dummy4'); + expect(elementEntry4.type).toBe('Block'); + expect(elementEntry4.category).toBe('dummy'); + expect( + ( + elementEntry4.prototype as ( + name: TElementBlockName, + label: string + ) => ElementBlock + )('dummy4' as TElementBlockName, 'dummy4') instanceof DummyElementBlock + ).toBe(true); + }); + + test('remove element specification entry and verify', () => { + removeElementSpecificationEntry('dummy0' as TElementName); + const elementEntry = queryElementSpecification('dummy0' as TElementName)!; + expect(elementEntry).toBe(null); + }); + + test('remove element specification entries and verify', () => { + removeElementSpecificationEntries(['dummy1' as TElementName, 'dummy2' as TElementName]); + expect(queryElementSpecification('dummy1' as TElementName)!).toBe(null); + expect(queryElementSpecification('dummy2' as TElementName)!).toBe(null); + expect(queryElementSpecification('dummy3' as TElementName)!).not.toBe(null); + expect(queryElementSpecification('dummy4' as TElementName)!).not.toBe(null); + }); + + test('reset element specification table and verify', () => { + resetElementSpecificationTable(); + expect(queryElementSpecification('dummy3' as TElementName)!).toBe(null); + expect(queryElementSpecification('dummy4' as TElementName)!).toBe(null); + expect(queryElementSpecification('value-boolean')).not.toBe(null); + }); + }); +}); diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts new file mode 100644 index 0000000..12bb78d --- /dev/null +++ b/src/syntax/specification/specification.ts @@ -0,0 +1,112 @@ +import { + IElementDataSpecification, + IElementExpressionSpecification, + IElementStatementSpecification, + IElementBlockSpecification, + IElementSpecification, + TElementName, +} from '@/@types/specification'; + +import elementSpecificationEntries from './specificationEntries'; + +// -- private variables ---------------------------------------------------------------------------- + +/** Stores the specifications for each element as a key-value pair of name: specification. */ +let _elementSpecification: { + [identifier: string]: + | IElementDataSpecification + | IElementExpressionSpecification + | IElementStatementSpecification + | IElementBlockSpecification; +} = {}; + +// -- public functions ----------------------------------------------------------------------------- + +/** + * Registers a syntax element specification from a given specification entry data. + * @param name - name of the syntax element + * @param specification - specification entry data + */ +export function registerElementSpecificationEntry( + name: string, + specification: IElementSpecification +): void { + const { label, type, category, prototype } = specification; + + const specificationTableEntry: IElementSpecification = { + label, + type, + category, + // @ts-ignore + prototype: (name: string, label: string) => new prototype(name, label), + }; + + Object.entries(specification).forEach(([key, value]) => { + if (!['label', 'type', 'category', 'prototype'].includes(key)) { + // @ts-ignore + specificationTableEntry[key] = value; + } + }); + + _elementSpecification[name] = specificationTableEntry as unknown as + | IElementDataSpecification + | IElementExpressionSpecification + | IElementStatementSpecification + | IElementBlockSpecification; +} + +/** + * Returns the element specification for a syntax element. + * @param name name of the syntax element + * @returns element specification if exists, else `null` + */ +export function queryElementSpecification( + name: TElementName +): + | IElementDataSpecification + | IElementExpressionSpecification + | IElementStatementSpecification + | IElementBlockSpecification + | null { + return name in _elementSpecification ? { ..._elementSpecification[name] } : null; +} + +/** + * Registers a syntax element specification from a given specification entry table. + * @param specification - specification entry table object with key-value pairs of element name and corresponding specification entry data + */ +export function registerElementSpecificationEntries(specification: { + [identifier: string]: IElementSpecification; +}): void { + Object.entries(specification).forEach(([identifier, specification]) => + registerElementSpecificationEntry(identifier, specification) + ); +} + +/** + * Removes specification for a syntax element. + * @param name - name of the syntax element + */ +export function removeElementSpecificationEntry(name: TElementName): void { + if (name in _elementSpecification) { + delete _elementSpecification[name]; + } +} + +/** + * Removes specification for a list of syntax element. + * @param names - list of names of the syntax element + */ +export function removeElementSpecificationEntries(names: TElementName[]): void { + names.forEach((name) => removeElementSpecificationEntry(name)); +} + +/** + * Resets the element specification to factory list. + */ +export function resetElementSpecificationTable(): void { + _elementSpecification = {}; + registerElementSpecificationEntries(elementSpecificationEntries); +} + +resetElementSpecificationTable(); diff --git a/src/syntax/specification/specificationEntries.ts b/src/syntax/specification/specificationEntries.ts new file mode 100644 index 0000000..cbc29e6 --- /dev/null +++ b/src/syntax/specification/specificationEntries.ts @@ -0,0 +1,159 @@ +import { + IElementSpecificationEntryData, + IElementSpecificationEntryExpression, + IElementSpecificationEntryStatement, + IElementSpecificationEntryBlock, +} from '@/@types/specification'; + +import { + ElementValueBoolean, + ElementValueNumber, + ElementValueString, +} from '../elements/elementValue'; +import { + ElementBoxGeneric, + ElementBoxBoolean, + ElementBoxNumber, + ElementBoxString, +} from '../elements/elementBox'; +import { + ElementBoxIdentifierGeneric, + ElementBoxIdentifierBoolean, + ElementBoxIdentifierNumber, + ElementBoxIdentifierString, +} from '../elements/elementBoxIdentifier'; +import { + ElementOperatorMathPlus, + ElementOperatorMathMinus, + ElementOperatorMathTimes, + ElementOperatorMathDivide, + ElementOperatorMathModulus, +} from '../elements/elementOperatorMath'; +import { ElementProcess, ElementRoutine } from '../elements/elementProgram'; + +// ------------------------------------------------------------------------------------------------- + +/** Stores element specification data entries for factory list of syntax elements. */ +const _elementSpecificationEntries: { + [identifier: string]: + | IElementSpecificationEntryData + | IElementSpecificationEntryExpression + | IElementSpecificationEntryStatement + | IElementSpecificationEntryBlock; +} = { + // -- value elements --------------------------------------------------------------------------- + 'value-boolean': { + label: 'true', + type: 'Data', + category: 'value', + prototype: ElementValueBoolean, + }, + 'value-number': { + label: '0', + type: 'Data', + category: 'value', + prototype: ElementValueNumber, + }, + 'value-string': { + label: 'string', + type: 'Data', + category: 'value', + prototype: ElementValueString, + }, + // -- box elements ----------------------------------------------------------------------------- + 'box-generic': { + label: 'Box', + type: 'Statement', + category: 'box', + prototype: ElementBoxGeneric, + }, + 'box-boolean': { + label: 'Box (boolean)', + type: 'Statement', + category: 'box', + prototype: ElementBoxBoolean, + }, + 'box-number': { + label: 'Box (number)', + type: 'Statement', + category: 'box', + prototype: ElementBoxNumber, + }, + 'box-string': { + label: 'Box (string)', + type: 'Statement', + category: 'box', + prototype: ElementBoxString, + }, + // -- box identifier elements ------------------------------------------------------------------ + 'boxidentifier-generic': { + label: 'Box 1', + type: 'Data', + category: 'boxidentifier', + prototype: ElementBoxIdentifierGeneric, + }, + 'boxidentifier-boolean': { + label: 'Box 1', + type: 'Data', + category: 'boxidentifier', + prototype: ElementBoxIdentifierBoolean, + }, + 'boxidentifier-number': { + label: 'Box 1', + type: 'Data', + category: 'boxidentifier', + prototype: ElementBoxIdentifierNumber, + }, + 'boxidentifier-string': { + label: 'Box 1', + type: 'Data', + category: 'boxidentifier', + prototype: ElementBoxIdentifierString, + }, + // -- math operator elements ------------------------------------------------------------------- + 'operator-math-plus': { + label: '+', + type: 'Expression', + category: 'operator-math', + prototype: ElementOperatorMathPlus, + }, + 'operator-math-minus': { + label: '-', + type: 'Expression', + category: 'operator-math', + prototype: ElementOperatorMathMinus, + }, + 'operator-math-times': { + label: '\u00d7', + type: 'Expression', + category: 'operator-math', + prototype: ElementOperatorMathTimes, + }, + 'operator-math-divide': { + label: '\u00f7', + type: 'Expression', + category: 'operator-math', + prototype: ElementOperatorMathDivide, + }, + 'operator-math-modulus': { + label: '%', + type: 'Expression', + category: 'operator-math', + prototype: ElementOperatorMathModulus, + }, + // -- program elements ------------------------------------------------------------------------- + 'process': { + label: 'start', + type: 'Block', + category: 'program', + prototype: ElementProcess, + }, + 'routine': { + label: 'action', + type: 'Block', + category: 'program', + prototype: ElementRoutine, + }, +}; + +export default _elementSpecificationEntries; From 1272ff95d3eb8d39b18973e30d99aa08ed11cef5 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 23:19:15 +0530 Subject: [PATCH 124/176] specification: [refactor] Rename types and interfaces --- src/@types/specification.d.ts | 76 +++++++++++-------- src/syntax/elements/elementProgram.ts | 6 +- .../specification/specification.spec.ts | 36 ++++----- src/syntax/specification/specification.ts | 32 ++++---- src/syntax/warehouse.ts | 40 +++++----- 5 files changed, 102 insertions(+), 88 deletions(-) diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index b9deb8f..ebc607b 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -14,7 +14,8 @@ export type TElementKind = 'Argument' | 'Instruction'; /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ export type TElementType = 'Data' | 'Expression' | 'Statement' | 'Block'; -export type TElementDataName = +/** Names of factory list of data elements. */ +export type TElementNameData = // value elements | 'value-boolean' | 'value-number' @@ -25,7 +26,8 @@ export type TElementDataName = | 'boxidentifier-number' | 'boxidentifier-string'; -export type TElementExpressionName = +/** Names of factory list of expression elements. */ +export type TElementNameExpression = // math operator elements | 'operator-math-plus' | 'operator-math-minus' @@ -33,86 +35,98 @@ export type TElementExpressionName = | 'operator-math-divide' | 'operator-math-modulus'; -export type TElementStatementName = +/** Names of factory list of statement elements. */ +export type TElementNameStatement = // box elements 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; -export type TElementBlockName = 'process' | 'routine'; +/** Names of factory list of block elements. */ +export type TElementNameBlock = 'process' | 'routine'; +/** Names of factory list of syntax elements. */ export type TElementName = - | TElementDataName - | TElementExpressionName - | TElementStatementName - | TElementBlockName; + | TElementNameData + | TElementNameExpression + | TElementNameStatement + | TElementNameBlock; -export interface IElementDataSpecification { +/** Type for the specification object for data elements. */ +export interface IElementSpecificationData { label: string; type: 'Data'; category: string; - prototype: (name: TElementDataName, label: string) => IElementData; + prototype: (name: TElementNameData, label: string) => IElementData; } -export interface IElementSpecificationEntryData extends IElementDataSpecification { +/** Type for the specification entry object for data elements. */ +export interface IElementSpecificationEntryData extends IElementSpecificationData { label: string; type: 'Data'; category: string; prototype: typeof IElementData; } -export interface IElementExpressionSpecification { +/** Type for the specification object for expression elements. */ +export interface IElementSpecificationExpression { label: string; type: 'Expression'; category: string; - prototype: (name: TElementExpressionName, label: string) => IElementExpression; + prototype: (name: TElementNameExpression, label: string) => IElementExpression; } -export interface IElementSpecificationEntryExpression extends IElementExpressionSpecification { +/** Type for the specification object for expression elements. */ +export interface IElementSpecificationEntryExpression extends IElementSpecificationExpression { label: string; type: 'Expression'; category: string; prototype: typeof IElementExpression; } -interface IElementInstructionSpecification { +/** Type for the specification object for instruction elements. */ +interface IElementSpecificationInstruction { allowAbove?: TElementName[] | boolean; allowBelow?: TElementName[] | boolean; forbidAbove?: TElementName[] | boolean; forbidBelow?: TElementName[] | boolean; allowedNestLevel?: number[] | 'any'; - allowedNestInside?: TElementBlockName[] | boolean; - forbiddenNestInside?: TElementBlockName[] | boolean; + allowedNestInside?: TElementNameBlock[] | boolean; + forbiddenNestInside?: TElementNameBlock[] | boolean; } -export type IElementStatementSpecification = IElementInstructionSpecification & { +/** Type for the specification object for statement elements. */ +export type IElementSpecificationStatement = IElementSpecificationInstruction & { label: string; type: 'Statement'; category: string; - prototype: (name: TElementStatementName, label: string) => IElementStatement; + prototype: (name: TElementNameStatement, label: string) => IElementStatement; }; -export type IElementSpecificationEntryStatement = IElementInstructionSpecification & { +/** Type for the specification object for statement elements. */ +export type IElementSpecificationEntryStatement = IElementSpecificationInstruction & { label: string; type: 'Statement'; category: string; prototype: typeof IElementStatement; }; -export type IElementBlockSpecification = IElementInstructionSpecification & { +/** Type for the specification object for block elements. */ +export type IElementSpecificationBlock = IElementSpecificationInstruction & { label: string; type: 'Block'; category: string; - prototype: (name: TElementBlockName, label: string) => IElementBlock; - allowNestInside?: TElementBlockName[] | boolean; - forbidNestInside?: TElementBlockName[] | boolean; + prototype: (name: TElementNameBlock, label: string) => IElementBlock; + allowNestInside?: TElementNameBlock[] | boolean; + forbidNestInside?: TElementNameBlock[] | boolean; }; -export type IElementSpecificationEntryBlock = IElementInstructionSpecification & { +/** Type for the specification entry object for block elements. */ +export type IElementSpecificationEntryBlock = IElementSpecificationInstruction & { label: string; type: 'Block'; category: string; prototype: typeof IElementBlock; - allowNestInside?: TElementBlockName[] | boolean; - forbidNestInside?: TElementBlockName[] | boolean; + allowNestInside?: TElementNameBlock[] | boolean; + forbidNestInside?: TElementNameBlock[] | boolean; }; export interface IElementSpecification { @@ -125,8 +139,8 @@ export interface IElementSpecification { forbidAbove?: TElementName[] | boolean; forbidBelow?: TElementName[] | boolean; allowedNestLevel?: number[] | 'any'; - allowedNestInside?: TElementBlockName[] | boolean; - forbiddenNestInside?: TElementBlockName[] | boolean; - allowNestInside?: TElementBlockName[] | boolean; - forbidNestInside?: TElementBlockName[] | boolean; + allowedNestInside?: TElementNameBlock[] | boolean; + forbiddenNestInside?: TElementNameBlock[] | boolean; + allowNestInside?: TElementNameBlock[] | boolean; + forbidNestInside?: TElementNameBlock[] | boolean; } diff --git a/src/syntax/elements/elementProgram.ts b/src/syntax/elements/elementProgram.ts index e4e7237..7b5a678 100644 --- a/src/syntax/elements/elementProgram.ts +++ b/src/syntax/elements/elementProgram.ts @@ -1,8 +1,8 @@ -import { TElementBlockName } from '@/@types/specification'; +import { TElementNameBlock } from '@/@types/specification'; import { ElementBlock } from './core/elementInstruction'; export class ElementProcess extends ElementBlock { - constructor(name: TElementBlockName, label: string) { + constructor(name: TElementNameBlock, label: string) { super(name, label, {}); } @@ -24,7 +24,7 @@ export class ElementProcess extends ElementBlock { } export class ElementRoutine extends ElementBlock { - constructor(name: TElementBlockName, label: string) { + constructor(name: TElementNameBlock, label: string) { super(name, label, { name: ['string'] }); } diff --git a/src/syntax/specification/specification.spec.ts b/src/syntax/specification/specification.spec.ts index 51f1573..b615184 100644 --- a/src/syntax/specification/specification.spec.ts +++ b/src/syntax/specification/specification.spec.ts @@ -1,8 +1,8 @@ import { - TElementDataName, - TElementExpressionName, - TElementStatementName, - TElementBlockName, + TElementNameData, + TElementNameExpression, + TElementNameStatement, + TElementNameBlock, TElementName, } from '@/@types/specification'; import { @@ -36,7 +36,7 @@ describe('Syntax Element Specification', () => { test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementDataName, + name: TElementNameData, label: string ) => ElementDataCover; const elementInstance = prototype('value-boolean', dataElementEntry.label); @@ -57,7 +57,7 @@ describe('Syntax Element Specification', () => { test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementExpressionName, + name: TElementNameExpression, label: string ) => ElementExpressionCover; const elementInstance = prototype('operator-math-plus', dataElementEntry.label); @@ -78,7 +78,7 @@ describe('Syntax Element Specification', () => { test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementStatementName, + name: TElementNameStatement, label: string ) => ElementStatement; const elementInstance = prototype('box-generic', dataElementEntry.label); @@ -99,7 +99,7 @@ describe('Syntax Element Specification', () => { test('instantiate prototype fetch from entry query and verify instance', () => { const prototype = dataElementEntry.prototype as ( - name: TElementBlockName, + name: TElementNameBlock, label: string ) => ElementBlock; const elementInstance = prototype('process', dataElementEntry.label); @@ -170,10 +170,10 @@ describe('Syntax Element Specification', () => { expect( ( elementEntry.prototype as ( - name: TElementBlockName, + name: TElementNameBlock, label: string ) => ElementBlock - )('dummy0' as TElementBlockName, 'dummy0') instanceof DummyElementBlock + )('dummy0' as TElementNameBlock, 'dummy0') instanceof DummyElementBlock ).toBe(true); }); @@ -216,10 +216,10 @@ describe('Syntax Element Specification', () => { expect( ( elementEntry1.prototype as ( - name: TElementDataName, + name: TElementNameData, label: string ) => ElementDataCover - )('dummy1' as TElementDataName, 'dummy1') instanceof DummyElementData + )('dummy1' as TElementNameData, 'dummy1') instanceof DummyElementData ).toBe(true); expect(elementEntry2.label).toBe('dummy2'); @@ -228,10 +228,10 @@ describe('Syntax Element Specification', () => { expect( ( elementEntry2.prototype as ( - name: TElementExpressionName, + name: TElementNameExpression, label: string ) => ElementExpressionCover - )('dummy2' as TElementExpressionName, 'dummy2') instanceof DummyElementExpression + )('dummy2' as TElementNameExpression, 'dummy2') instanceof DummyElementExpression ).toBe(true); expect(elementEntry3.label).toBe('dummy3'); @@ -240,10 +240,10 @@ describe('Syntax Element Specification', () => { expect( ( elementEntry3.prototype as ( - name: TElementStatementName, + name: TElementNameStatement, label: string ) => ElementStatement - )('dummy3' as TElementStatementName, 'dummy3') instanceof DummyElementStatement + )('dummy3' as TElementNameStatement, 'dummy3') instanceof DummyElementStatement ).toBe(true); expect(elementEntry4.label).toBe('dummy4'); @@ -252,10 +252,10 @@ describe('Syntax Element Specification', () => { expect( ( elementEntry4.prototype as ( - name: TElementBlockName, + name: TElementNameBlock, label: string ) => ElementBlock - )('dummy4' as TElementBlockName, 'dummy4') instanceof DummyElementBlock + )('dummy4' as TElementNameBlock, 'dummy4') instanceof DummyElementBlock ).toBe(true); }); diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts index 12bb78d..49e54a0 100644 --- a/src/syntax/specification/specification.ts +++ b/src/syntax/specification/specification.ts @@ -1,8 +1,8 @@ import { - IElementDataSpecification, - IElementExpressionSpecification, - IElementStatementSpecification, - IElementBlockSpecification, + IElementSpecificationData, + IElementSpecificationExpression, + IElementSpecificationStatement, + IElementSpecificationBlock, IElementSpecification, TElementName, } from '@/@types/specification'; @@ -14,10 +14,10 @@ import elementSpecificationEntries from './specificationEntries'; /** Stores the specifications for each element as a key-value pair of name: specification. */ let _elementSpecification: { [identifier: string]: - | IElementDataSpecification - | IElementExpressionSpecification - | IElementStatementSpecification - | IElementBlockSpecification; + | IElementSpecificationData + | IElementSpecificationExpression + | IElementSpecificationStatement + | IElementSpecificationBlock; } = {}; // -- public functions ----------------------------------------------------------------------------- @@ -49,10 +49,10 @@ export function registerElementSpecificationEntry( }); _elementSpecification[name] = specificationTableEntry as unknown as - | IElementDataSpecification - | IElementExpressionSpecification - | IElementStatementSpecification - | IElementBlockSpecification; + | IElementSpecificationData + | IElementSpecificationExpression + | IElementSpecificationStatement + | IElementSpecificationBlock; } /** @@ -63,10 +63,10 @@ export function registerElementSpecificationEntry( export function queryElementSpecification( name: TElementName ): - | IElementDataSpecification - | IElementExpressionSpecification - | IElementStatementSpecification - | IElementBlockSpecification + | IElementSpecificationData + | IElementSpecificationExpression + | IElementSpecificationStatement + | IElementSpecificationBlock | null { return name in _elementSpecification ? { ..._elementSpecification[name] } : null; } diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index a39633a..0ae9086 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -9,10 +9,10 @@ import { TElementCategoryExpression, TElementCategoryStatement, TElementCategoryBlock, - TElementDataName, - TElementExpressionName, - TElementStatementName, - TElementBlockName, + TElementNameData, + TElementNameExpression, + TElementNameStatement, + TElementNameBlock, } from '@/@types/specification'; import elementSpecification from './specification'; @@ -43,28 +43,28 @@ let _elementMap: { | { instance: _ElementDataCover; type: 'Data'; - name: TElementDataName; + name: TElementNameData; kind: 'Argument'; category: TElementCategoryData; } | { instance: _ElementExpressionCover; type: 'Expression'; - name: TElementExpressionName; + name: TElementNameExpression; kind: 'Argument'; category: TElementCategoryExpression; } | { instance: ElementStatement; type: 'Statement'; - name: TElementStatementName; + name: TElementNameStatement; kind: 'Instruction'; category: TElementCategoryStatement; } | { instance: ElementBlock; type: 'Block'; - name: TElementBlockName; + name: TElementNameBlock; kind: 'Instruction'; category: TElementCategoryBlock; }; @@ -93,7 +93,7 @@ function _addInstance( case 'Data': _elementMap[instanceID] = { instance: instance as _ElementDataCover, - name: elementName as TElementDataName, + name: elementName as TElementNameData, type: type as 'Data', kind: 'Argument', category: category as TElementCategoryData, @@ -102,7 +102,7 @@ function _addInstance( case 'Expression': _elementMap[instanceID] = { instance: instance as _ElementExpressionCover, - name: elementName as TElementExpressionName, + name: elementName as TElementNameExpression, type: type as 'Expression', kind: 'Argument', category: category as TElementCategoryExpression, @@ -111,7 +111,7 @@ function _addInstance( case 'Statement': _elementMap[instanceID] = { instance: instance as ElementStatement, - name: elementName as TElementStatementName, + name: elementName as TElementNameStatement, type: type as 'Statement', kind: 'Instruction', category: category as TElementCategoryStatement, @@ -120,7 +120,7 @@ function _addInstance( case 'Block': _elementMap[instanceID] = { instance: instance as ElementBlock, - name: elementName as TElementBlockName, + name: elementName as TElementNameBlock, type: type as 'Block', kind: 'Instruction', category: category as TElementCategoryBlock, @@ -190,28 +190,28 @@ export function addInstance(elementName: TElementName): string { switch (type) { case 'Data': - instance = (prototype as (name: TElementDataName, label: string) => _ElementDataCover)( - elementName as TElementDataName, + instance = (prototype as (name: TElementNameData, label: string) => _ElementDataCover)( + elementName as TElementNameData, label ); break; case 'Expression': instance = ( prototype as ( - name: TElementExpressionName, + name: TElementNameExpression, label: string ) => _ElementExpressionCover - )(elementName as TElementExpressionName, label); + )(elementName as TElementNameExpression, label); break; case 'Statement': instance = ( - prototype as (name: TElementStatementName, label: string) => ElementStatement - )(elementName as TElementStatementName, label); + prototype as (name: TElementNameStatement, label: string) => ElementStatement + )(elementName as TElementNameStatement, label); break; case 'Block': default: - instance = (prototype as (name: TElementBlockName, label: string) => ElementBlock)( - elementName as TElementBlockName, + instance = (prototype as (name: TElementNameBlock, label: string) => ElementBlock)( + elementName as TElementNameBlock, label ); } From 3479f3332ec375def86ba397f63b0bbe679bafbf Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 23:31:59 +0530 Subject: [PATCH 125/176] warehouse: [fix] Adapt to changes in specification --- src/syntax/specification/specification.ts | 12 ++++++ src/syntax/warehouse.spec.ts | 12 +++--- src/syntax/warehouse.ts | 49 ++++++++++++----------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts index 49e54a0..cc0e598 100644 --- a/src/syntax/specification/specification.ts +++ b/src/syntax/specification/specification.ts @@ -55,6 +55,18 @@ export function registerElementSpecificationEntry( | IElementSpecificationBlock; } +/** + * Returns the names of available syntax elements. + * @returns a list of syntax element names. + */ +export function getElementNames(): TElementName[] { + return Object.keys(_elementSpecification) as TElementName[]; +} + +export function getElementCategories(): string[] { + return [...new Set(Object.entries(_elementSpecification).map(([_, { category }]) => category))]; +} + /** * Returns the element specification for a syntax element. * @param name name of the syntax element diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse.spec.ts index 8e620e4..91e82bf 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse.spec.ts @@ -43,7 +43,7 @@ describe('Syntax Element Warehouse', () => { }); test('add an instance of a block element', () => { - instanceID4 = addInstance('block-dummy'); + instanceID4 = addInstance('process'); expect(typeof instanceID4).toBe('string'); }); }); @@ -82,10 +82,10 @@ describe('Syntax Element Warehouse', () => { test('fetch instance of a block element with valid instance ID and verify', () => { const { name, kind, type, category, instance } = getInstance(instanceID4)!; - expect(name).toBe('block-dummy'); + expect(name).toBe('process'); expect(kind).toBe('Instruction'); expect(type).toBe('Block'); - expect(category).toBe('block-dummy'); + expect(category).toBe('program'); expect(instance instanceof ElementBlock); }); }); @@ -138,7 +138,7 @@ describe('Syntax Element Warehouse', () => { expect(getCategoryCount('boxidentifier')).toBe(1); expect(getCategoryCount('operator-math')).toBe(2); expect(getCategoryCount('box')).toBe(2); - expect(getCategoryCount('block-dummy')).toBe(1); + expect(getCategoryCount('program')).toBe(1); }); test('verify category count all', () => { @@ -148,7 +148,7 @@ describe('Syntax Element Warehouse', () => { ['boxidentifier', 1], ['operator-math', 2], ['box', 2], - ['block-dummy', 1], + ['program', 1], ]) ); }); @@ -169,7 +169,7 @@ describe('Syntax Element Warehouse', () => { expect(getCategoryCount('boxidentifier')).toBe(1); expect(getCategoryCount('operator-math')).toBe(2); expect(getCategoryCount('box')).toBe(2); - expect(getCategoryCount('block-dummy')).toBe(1); + expect(getCategoryCount('program')).toBe(1); }); }); diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse.ts index 0ae9086..920581d 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse.ts @@ -4,17 +4,16 @@ import { TElementName, TElementKind, TElementType, - TElementCategory, - TElementCategoryData, - TElementCategoryExpression, - TElementCategoryStatement, - TElementCategoryBlock, TElementNameData, TElementNameExpression, TElementNameStatement, TElementNameBlock, } from '@/@types/specification'; -import elementSpecification from './specification'; +import { + getElementNames, + getElementCategories, + queryElementSpecification, +} from './specification/specification'; import { TData } from '@/@types/data'; import { ElementSyntax } from './elements/core/elementSyntax'; @@ -45,28 +44,28 @@ let _elementMap: { type: 'Data'; name: TElementNameData; kind: 'Argument'; - category: TElementCategoryData; + category: string; } | { instance: _ElementExpressionCover; type: 'Expression'; name: TElementNameExpression; kind: 'Argument'; - category: TElementCategoryExpression; + category: string; } | { instance: ElementStatement; type: 'Statement'; name: TElementNameStatement; kind: 'Instruction'; - category: TElementCategoryStatement; + category: string; } | { instance: ElementBlock; type: 'Block'; name: TElementNameBlock; kind: 'Instruction'; - category: TElementCategoryBlock; + category: string; }; } = {}; @@ -85,7 +84,7 @@ function _addInstance( instanceID: string, instance: ElementSyntax, type: TElementType, - category: TElementCategory + category: string ): void { const kind = type === 'Data' || type === 'Expression' ? 'Argument' : 'Instruction'; @@ -96,7 +95,7 @@ function _addInstance( name: elementName as TElementNameData, type: type as 'Data', kind: 'Argument', - category: category as TElementCategoryData, + category: category as string, }; break; case 'Expression': @@ -105,7 +104,7 @@ function _addInstance( name: elementName as TElementNameExpression, type: type as 'Expression', kind: 'Argument', - category: category as TElementCategoryExpression, + category: category as string, }; break; case 'Statement': @@ -114,7 +113,7 @@ function _addInstance( name: elementName as TElementNameStatement, type: type as 'Statement', kind: 'Instruction', - category: category as TElementCategoryStatement, + category: category as string, }; break; case 'Block': @@ -123,7 +122,7 @@ function _addInstance( name: elementName as TElementNameBlock, type: type as 'Block', kind: 'Instruction', - category: category as TElementCategoryBlock, + category: category as string, }; break; } @@ -139,9 +138,7 @@ function _addInstance( */ function _resetElementNameCountMap(): void { _elementNameCountMap = {}; - (Object.keys(elementSpecification) as TElementName[]).forEach( - (elementName) => (_elementNameCountMap[elementName] = 0) - ); + getElementNames().forEach((elementName) => (_elementNameCountMap[elementName] = 0)); } /** @@ -171,9 +168,7 @@ function _resetElementTypeCountMap(): void { */ function _resetElementCategoryCountMap(): void { _elementCategoryCountMap = {}; - const categorySet = new Set(); - Object.entries(elementSpecification).forEach(([_, { category }]) => categorySet.add(category)); - [...categorySet].forEach((category) => (_elementCategoryCountMap[category] = 0)); + getElementCategories().forEach((category) => (_elementCategoryCountMap[category] = 0)); } // -- public functions ----------------------------------------------------------------------------- @@ -184,7 +179,13 @@ function _resetElementCategoryCountMap(): void { * @returns - unique instance ID for the element instance */ export function addInstance(elementName: TElementName): string { - const { label, type, category, prototype } = elementSpecification[elementName]; + const elementSpecification = queryElementSpecification(elementName); + + if (elementSpecification === null) { + throw Error(`InvalidAccessError: element with name "${elementName}" does not exist`); + } + + const { label, type, category, prototype } = elementSpecification; let instance: ElementSyntax; @@ -235,7 +236,7 @@ export function getInstance(instanceID: string): { name: TElementName; kind: TElementKind; type: TElementType; - category: TElementCategory; + category: string; instance: ElementSyntax; } | null { return instanceID in _elementMap ? { ..._elementMap[instanceID] } : null; @@ -314,7 +315,7 @@ export function getTypeCountAll(): { [type: string]: number } { * @param category - category of the element * @returns count of the element instances for the element category */ -export function getCategoryCount(category: TElementCategory): number { +export function getCategoryCount(category: string): number { return _elementCategoryCountMap[category]; } From 65fe1b2db913136f8fe67acfe35a11f971e61336 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 13 Nov 2021 23:33:49 +0530 Subject: [PATCH 126/176] warehouse: [refactor] Create warehouse directory --- src/syntax/{ => warehouse}/warehouse.spec.ts | 8 ++++---- src/syntax/{ => warehouse}/warehouse.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) rename src/syntax/{ => warehouse}/warehouse.spec.ts (96%) rename src/syntax/{ => warehouse}/warehouse.ts (97%) diff --git a/src/syntax/warehouse.spec.ts b/src/syntax/warehouse/warehouse.spec.ts similarity index 96% rename from src/syntax/warehouse.spec.ts rename to src/syntax/warehouse/warehouse.spec.ts index 91e82bf..cdf4c76 100644 --- a/src/syntax/warehouse.spec.ts +++ b/src/syntax/warehouse/warehouse.spec.ts @@ -13,10 +13,10 @@ import { resetWarehouse, } from './warehouse'; -import { ElementBlock } from './elements/core/elementInstruction'; -import { ElementBoxBoolean } from './elements/elementBox'; -import { ElementOperatorMathPlus } from './elements/elementOperatorMath'; -import { ElementValueBoolean } from './elements/elementValue'; +import { ElementBlock } from '../elements/core/elementInstruction'; +import { ElementBoxBoolean } from '../elements/elementBox'; +import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; +import { ElementValueBoolean } from '../elements/elementValue'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/warehouse.ts b/src/syntax/warehouse/warehouse.ts similarity index 97% rename from src/syntax/warehouse.ts rename to src/syntax/warehouse/warehouse.ts index 920581d..ed6d5e9 100644 --- a/src/syntax/warehouse.ts +++ b/src/syntax/warehouse/warehouse.ts @@ -13,12 +13,12 @@ import { getElementNames, getElementCategories, queryElementSpecification, -} from './specification/specification'; +} from '../specification/specification'; import { TData } from '@/@types/data'; -import { ElementSyntax } from './elements/core/elementSyntax'; -import { ElementData, ElementExpression } from './elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from './elements/core/elementInstruction'; +import { ElementSyntax } from '../elements/core/elementSyntax'; +import { ElementData, ElementExpression } from '../elements/core/elementArgument'; +import { ElementStatement, ElementBlock } from '../elements/core/elementInstruction'; // -- private variables ---------------------------------------------------------------------------- From 65b6bfd7eaa13cb954c7cbe47237afafa19a124c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 01:44:10 +0530 Subject: [PATCH 127/176] syntax tree: [feat] Create syntax tree with tests --- .eslintrc.json | 2 +- src/@types/elements.d.ts | 8 +- src/@types/specification.d.ts | 24 +- src/@types/syntaxTree.d.ts | 144 ++++ .../elements/core/elementSyntax.spec.ts | 36 +- src/syntax/elements/core/elementSyntax.ts | 4 +- .../specification/specificationEntries.ts | 4 + src/syntax/tree/node.ts | 218 ++++++ src/syntax/tree/syntaxTree.spec.ts | 373 ++++++++++ src/syntax/tree/syntaxTree.ts | 646 ++++++++++++++++++ 10 files changed, 1427 insertions(+), 32 deletions(-) create mode 100644 src/@types/syntaxTree.d.ts create mode 100644 src/syntax/tree/node.ts create mode 100644 src/syntax/tree/syntaxTree.spec.ts create mode 100644 src/syntax/tree/syntaxTree.ts diff --git a/.eslintrc.json b/.eslintrc.json index fbc91f4..85c8524 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -24,7 +24,7 @@ } ], "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": ["error"], + "@typescript-eslint/no-use-before-define": ["error", "nofunc"], "quotes": [ "warn", "single", diff --git a/src/@types/elements.d.ts b/src/@types/elements.d.ts index cc60510..ccbcb69 100644 --- a/src/@types/elements.d.ts +++ b/src/@types/elements.d.ts @@ -17,8 +17,12 @@ export interface IElementSyntax { argCount: number; /** Names of the arguments the syntax element registers. */ argLabels: string[]; - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ - argMap: { [key: string]: TDataName[] }; + /** + * Returns the data type an argument accepts. + * @param argName - name of the argument + * @returns list of data types + */ + getArgType(argName: string): TDataName[]; /** * Updates the label of the syntax element. * @param value - new label value diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index ebc607b..d08047f 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -86,11 +86,11 @@ export interface IElementSpecificationEntryExpression extends IElementSpecificat interface IElementSpecificationInstruction { allowAbove?: TElementName[] | boolean; allowBelow?: TElementName[] | boolean; - forbidAbove?: TElementName[] | boolean; - forbidBelow?: TElementName[] | boolean; + forbidAbove?: TElementName[]; + forbidBelow?: TElementName[]; allowedNestLevel?: number[] | 'any'; allowedNestInside?: TElementNameBlock[] | boolean; - forbiddenNestInside?: TElementNameBlock[] | boolean; + forbiddenNestInside?: TElementNameBlock[]; } /** Type for the specification object for statement elements. */ @@ -115,8 +115,8 @@ export type IElementSpecificationBlock = IElementSpecificationInstruction & { type: 'Block'; category: string; prototype: (name: TElementNameBlock, label: string) => IElementBlock; - allowNestInside?: TElementNameBlock[] | boolean; - forbidNestInside?: TElementNameBlock[] | boolean; + allowNestInside?: (TElementNameStatement | TElementNameBlock)[] | boolean; + forbidNestInside?: (TElementNameStatement | TElementNameBlock)[]; }; /** Type for the specification entry object for block elements. */ @@ -125,8 +125,8 @@ export type IElementSpecificationEntryBlock = IElementSpecificationInstruction & type: 'Block'; category: string; prototype: typeof IElementBlock; - allowNestInside?: TElementNameBlock[] | boolean; - forbidNestInside?: TElementNameBlock[] | boolean; + allowNestInside?: (TElementNameStatement | TElementNameBlock)[] | boolean; + forbidNestInside?: (TElementNameStatement | TElementNameBlock)[]; }; export interface IElementSpecification { @@ -136,11 +136,11 @@ export interface IElementSpecification { prototype: new (name: TElementName, label: string) => IElementSyntax; allowAbove?: TElementName[] | boolean; allowBelow?: TElementName[] | boolean; - forbidAbove?: TElementName[] | boolean; - forbidBelow?: TElementName[] | boolean; + forbidAbove?: TElementName[]; + forbidBelow?: TElementName[]; allowedNestLevel?: number[] | 'any'; allowedNestInside?: TElementNameBlock[] | boolean; - forbiddenNestInside?: TElementNameBlock[] | boolean; - allowNestInside?: TElementNameBlock[] | boolean; - forbidNestInside?: TElementNameBlock[] | boolean; + forbiddenNestInside?: TElementNameBlock[]; + allowNestInside?: (TElementNameStatement | TElementNameBlock)[] | boolean; + forbidNestInside?: (TElementNameStatement | TElementNameBlock)[] | boolean; } diff --git a/src/@types/syntaxTree.d.ts b/src/@types/syntaxTree.d.ts new file mode 100644 index 0000000..5be30e0 --- /dev/null +++ b/src/@types/syntaxTree.d.ts @@ -0,0 +1,144 @@ +import { + TElementNameData, + TElementNameExpression, + TElementNameStatement, + TElementNameBlock, + TElementName, +} from './specification'; + +// -- snapshots ------------------------------------------------------------------------------------ + +/** Type definition for the snapshot of a data element. */ +export interface ITreeSnapshotData { + /** Name of the data element. */ + elementName: TElementNameData; +} + +/** Type definition for the snapshot of an expression element. */ +export interface ITreeSnapshotExpression { + /** Name of the expression element. */ + elementName: TElementNameExpression; + /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ + argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; +} + +/** Type definition for the snapshot of a statement element. */ +export interface ITreeSnapshotStatement { + /** Name of the statement element. */ + elementName: TElementNameStatement; + /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ + argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; +} + +/** Type definition for the snapshot of a block element. */ +export interface ITreeSnapshotBlock { + /** Name of the block element. */ + elementName: TElementNameBlock; + /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ + argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; + /** List of snaphots of the elements nested in the block. */ + scope: (ITreeSnapshotStatement | ITreeSnapshotBlock)[]; +} + +/** Type definition for the snapshot of the entire syntax tree. */ +export interface ITreeSnapshot { + /** List of snapshots of all process elements. */ + process: ITreeSnapshotBlock[]; + /** List of snapshots of all routine elements. */ + routine: ITreeSnapshotBlock[]; + /** List of snapshot lists of all non-process and non-routine element stacks. */ + crumbs: ( + | ITreeSnapshotData + | ITreeSnapshotExpression + | ITreeSnapshotStatement + | ITreeSnapshotBlock + )[][]; +} + +// -- nodes ---------------------------------------------------------------------------------------- + +/** Type definition for the class that implements a generic syntax tree node. */ +interface ITreeNode { + /** Name of the syntax element. */ + elementName: TElementName; + /** Node ID of the syntax tree node instance. */ + nodeID: string; + /** Warehouse ID of the syntax element instance. */ + instanceID: string; +} + +/** Type definition for a generic syntax tree argument node. */ +export interface ITreeNodeArgument extends ITreeNode { + /** Syntax tree node reference to the connector syntax tree node. */ + connectedTo: Exclude | null; +} + +/** Type definition for the class that implements a syntax tree data node. */ +export interface ITreeNodeData extends ITreeNodeArgument { + /** Name of the data element. */ + elementName: TElementNameData; + /** Returns a snapshot of the syntax tree data node. */ + snapshot: ITreeSnapshotData; +} + +/** Type definition for the class that implements a syntax tree expression node. */ +export interface ITreeNodeExpression extends ITreeNodeArgument { + /** Name of the expression element. */ + elementName: TElementNameExpression; + /** Returns a snapshot of the syntax tree expression node. */ + snapshot: ITreeSnapshotExpression; + /** + * Adds an argument connection. + * @param argName - name of the argument + * @param node - node instance of the connecting node + */ + public attachArg(argName: string, node: ITreeNodeData | ITreeNodeExpression): void; + /** + * Removes an argument connection. + * @param argName - name of the argument + */ + public detachArg(argName: string): void; +} + +/** Type definition for a generic syntax tree instruction node. */ +export interface ITreeNodeInstruction extends ITreeNode { + /** + * Adds an argument connection. + * @param argName - name of the argument + * @param node - node instance of the connecting node + */ + public attachArg(argName: string, node: ITreeNodeData | ITreeNodeExpression): void; + /** + * Removes an argument connection. + * @param argName - name of the argument + */ + public detachArg(argName: string): void; + /** Syntax tree node reference of the preceding instruction element. */ + beforeConnection: ITreeNodeInstruction | null; + /** Syntax tree node reference of the following instruction element. */ + afterConnection: ITreeNodeInstruction | null; + /** Syntax tree node reference of the block element which nests this node. */ + parentBlock: TreeNodeBlock | null; + /** Nest level of this node. */ + nestLevel: number; +} + +/** Type definition for the class that implements a syntax tree statement node. */ +export interface ITreeNodeStatement extends ITreeNodeInstruction { + /** Name of the statement element. */ + elementName: TElementNameStatement; + /** Returns a snapshot of the syntax tree statement node. */ + snapshot: ITreeSnapshotStatement; +} + +/** Type definition for the class that implements a syntax tree block node. */ +export interface ITreeNodeBlock extends ITreeNodeInstruction { + /** Name of the block element. */ + elementName: TElementNameBlock; + /** Returns a snapshot of the syntax tree block node. */ + snapshot: ITreeSnapshotBlock; + /** Syntax tree node reference of the first nested instruction element. */ + innerConnection: ITreeNodeInstruction | null; + /** Number of nodes nested inside this node. */ + innerCount: number; +} diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/core/elementSyntax.spec.ts index 22fdb06..36fde0f 100644 --- a/src/syntax/elements/core/elementSyntax.spec.ts +++ b/src/syntax/elements/core/elementSyntax.spec.ts @@ -21,17 +21,22 @@ describe('class ElementSyntax', () => { test('instantiate class that extends ElementSyntax with 0 arguments and validate API', () => { let dummyElementSyntax: DummyElementSyntax; - dummyElementSyntax = new DummyElementSyntax('dummy', 'dummy', 'Argument', 'Data', {}); + dummyElementSyntax = new DummyElementSyntax( + 'dummy' as TElementName, + 'dummy', + 'Argument', + 'Data', + {} + ); expect(dummyElementSyntax.name).toBe('dummy'); expect(dummyElementSyntax.label).toBe('dummy'); expect(dummyElementSyntax.kind).toBe('Argument'); expect(dummyElementSyntax.type).toBe('Data'); expect(dummyElementSyntax.argCount).toBe(0); expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); dummyElementSyntax = new DummyElementSyntax( - 'dummy', + 'dummy' as TElementName, 'dummy', 'Argument', 'Expression', @@ -43,10 +48,9 @@ describe('class ElementSyntax', () => { expect(dummyElementSyntax.type).toBe('Expression'); expect(dummyElementSyntax.argCount).toBe(0); expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); dummyElementSyntax = new DummyElementSyntax( - 'dummy', + 'dummy' as TElementName, 'dummy', 'Instruction', 'Statement', @@ -58,10 +62,9 @@ describe('class ElementSyntax', () => { expect(dummyElementSyntax.type).toBe('Statement'); expect(dummyElementSyntax.argCount).toBe(0); expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); dummyElementSyntax = new DummyElementSyntax( - 'dummy', + 'dummy' as TElementName, 'dummy', 'Instruction', 'Block', @@ -73,12 +76,11 @@ describe('class ElementSyntax', () => { expect(dummyElementSyntax.type).toBe('Block'); expect(dummyElementSyntax.argCount).toBe(0); expect(dummyElementSyntax.argLabels).toEqual([]); - expect(dummyElementSyntax.argMap).toEqual({}); }); test('instantiate class that extends ElementSyntax with 3 arguments and validate API', () => { const dummyElementSyntax = new DummyElementSyntax( - 'dummy', + 'dummy' as TElementName, 'dummy', 'Instruction', 'Block', @@ -94,16 +96,20 @@ describe('class ElementSyntax', () => { expect(dummyElementSyntax.type).toBe('Block'); expect(dummyElementSyntax.argCount).toBe(3); expect(dummyElementSyntax.argLabels).toEqual(['arg1', 'arg2', 'arg3']); - expect(dummyElementSyntax.argMap).toEqual({ - arg1: ['number'], - arg2: ['string', 'number'], - arg3: ['boolean'], - }); + expect(dummyElementSyntax.getArgType('arg1')).toEqual(['number']); + expect(dummyElementSyntax.getArgType('arg2')).toEqual(['string', 'number']); + expect(dummyElementSyntax.getArgType('arg3')).toEqual(['boolean']); }); }); test('update label and verify', () => { - const dummyElementSyntax = new DummyElementSyntax('dummy', 'dummy', 'Argument', 'Data', {}); + const dummyElementSyntax = new DummyElementSyntax( + 'dummy' as TElementName, + 'dummy', + 'Argument', + 'Data', + {} + ); expect(dummyElementSyntax.label).toBe('dummy'); dummyElementSyntax.updateLabel('dummyElement'); expect(dummyElementSyntax.label).toBe('dummyElement'); diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/core/elementSyntax.ts index 805d415..bf0ca36 100644 --- a/src/syntax/elements/core/elementSyntax.ts +++ b/src/syntax/elements/core/elementSyntax.ts @@ -74,8 +74,8 @@ export abstract class ElementSyntax implements IElementSyntax { return this._argLabels; } - public get argMap(): { [key: string]: TDataName[] } { - return this._argMap; + public getArgType(argName: string): TDataName[] { + return this._argMap[argName]; } public updateLabel(value: string): void { diff --git a/src/syntax/specification/specificationEntries.ts b/src/syntax/specification/specificationEntries.ts index cbc29e6..6471471 100644 --- a/src/syntax/specification/specificationEntries.ts +++ b/src/syntax/specification/specificationEntries.ts @@ -147,12 +147,16 @@ const _elementSpecificationEntries: { type: 'Block', category: 'program', prototype: ElementProcess, + allowAbove: false, + allowBelow: false, }, 'routine': { label: 'action', type: 'Block', category: 'program', prototype: ElementRoutine, + allowAbove: false, + allowBelow: false, }, }; diff --git a/src/syntax/tree/node.ts b/src/syntax/tree/node.ts new file mode 100644 index 0000000..da0a04c --- /dev/null +++ b/src/syntax/tree/node.ts @@ -0,0 +1,218 @@ +import { + ITreeNode, + ITreeNodeArgument, + ITreeNodeBlock, + ITreeNodeData, + ITreeNodeExpression, + ITreeNodeInstruction, + ITreeNodeStatement, + ITreeSnapshotBlock, + ITreeSnapshotData, + ITreeSnapshotExpression, + ITreeSnapshotStatement, +} from '@/@types/syntaxTree'; +import { + TElementName, + TElementNameBlock, + TElementNameData, + TElementNameExpression, + TElementNameStatement, +} from '@/@types/specification'; + +import { getInstance } from '../warehouse/warehouse'; + +// ------------------------------------------------------------------------------------------------- + +/** + * @virtual + * @class + * Defines a generic syntax tree node. + */ +export abstract class TreeNode implements ITreeNode { + /** Stores the name of the syntax element. */ + protected _elementName: TElementName; + /** Stores the node ID of the syntax tree node instance. */ + protected _nodeID: string; + /** Stores the warehouse ID of the syntax element instance. */ + protected _instanceID: string; + + /** Stores key-value pairs of argument names and corresponding argument nodes. */ + protected _argConnections: { [arg: string]: TreeNodeData | TreeNodeExpression | null } = {}; + + constructor( + /** Name of the syntax element. */ + elementName: TElementName, + /** Node ID of the syntax tree node instance. */ + nodeID: string, + /** Warehouse ID of the syntax element instance. */ + instanceID: string + ) { + this._elementName = elementName; + this._nodeID = nodeID; + this._instanceID = instanceID; + + const instance = getInstance(this._instanceID)!; + instance.instance.argLabels.forEach((label) => (this._argConnections[label] = null)); + } + + public abstract get elementName(): TElementName; + + public get nodeID(): string { + return this._nodeID; + } + + public get instanceID(): string { + return this._instanceID; + } + + /** + * Helper that adds an argument connection. + * @param argName - name of the argument + * @param node - node instance of the connecting node + */ + protected _attachArg(argName: string, node: TreeNodeData | TreeNodeExpression): void { + this._argConnections[argName] = node; + } + + /** + * Helper that removes an argument connection. + * @param argName - name of the argument + */ + protected _detachArg(argName: string): void { + this._argConnections[argName] = null; + } + + /** + * Helper that generates a snapshot of the arguments. + */ + protected _getArgSnapshot(): { + [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null; + } | null { + const instance = getInstance(this._instanceID)!; + + if (instance.instance.argCount === 0) { + return null; + } + this._elementName; + + const snapshot: { + [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null; + } = {}; + + instance.instance.argLabels.forEach( + (label) => + (snapshot[label] = + this._argConnections[label] === null + ? null + : this._argConnections[label]!.snapshot) + ); + + return snapshot; + } +} + +/** + * @virtual + * @class + * Defines a generic syntax tree argument element node. + */ +abstract class TreeNodeArgument extends TreeNode implements ITreeNodeArgument { + public connectedTo: Exclude | null = null; +} + +/** + * @class + * Defines a syntax tree data element node. + */ +export class TreeNodeData extends TreeNodeArgument implements ITreeNodeData { + public get elementName(): TElementNameData { + return this._elementName as TElementNameData; + } + + public get snapshot(): ITreeSnapshotData { + return { + elementName: this._elementName as TElementNameData, + }; + } +} + +/** + * @class + * Defines a syntax tree expression element node. + */ +export class TreeNodeExpression extends TreeNodeArgument implements ITreeNodeExpression { + public get elementName(): TElementNameExpression { + return this._elementName as TElementNameExpression; + } + + public get snapshot(): ITreeSnapshotExpression { + return { + elementName: this._elementName as TElementNameExpression, + argMap: this._getArgSnapshot(), + }; + } + + public attachArg = super._attachArg; + public detachArg = super._detachArg; +} + +/** + * @virtual + * @class + * Defines a generic syntax tree instruction element node. + */ +abstract class TreeNodeInstruction extends TreeNode implements ITreeNodeInstruction { + public attachArg = super._attachArg; + public detachArg = super._detachArg; + + public beforeConnection: TreeNodeStatement | TreeNodeBlock | null = null; + public afterConnection: TreeNodeStatement | TreeNodeBlock | null = null; + public nestLevel: number = 0; + public parentBlock: TreeNodeBlock | null = null; +} + +/** + * @class + * Defines a syntax tree statement element node. + */ +export class TreeNodeStatement extends TreeNodeInstruction implements ITreeNodeStatement { + public get elementName(): TElementNameStatement { + return this._elementName as TElementNameStatement; + } + + public get snapshot(): ITreeSnapshotStatement { + return { + elementName: this._elementName as TElementNameStatement, + argMap: this._getArgSnapshot(), + }; + } +} + +/** + * @class + * Defines a syntax tree block element node. + */ +export class TreeNodeBlock extends TreeNodeInstruction implements ITreeNodeBlock { + public get elementName(): TElementNameBlock { + return this._elementName as TElementNameBlock; + } + + public get snapshot(): ITreeSnapshotBlock { + const scope: (ITreeSnapshotStatement | ITreeSnapshotBlock)[] = []; + + let nextNode: TreeNodeStatement | TreeNodeBlock | null = this.innerConnection; + while (nextNode !== null) { + scope.push(nextNode.snapshot); + nextNode = nextNode.afterConnection; + } + + return { + elementName: this._elementName as TElementNameBlock, + argMap: this._getArgSnapshot(), + scope, + }; + } + + public innerConnection: TreeNodeStatement | TreeNodeBlock | null = null; + public innerCount: number = 0; +} diff --git a/src/syntax/tree/syntaxTree.spec.ts b/src/syntax/tree/syntaxTree.spec.ts new file mode 100644 index 0000000..9748b64 --- /dev/null +++ b/src/syntax/tree/syntaxTree.spec.ts @@ -0,0 +1,373 @@ +import { + addNode, + getNode, + removeNode, + attachArgumentCheck, + attachArgument, + detachArgument, + attachInstructionBelowCheck, + attachInstructionBelow, + detachInstructionBelow, + attachInstructionInsideCheck, + attachInstructionInside, + detachInstructionInside, + generateSnapshot, + generateFromSnapshot, + resetSyntaxTree, +} from './syntaxTree'; +import { getInstance } from '../warehouse/warehouse'; + +import { ElementProcess, ElementRoutine } from '../elements/elementProgram'; +import { ElementValueBoolean } from '../elements/elementValue'; +import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; +import { ElementBoxBoolean } from '../elements/elementBox'; +import { TreeNodeData, TreeNodeStatement, TreeNodeBlock } from './node'; +import { ITreeSnapshot } from '@/@types/syntaxTree'; + +// ------------------------------------------------------------------------------------------------- + +describe('Syntax Tree', () => { + let process: string; + let routine: string; + let data: string; + let expression: string; + let statement: string; + let block: string; + + describe('adding elements', () => { + process = addNode('process'); + test('add process element and verify', () => { + const node = getNode(process)!; + expect(node.elementName).toBe('process'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('process'); + expect(instance.kind).toBe('Instruction'); + expect(instance.type).toBe('Block'); + expect(instance.category).toBe('program'); + expect(instance.instance instanceof ElementProcess).toBe(true); + }); + + routine = addNode('routine'); + test('add routine element and verify', () => { + const node = getNode(routine)!; + expect(node.elementName).toBe('routine'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('routine'); + expect(instance.kind).toBe('Instruction'); + expect(instance.type).toBe('Block'); + expect(instance.category).toBe('program'); + expect(instance.instance instanceof ElementRoutine).toBe(true); + }); + + data = addNode('value-boolean'); + test('add data element and verify', () => { + const node = getNode(data)!; + expect(node.elementName).toBe('value-boolean'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('value-boolean'); + expect(instance.kind).toBe('Argument'); + expect(instance.type).toBe('Data'); + expect(instance.category).toBe('value'); + expect(instance.instance instanceof ElementValueBoolean).toBe(true); + }); + + expression = addNode('operator-math-plus'); + test('add expression element and verify', () => { + const node = getNode(expression)!; + expect(node.elementName).toBe('operator-math-plus'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('operator-math-plus'); + expect(instance.kind).toBe('Argument'); + expect(instance.type).toBe('Expression'); + expect(instance.category).toBe('operator-math'); + expect(instance.instance instanceof ElementOperatorMathPlus).toBe(true); + }); + + statement = addNode('box-boolean'); + test('add statement element and verify', () => { + const node = getNode(statement)!; + expect(node.elementName).toBe('box-boolean'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('box-boolean'); + expect(instance.kind).toBe('Instruction'); + expect(instance.type).toBe('Statement'); + expect(instance.category).toBe('box'); + expect(instance.instance instanceof ElementBoxBoolean).toBe(true); + }); + + block = addNode('routine'); + test('add block element and verify', () => { + const node = getNode(block)!; + expect(node.elementName).toBe('routine'); + const instance = getInstance(node.instanceID)!; + expect(instance.name).toBe('routine'); + expect(instance.kind).toBe('Instruction'); + expect(instance.type).toBe('Block'); + expect(instance.category).toBe('program'); + expect(instance.instance instanceof ElementRoutine).toBe(true); + }); + }); + + describe('removing elements', () => { + test('remove process element and verify', () => { + const instanceID = getNode(process)!.instanceID; + expect(getInstance(instanceID)).not.toBe(null); + removeNode(process); + expect(getNode(process)).toBe(null); + expect(getInstance(instanceID)).toBe(null); + }); + + test('remove routine element and verify', () => { + const instanceID = getNode(routine)!.instanceID; + expect(getInstance(instanceID)).not.toBe(null); + removeNode(routine); + expect(getNode(routine)).toBe(null); + expect(getInstance(instanceID)).toBe(null); + }); + + test('remove element and verify', () => { + const instanceID = getNode(block)!.instanceID; + expect(getInstance(instanceID)).not.toBe(null); + removeNode(block); + expect(getNode(block)).toBe(null); + expect(getInstance(instanceID)).toBe(null); + }); + }); + + const boxBoolean = addNode('box-boolean'); + const valueBoolean = addNode('value-boolean'); + const valueNumber = addNode('value-number'); + + const processX = addNode('process'); + const boxBooleanX = addNode('box-boolean'); + const boxNumberX = addNode('box-number'); + const processNodeX = getNode(processX) as TreeNodeBlock; + const boxBooleanNodeX = getNode(boxBooleanX) as TreeNodeStatement | TreeNodeBlock; + const boxNumberNodeX = getNode(boxNumberX) as TreeNodeStatement | TreeNodeBlock; + + describe('attaching elements', () => { + describe('attaching arguments', () => { + test('verify argument attachment checking', () => { + expect(attachArgumentCheck(boxBoolean, valueNumber, 'value')).toBe(false); + expect(attachArgumentCheck(boxBoolean, valueBoolean, 'value')).toBe(true); + expect(attachArgumentCheck(boxBoolean, valueNumber, 'foo')).toBe(false); + }); + + test('verify argument attachment to instruction', () => { + attachArgument(boxBoolean, valueBoolean, 'value'); + const boxNode = getNode(boxBoolean)!; + const valueNode = getNode(valueBoolean)!; + expect((valueNode as TreeNodeData).connectedTo).toEqual(boxNode); + }); + }); + + describe('instruction attachment', () => { + test('verify attachment below checking', () => { + expect(attachInstructionBelowCheck(processX, boxBooleanX)).toBe(false); + expect(attachInstructionBelowCheck(boxBooleanX, boxNumberX)).toBe(true); + }); + + test('verify attachment below', () => { + attachInstructionBelow(boxBooleanX, boxNumberX); + expect(boxBooleanNodeX.afterConnection).toEqual(boxNumberNodeX); + expect(boxNumberNodeX.beforeConnection).toEqual(boxBooleanNodeX); + }); + + test('verify attachment inside checking', () => { + expect(attachInstructionInsideCheck(processX, boxBooleanX)).toBe(false); + }); + + test('verify attachment inside', () => { + attachInstructionInside(processX, boxBooleanX); + expect(processNodeX.innerConnection!.nodeID).toBe(boxBooleanNodeX.nodeID); + expect(processNodeX.innerCount).toBe(1); + expect(boxBooleanNodeX.parentBlock!.nodeID).toEqual(processNodeX.nodeID); + expect(boxBooleanNodeX.nestLevel).toBe(1); + }); + }); + }); + + describe('detaching elements', () => { + describe('argument detachment', () => { + test('verify argument detachment', () => { + const valueNode = getNode(valueBoolean)!; + detachArgument(boxBoolean, valueBoolean, 'value'); + expect((valueNode as TreeNodeData).connectedTo).toBe(null); + }); + }); + + describe('instruction detachment', () => { + test('verify detachment instruction below', () => { + detachInstructionBelow(boxBooleanX, boxNumberX); + expect(boxBooleanNodeX.afterConnection).toBe(null); + expect(boxNumberNodeX.beforeConnection).toBe(null); + }); + + test('verify detachment instruction inside', () => { + detachInstructionInside(processX, boxBooleanX); + expect(processNodeX.innerConnection).toBe(null); + expect(processNodeX.innerCount).toBe(0); + expect(boxBooleanNodeX.parentBlock).toBe(null); + expect(boxBooleanNodeX.nestLevel).toBe(0); + }); + }); + }); + + describe('snapshot generation', () => { + test('validate snapshot', () => { + const snapshot1 = generateSnapshot(); + expect(snapshot1.process.length).toBe(1); + expect(snapshot1.routine.length).toBe(0); + expect(snapshot1.crumbs.length).toBe(8); + + attachArgument(boxBoolean, valueBoolean, 'value'); + attachInstructionBelow(boxBooleanX, boxNumberX); + attachInstructionInside(processX, boxBooleanX); + const snapshot2 = generateSnapshot(); + expect(snapshot2.process.length).toBe(1); + expect(snapshot2.routine.length).toBe(0); + expect(snapshot2.crumbs.length).toBe(5); + }); + }); + + describe('reset tree', () => { + test('reset syntax tree and verify', () => { + resetSyntaxTree(); + const snapshot = generateSnapshot(); + expect(snapshot.process.length).toBe(0); + expect(snapshot.routine.length).toBe(0); + expect(snapshot.crumbs.length).toBe(0); + }); + }); + + describe('tree generation from snapshot', () => { + test('validate tree generation', () => { + const snapshotInput: ITreeSnapshot = { + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: { + elementName: 'value-number', + }, + }, + }, + }, + }, + ], + }, + ], + routine: [ + { + elementName: 'routine', + argMap: { + name: { + elementName: 'value-string', + }, + }, + scope: [], + }, + ], + crumbs: [ + [{ elementName: 'value-boolean' }], + [ + { + elementName: 'operator-math-plus', + argMap: { + operand1: null, + operand2: { + elementName: 'value-number', + }, + }, + }, + ], + [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: { + elementName: 'value-number', + }, + }, + }, + }, + }, + ], + [ + { + elementName: 'box-boolean', + argMap: { + name: null, + value: null, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: { + elementName: 'value-number', + }, + }, + }, + }, + }, + { + elementName: 'box-boolean', + argMap: { + name: null, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + ], + }; + generateFromSnapshot(snapshotInput); + const snapshotOutput = generateSnapshot(); + expect(snapshotOutput).toEqual(snapshotInput); + }); + }); +}); diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts new file mode 100644 index 0000000..6b38b05 --- /dev/null +++ b/src/syntax/tree/syntaxTree.ts @@ -0,0 +1,646 @@ +import { v4 as uuidv4 } from 'uuid'; + +import { + IElementSpecificationInstruction, + TElementName, + TElementNameBlock, + TElementNameStatement, +} from '@/@types/specification'; + +import { + TreeNode, + TreeNodeData, + TreeNodeExpression, + TreeNodeStatement, + TreeNodeBlock, +} from './node'; +import { addInstance, getInstance, removeInstance } from '../warehouse/warehouse'; +import { queryElementSpecification } from '../specification/specification'; + +import { TData } from '@/@types/data'; +import { ElementArgument } from '../elements/core/elementArgument'; +import { + ITreeSnapshot, + ITreeSnapshotBlock, + ITreeSnapshotData, + ITreeSnapshotExpression, + ITreeSnapshotStatement, +} from '@/@types/syntaxTree'; + +// -- private variables ---------------------------------------------------------------------------- + +/** Stores a table with key-value pairs of node ID and corresponding node instance. */ +const _nodeMap: { [nodeID: string]: TreeNode } = {}; + +/** Stores the syntax tree. */ +let _syntaxTree: { + /** Stores a list of all process element nodes. */ + process: TreeNodeBlock[]; + /** Stores a list of all routine element nodes. */ + routine: TreeNodeBlock[]; + /** Stores a list of all non-process and non-routine element node lists. */ + crumbs: TreeNode[]; +} = { + process: [], + routine: [], + crumbs: [], +}; + +// -- private functions ---------------------------------------------------------------------------- + +/** + * Helper that removes corresponding element instance and removes node table entry. + * @param nodeID - node ID + */ +function _destroyNode(nodeID: string): void { + if (!(nodeID in _nodeMap)) { + return; + } + + const node = _nodeMap[nodeID]; + removeInstance(node.instanceID); + delete _nodeMap[nodeID]; +} + +/** + * Helper that checks whether two instruction element nodes can be connected. + * @param connectorNodeID - node ID of the connector node + * @param connectingNodeID - node ID of the connecting node + * @returns - `true` if node connections are valid, else `false` + */ +function _attachInstructionCheck(connectorNodeID: string, connectingNodeID: string): boolean { + if (!(connectorNodeID in _nodeMap) || !(connectingNodeID in _nodeMap)) { + return false; + } + + const nodeConnector = _nodeMap[connectorNodeID]; + const nodeConnecting = _nodeMap[connectingNodeID]; + + const specificationConnector = queryElementSpecification(nodeConnector.elementName)!; + const specificationConnecting = queryElementSpecification(nodeConnecting.elementName)!; + + if ( + specificationConnector.type === 'Data' || + specificationConnector.type === 'Expression' || + specificationConnecting.type === 'Data' || + specificationConnecting.type === 'Expression' + ) { + return false; + } + + return true; +} + +// -- public functions ----------------------------------------------------------------------------- + +/** + * Adds a new element to the syntax tree. + * @param name - name of the syntax element + * @returns node ID of the syntax tree node + */ +export function addNode(name: TElementName): string { + const instanceID = addInstance(name); + let nodeID: string; + do { + nodeID = uuidv4(); + } while (nodeID in _nodeMap); + + let node: TreeNode; + + const specification = queryElementSpecification(name)!; + switch (specification.type) { + case 'Data': + node = new TreeNodeData(name, nodeID, instanceID); + break; + case 'Expression': + node = new TreeNodeExpression(name, nodeID, instanceID); + break; + case 'Statement': + node = new TreeNodeStatement(name, nodeID, instanceID); + break; + case 'Block': + default: + node = new TreeNodeBlock(name, nodeID, instanceID); + } + + _nodeMap[nodeID] = node; + if (name === 'process') { + _syntaxTree['process'].push(node as TreeNodeBlock); + } else if (name === 'routine') { + _syntaxTree['routine'].push(node as TreeNodeBlock); + } else { + _syntaxTree['crumbs'].push(node); + } + + return nodeID; +} + +/** + * Returns a new entry from the syntax tree. + * @param nodeID - node ID of the syntax tree node + * @returns syntax tree node entry if present, else `null` + */ +export function getNode(nodeID: string): TreeNode | null { + return nodeID in _nodeMap ? _nodeMap[nodeID] : null; +} + +/** + * Removes an element node from the syntax tree. + * @param nodeID - node ID of the syntax tree node + */ +export function removeNode(nodeID: string): void { + if (!(nodeID in _nodeMap)) { + return; + } + + const node = _nodeMap[nodeID]; + + let list: TreeNode[]; + + if (node.elementName === 'process') { + list = _syntaxTree['process']; + } else if (node.elementName === 'routine') { + list = _syntaxTree['routine']; + } else { + list = _syntaxTree['crumbs']; + } + + list.splice(list.indexOf(node), 1); + + _destroyNode(nodeID); +} + +/** + * Resets the syntax tree — removes all nodes and syntax element instances. + */ +export function resetSyntaxTree(): void { + Object.entries(_nodeMap).forEach(([nodeID]) => { + _destroyNode(nodeID); + }); + + _syntaxTree = { + process: [], + routine: [], + crumbs: [], + }; +} + +/** + * Checks whether an argument element node can be connected. + * @param connectorNodeID - node ID of the connector node + * @param connectingNodeID - node ID of the connecting argument element node + * @returns - `true` if node connections are valid, else `false` + */ +export function attachArgumentCheck( + connectorNodeID: string, + connectingNodeID: string, + argName: string +): boolean { + if (!(connectorNodeID in _nodeMap) || !(connectingNodeID in _nodeMap)) { + return false; + } + + const nodeConnector = _nodeMap[connectorNodeID]; + const nodeConnecting = _nodeMap[connectingNodeID]; + + const specificationConnector = queryElementSpecification(nodeConnector.elementName)!; + const specificationConnecting = queryElementSpecification(nodeConnecting.elementName)!; + + if ( + specificationConnector.type === 'Data' || + specificationConnecting.type === 'Statement' || + specificationConnecting.type === 'Block' + ) { + return false; + } + + const instanceConnector = getInstance(nodeConnector.instanceID)!; + const instanceConnecting = getInstance(nodeConnecting.instanceID)!; + + if (!instanceConnector.instance.argLabels.includes(argName)) { + return false; + } + + const typeConnector = instanceConnector.instance.getArgType(argName); + const typeConnecting = (instanceConnecting.instance as ElementArgument).returnType; + + for (const type of typeConnecting) { + if (!typeConnector.includes(type)) { + return false; + } + } + + return true; +} + +/** + * Attaches an argument element node. + * @param connectorNodeID - node ID of the connector node + * @param connectingNodeID - node ID of the connecting argument element node + * @param argName - name of the argument + */ +export function attachArgument( + connectorNodeID: string, + connectingNodeID: string, + argName: string +): void { + const nodeConnector = _nodeMap[connectorNodeID] as + | TreeNodeExpression + | TreeNodeStatement + | TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeData | TreeNodeExpression; + + nodeConnector.attachArg(argName, nodeConnecting); + nodeConnecting.connectedTo = nodeConnector; + + if (_syntaxTree.crumbs.includes(nodeConnecting)) { + _syntaxTree.crumbs.splice(_syntaxTree.crumbs.indexOf(nodeConnecting), 1); + } +} + +/** + * Detaches an argument element node. + * @param connectorNodeID - node ID of the connector node + * @param connectingNodeID - node ID of the connecting argument element node + * @param argName - name of the argument + */ +export function detachArgument( + connectorNodeID: string, + connectingNodeID: string, + argName: string +): void { + const nodeConnector = _nodeMap[connectorNodeID] as + | TreeNodeExpression + | TreeNodeStatement + | TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeData | TreeNodeExpression; + + nodeConnector.detachArg(argName); + nodeConnecting.connectedTo = null; + + _syntaxTree.crumbs.push(nodeConnecting); +} + +/** + * Checks whether an instruction element node can be connected in sequence after another instruction + * element node. + * @param connectorNodeID - node ID of the connector instruction element node + * @param connectingNodeID - node ID of the connecting instruction element node + * @returns - `true` if node connections are valid, else `false` + */ +export function attachInstructionBelowCheck( + connectorNodeID: string, + connectingNodeID: string +): boolean { + if (!_attachInstructionCheck(connectorNodeID, connectingNodeID)) { + return false; + } + + const nodeConnector = _nodeMap[connectorNodeID]; + const nodeConnecting = _nodeMap[connectingNodeID]; + + const specificationConnector = queryElementSpecification( + nodeConnector.elementName + )! as IElementSpecificationInstruction; + const specificationConnecting = queryElementSpecification( + nodeConnecting.elementName + )! as IElementSpecificationInstruction; + + if ( + (specificationConnector.forbidBelow && + specificationConnector.forbidBelow.includes(nodeConnecting.elementName)) || + (specificationConnecting.forbidAbove && + specificationConnecting.forbidAbove.includes(nodeConnector.elementName)) + ) { + return false; + } + + if (specificationConnector.allowBelow !== undefined) { + if (specificationConnector.allowBelow instanceof Array) { + if (!specificationConnector.allowBelow.includes(nodeConnecting.elementName)) { + return false; + } + } else { + if ((specificationConnector.allowBelow as boolean) === false) { + return false; + } + } + } + + if (specificationConnecting.allowAbove !== undefined) { + if (specificationConnecting.allowAbove instanceof Array) { + if (!specificationConnecting.allowAbove.includes(nodeConnector.elementName)) { + return false; + } + } else { + if ((specificationConnector.allowAbove as boolean) === false) { + return false; + } + } + } + + return true; +} + +/** + * Attaches an instruction element node in sequence after another instruction element node. + * @param connectorNodeID - node ID of the connector instruction element node + * @param connectingNodeID - node ID of the connecting instruction element node + */ +export function attachInstructionBelow(connectorNodeID: string, connectingNodeID: string): void { + const nodeConnector = _nodeMap[connectorNodeID] as TreeNodeStatement | TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeStatement | TreeNodeBlock; + + nodeConnector.afterConnection = nodeConnecting; + + nodeConnecting.beforeConnection = nodeConnector; + nodeConnecting.nestLevel = nodeConnector.nestLevel; + nodeConnecting.parentBlock = nodeConnector.parentBlock; + + if (_syntaxTree.crumbs.includes(nodeConnecting)) { + _syntaxTree.crumbs.splice(_syntaxTree.crumbs.indexOf(nodeConnecting), 1); + } +} + +/** + * Detaches an instruction element node from sequence after another instruction element node. + * @param connectorNodeID - node ID of the connector instruction element node + * @param connectingNodeID - node ID of the connecting instruction element node + */ +export function detachInstructionBelow(connectorNodeID: string, connectingNodeID: string): void { + const nodeConnector = _nodeMap[connectorNodeID] as TreeNodeStatement | TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeStatement | TreeNodeBlock; + + nodeConnector.afterConnection = null; + + nodeConnecting.beforeConnection = null; + nodeConnecting.nestLevel = 0; + nodeConnecting.parentBlock = null; + + _syntaxTree.crumbs.push(nodeConnecting); +} + +/** + * Checks whether an instruction element node can be nested inside a block element node. + * @param connectorNodeID - node ID of the connector block element node + * @param connectingNodeID - node ID of the connecting instruction element node + * @returns - `true` if node connections are valid, else `false` + */ +export function attachInstructionInsideCheck( + connectorNodeID: string, + connectingNodeID: string +): boolean { + if (!_attachInstructionCheck(connectorNodeID, connectingNodeID)) { + return false; + } + + const nodeConnector = _nodeMap[connectorNodeID]; + const nodeConnecting = _nodeMap[connectingNodeID]; + + const specificationConnector = queryElementSpecification(nodeConnector.elementName)!; + const specificationConnecting = queryElementSpecification(nodeConnecting.elementName)!; + + if ( + !( + specificationConnector.type === 'Block' && + (specificationConnecting.type === 'Statement' || + specificationConnecting.type === 'Block') + ) + ) { + return false; + } + + if ( + (specificationConnector.forbidNestInside && + specificationConnector.forbidNestInside.includes( + nodeConnecting.elementName as TElementNameStatement | TElementNameBlock + )) || + (specificationConnecting.forbiddenNestInside && + specificationConnecting.forbiddenNestInside.includes( + nodeConnector.elementName as TElementNameBlock + )) + ) { + return false; + } + + if (specificationConnector.allowNestInside !== undefined) { + if (specificationConnector.allowNestInside instanceof Array) { + if ( + !specificationConnector.allowNestInside.includes( + nodeConnecting.elementName as TElementNameStatement | TElementNameBlock + ) + ) { + return false; + } + } else { + if ((specificationConnector.allowNestInside as boolean) === false) { + return false; + } + } + } + + if (specificationConnecting.allowedNestInside !== undefined) { + if (specificationConnecting.allowedNestInside instanceof Array) { + if ( + !specificationConnecting.allowedNestInside.includes( + nodeConnector.elementName as TElementNameBlock + ) + ) { + return false; + } + } else { + if ((specificationConnector.allowedNestInside as boolean) === false) { + return false; + } + } + } + + if ( + !( + specificationConnecting.allowedNestLevel && + specificationConnecting.allowedNestLevel instanceof Array && + specificationConnecting.allowedNestLevel.includes( + (nodeConnector as TreeNodeStatement | TreeNodeBlock).nestLevel + 1 + ) + ) + ) { + return false; + } + + return true; +} + +/** + * Attaches an instruction element node inside a block element node. + * @param connectorNodeID - node ID of the connector block element node + * @param connectingNodeID - node ID of the connecting instruction element node + */ +export function attachInstructionInside(connectorNodeID: string, connectingNodeID: string): void { + const nodeConnector = _nodeMap[connectorNodeID] as TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeStatement | TreeNodeBlock; + + nodeConnector.innerConnection = nodeConnecting; + nodeConnector.innerCount++; + + nodeConnecting.parentBlock = nodeConnector; + nodeConnecting.nestLevel = nodeConnector.nestLevel + 1; + + if (_syntaxTree.crumbs.includes(nodeConnecting)) { + _syntaxTree.crumbs.splice(_syntaxTree.crumbs.indexOf(nodeConnecting), 1); + } +} + +/** + * Attaches an instruction element node from inside a block element node. + * @param connectorNodeID - node ID of the connector block element node + * @param connectingNodeID - node ID of the connecting instruction element node + */ +export function detachInstructionInside(connectorNodeID: string, connectingNodeID: string): void { + const nodeConnector = _nodeMap[connectorNodeID] as TreeNodeBlock; + const nodeConnecting = _nodeMap[connectingNodeID] as TreeNodeStatement | TreeNodeBlock; + + nodeConnector.innerConnection = null; + nodeConnector.innerCount--; + + nodeConnecting.parentBlock = null; + nodeConnecting.nestLevel = 0; + + _syntaxTree.crumbs.push(nodeConnecting); +} + +/** + * Generates a snapshot of the syntax tree. + * @returns syntax tree snapshot + */ +export function generateSnapshot(): ITreeSnapshot { + const snapshot: ITreeSnapshot = { + process: _syntaxTree.process.map((node) => node.snapshot), + routine: _syntaxTree.routine.map((node) => node.snapshot), + crumbs: [], + }; + + _syntaxTree.crumbs.forEach((node) => { + if (node instanceof TreeNodeData || node instanceof TreeNodeExpression) { + snapshot.crumbs.push([node.snapshot]); + } else { + const snapshotList: (ITreeSnapshotStatement | ITreeSnapshotBlock)[] = []; + let nextNode: TreeNodeStatement | TreeNodeBlock | null = node as + | TreeNodeStatement + | TreeNodeBlock; + while (nextNode !== null) { + snapshotList.push(nextNode.snapshot); + nextNode = nextNode.afterConnection; + } + snapshot.crumbs.push(snapshotList); + } + }); + + return snapshot; +} + +/** + * Generates the syntax tree from a snapshot. + * @param snapshot - syntax tree snapshot + */ +export function generateFromSnapshot(snapshot: ITreeSnapshot): void { + resetSyntaxTree(); + + function __generateSnapshotList( + snapshotList: ( + | ITreeSnapshotData + | ITreeSnapshotExpression + | ITreeSnapshotStatement + | ITreeSnapshotBlock + )[] + ): string | null { + if (snapshotList.length === 0) { + return null; + } + + const snapshotNodes = snapshotList.map((snapshot) => { + const specification = queryElementSpecification(snapshot.elementName); + let nodeID: string; + switch (specification!.type) { + case 'Data': + nodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotData); + break; + case 'Expression': + nodeID = __generateFromSnapshotExpression(snapshot as ITreeSnapshotExpression); + break; + case 'Statement': + nodeID = __generateFromSnapshotStatement(snapshot as ITreeSnapshotStatement); + break; + case 'Block': + default: + nodeID = __generateFromSnapshotBlock(snapshot as ITreeSnapshotBlock); + } + return nodeID; + }); + + if (snapshotNodes.length > 1) { + for (let i = 0; i < snapshotNodes.length - 1; i++) { + attachInstructionBelow(snapshotNodes[i], snapshotNodes[i + 1]); + } + } + + return snapshotNodes[0]; + } + + function __generateFromSnapshotArg( + nodeID: string, + snapshot: { + [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null; + } | null + ): void { + if (snapshot === null) { + return; + } + + Object.entries(snapshot).forEach(([argName, snapshot]) => { + if (snapshot === null) { + return; + } + + let argNodeID: string; + const specification = queryElementSpecification(snapshot.elementName)!; + if (specification.type === 'Data') { + argNodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotData); + } else { + argNodeID = __generateFromSnapshotExpression(snapshot as ITreeSnapshotExpression); + } + + attachArgument(nodeID, argNodeID, argName); + }); + } + + function __generateFromSnapshotData(snapshot: ITreeSnapshotData): string { + const nodeID = addNode(snapshot.elementName); + return nodeID; + } + + function __generateFromSnapshotExpression(snapshot: ITreeSnapshotExpression): string { + const nodeID = addNode(snapshot.elementName); + __generateFromSnapshotArg(nodeID, snapshot.argMap); + return nodeID; + } + + function __generateFromSnapshotStatement(snapshot: ITreeSnapshotStatement): string { + const nodeID = addNode(snapshot.elementName); + __generateFromSnapshotArg(nodeID, snapshot.argMap); + return nodeID; + } + + function __generateFromSnapshotBlock(snapshot: ITreeSnapshotBlock): string { + const nodeID = addNode(snapshot.elementName); + __generateFromSnapshotArg(nodeID, snapshot.argMap); + const innerNodeID = __generateSnapshotList(snapshot.scope); + if (innerNodeID !== null) { + attachInstructionInside(nodeID, innerNodeID); + } + return nodeID; + } + + snapshot.process.forEach((snapshot) => __generateFromSnapshotBlock(snapshot)); + snapshot.routine.forEach((snapshot) => __generateFromSnapshotBlock(snapshot)); + snapshot.crumbs.forEach((snapshotList) => __generateSnapshotList(snapshotList)); +} From 57bfbcb180d257a46e205b7eae8d66121fa0e039 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 02:01:53 +0530 Subject: [PATCH 128/176] specification: [refactor] Add 'dummy' to TElementName Handy for tests --- src/@types/specification.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index d08047f..e157483 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -45,6 +45,7 @@ export type TElementNameBlock = 'process' | 'routine'; /** Names of factory list of syntax elements. */ export type TElementName = + | 'dummy' | TElementNameData | TElementNameExpression | TElementNameStatement From 5f44b3962d44bdd6648b6389741b1e0a5df50693 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 02:16:20 +0530 Subject: [PATCH 129/176] docs: Update README abstract --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7562fd1..aadc13c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ -# Core (engine) of musicblocks-v4 +# Programming framework of musicblocks-v4 -The core of the new [Music Blocks (v4)](https://github.com/sugarlabs/musicblocks-v4) application. +This repository contains the source code for the programming framework of the new +[Music Blocks (v4)](https://github.com/sugarlabs/musicblocks-v4) application. ## Tech Stack From 0a09e068ac1a89e85d789d7523caf82dd552e596 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 02:40:00 +0530 Subject: [PATCH 130/176] syntax tree: [feat] Add getter functions for node lists --- src/syntax/tree/syntaxTree.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts index 6b38b05..3c669f9 100644 --- a/src/syntax/tree/syntaxTree.ts +++ b/src/syntax/tree/syntaxTree.ts @@ -93,6 +93,27 @@ function _attachInstructionCheck(connectorNodeID: string, connectingNodeID: stri // -- public functions ----------------------------------------------------------------------------- +/** + * @returns the list of process element nodes. + */ +export function getProcessNodes(): TreeNodeBlock[] { + return _syntaxTree['process']; +} + +/** + * @returns the list of routine element nodes. + */ +export function getRoutineNodes(): TreeNodeBlock[] { + return _syntaxTree['routine']; +} + +/** + * @returns the list of top instruction element nodes of crumb stacks. + */ +export function getCrumbs(): TreeNode[] { + return _syntaxTree['crumbs']; +} + /** * Adds a new element to the syntax tree. * @param name - name of the syntax element From 4f536235f8960c05f4ba3dde9d316b6d99eb41ca Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 03:06:22 +0530 Subject: [PATCH 131/176] syntax tree: [node] Export argument connections --- src/@types/syntaxTree.d.ts | 4 ++++ src/syntax/tree/node.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/@types/syntaxTree.d.ts b/src/@types/syntaxTree.d.ts index 5be30e0..e49699c 100644 --- a/src/@types/syntaxTree.d.ts +++ b/src/@types/syntaxTree.d.ts @@ -87,6 +87,8 @@ export interface ITreeNodeExpression extends ITreeNodeArgument { elementName: TElementNameExpression; /** Returns a snapshot of the syntax tree expression node. */ snapshot: ITreeSnapshotExpression; + /** Object with key-value pairs of argument names and corresponding argument nodes. */ + argConnections: { [arg: string]: TreeNodeData | TreeNodeExpression | null } = {}; /** * Adds an argument connection. * @param argName - name of the argument @@ -102,6 +104,8 @@ export interface ITreeNodeExpression extends ITreeNodeArgument { /** Type definition for a generic syntax tree instruction node. */ export interface ITreeNodeInstruction extends ITreeNode { + /** Object with key-value pairs of argument names and corresponding argument nodes. */ + argConnections: { [arg: string]: TreeNodeData | TreeNodeExpression | null } = {}; /** * Adds an argument connection. * @param argName - name of the argument diff --git a/src/syntax/tree/node.ts b/src/syntax/tree/node.ts index da0a04c..0a3441d 100644 --- a/src/syntax/tree/node.ts +++ b/src/syntax/tree/node.ts @@ -152,6 +152,8 @@ export class TreeNodeExpression extends TreeNodeArgument implements ITreeNodeExp }; } + public argConnections = this._argConnections; + public attachArg = super._attachArg; public detachArg = super._detachArg; } @@ -162,6 +164,7 @@ export class TreeNodeExpression extends TreeNodeArgument implements ITreeNodeExp * Defines a generic syntax tree instruction element node. */ abstract class TreeNodeInstruction extends TreeNode implements ITreeNodeInstruction { + public argConnections = this._argConnections; public attachArg = super._attachArg; public detachArg = super._detachArg; From 321ff2570d1c3672b2b6d5a17b3c971b885add30 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 15 Nov 2021 04:12:32 +0530 Subject: [PATCH 132/176] parser: [feat] Add argument sequence functions --- src/execution/parser.spec.ts | 118 +++++++++++++++++++++++++++++++++++ src/execution/parser.ts | 91 +++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 src/execution/parser.spec.ts create mode 100644 src/execution/parser.ts diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts new file mode 100644 index 0000000..3059bcb --- /dev/null +++ b/src/execution/parser.spec.ts @@ -0,0 +1,118 @@ +import { validateArgumentSequence, generateArgumentSequence } from './parser'; + +import { generateFromSnapshot, getCrumbs } from '@/syntax/tree/syntaxTree'; +import { TreeNodeStatement } from '@/syntax/tree/node'; + +// ------------------------------------------------------------------------------------------------- + +describe('Parser', () => { + describe('argument parsing', () => { + test('validate invalid argument sequence and verify', () => { + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: null, + }, + }, + }, + }, + ], + ], + }); + + const result = validateArgumentSequence(getCrumbs()[0] as TreeNodeStatement); + expect(result).not.toBe(null); + expect(result!.instruction.elementName).toBe('operator-math-plus'); + expect(result!.argName).toBe('operand2'); + }); + + test('validate valid argument sequence and verify', () => { + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + ], + }); + + const result = validateArgumentSequence(getCrumbs()[0] as TreeNodeStatement); + expect(result).toBe(null); + }); + + test('generate argument sequence', () => { + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'operator-math-minus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: { + elementName: 'boxidentifier-number', + }, + }, + }, + operand2: { + elementName: 'value-number', + }, + }, + }, + }, + }, + ], + ], + }); + + const result = validateArgumentSequence(getCrumbs()[0] as TreeNodeStatement); + expect(result).toBe(null); + const sequence = generateArgumentSequence(getCrumbs()[0] as TreeNodeStatement); + expect(sequence.map((item) => item.name)).toEqual([ + 'value-string', + 'value-number', + 'boxidentifier-number', + 'operator-math-minus', + 'value-number', + 'operator-math-plus', + ]); + }); + }); +}); diff --git a/src/execution/parser.ts b/src/execution/parser.ts new file mode 100644 index 0000000..906aa4a --- /dev/null +++ b/src/execution/parser.ts @@ -0,0 +1,91 @@ +import { + TreeNodeData, + TreeNodeExpression, + TreeNodeStatement, + TreeNodeBlock, +} from '@/syntax/tree/node'; + +import { getInstance } from '@/syntax/warehouse/warehouse'; + +import { TData } from '@/@types/data'; +import { ElementData, ElementExpression } from '@/syntax/elements/core/elementArgument'; + +// -- private functions ---------------------------------------------------------------------------- + +// -- public functions ----------------------------------------------------------------------------- + +/** + * Recursively validates the argument sequence for a syntax tree instruction node. Checks if there are + * `null` argument connections. + * @param instructionNode - syntax tree instruction node + * @returns `null` if valid, else an object of the invalid syntax tree non-data node and arg name. + */ +export function validateArgumentSequence( + instructionNode: TreeNodeStatement | TreeNodeBlock +): { instruction: TreeNodeExpression | TreeNodeStatement | TreeNodeBlock; argName: string } | null { + if (Object.keys(instructionNode.argConnections).length === 0) { + return null; + } + + function __validateArgumentSequence( + node: TreeNodeExpression | TreeNodeStatement | TreeNodeBlock + ): { + instruction: TreeNodeExpression | TreeNodeStatement | TreeNodeBlock; + argName: string; + } | null { + for (const [argName, argNode] of Object.entries(node.argConnections)) { + if (argNode === null) { + return { + instruction: node, + argName, + }; + } else { + if (argNode instanceof TreeNodeExpression) { + const result = __validateArgumentSequence(argNode); + if (result !== null) { + return result; + } + } + } + } + return null; + } + + return __validateArgumentSequence(instructionNode); +} + +/** + * Recursively generates the argument sequence for a syntax tree instruction node. + * @description + * Expects that argument sequence is valid — no `null` argument connections. + * @param instructionNode - syntax tree instruction node + * @returns a list of argument element instances + */ +export function generateArgumentSequence( + instructionNode: TreeNodeStatement | TreeNodeBlock +): (ElementData | ElementExpression)[] { + if (Object.keys(instructionNode.argConnections).length === 0) { + return []; + } + + function __generateArgumentSequence( + node: TreeNodeExpression | TreeNodeStatement | TreeNodeBlock + ): (ElementData | ElementExpression)[] { + let sequence: (ElementData | ElementExpression)[] = []; + + Object.entries(node.argConnections!).forEach(([_, argNode]) => { + if (argNode instanceof TreeNodeExpression) { + sequence = [...sequence, ...__generateArgumentSequence(argNode!)]; + } + sequence.push( + getInstance(argNode!.instanceID)!.instance as + | ElementData + | ElementExpression + ); + }); + + return sequence; + } + + return __generateArgumentSequence(instructionNode); +} From ab8620dc89ce73b63ad9929aef392fe3f1fce05b Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 07:27:27 +0530 Subject: [PATCH 133/176] parser: [feat] Add function to fetch next element in sequence --- src/@types/execution.d.ts | 17 ++ src/execution/parser.spec.ts | 405 ++++++++++++++++++++++++++++++++++- src/execution/parser.ts | 352 ++++++++++++++++++++++++++++++ 3 files changed, 771 insertions(+), 3 deletions(-) diff --git a/src/@types/execution.d.ts b/src/@types/execution.d.ts index 7ab6f1e..7f44fda 100644 --- a/src/@types/execution.d.ts +++ b/src/@types/execution.d.ts @@ -3,3 +3,20 @@ export type IVariable = { dataType: TDataName; value: TData; }; + +/** Type definition of the parsed argument element entry returned on fetching next element. */ +type IParsedElementArgument = { + instance: ElementData | ElementExpression; + type: 'Argument'; + marker: string | null; +}; + +/** Type definition of the parsed instruction element entry returned on fetching next element. */ +type IParsedElementInstruction = { + instance: ElementStatement | ElementBlock; + type: 'Instruction'; + marker: string | null; +}; + +/** Type definition of the parsed element entry returned on fetching next element. */ +type IParsedElement = IParsedElementArgument | IParsedElementInstruction; diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 3059bcb..fef38c3 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -1,12 +1,27 @@ -import { validateArgumentSequence, generateArgumentSequence } from './parser'; +import { + validateArgumentSequence, + generateArgumentSequence, + setExecutionItem, + getExecutionItem, + getNextElement, +} from './parser'; -import { generateFromSnapshot, getCrumbs } from '@/syntax/tree/syntaxTree'; +import { IParsedElementArgument, IParsedElementInstruction } from '@/@types/execution'; + +import { + generateFromSnapshot, + getCrumbs, + addNode, + getProcessNodes, + resetSyntaxTree, + getRoutineNodes, +} from '@/syntax/tree/syntaxTree'; import { TreeNodeStatement } from '@/syntax/tree/node'; // ------------------------------------------------------------------------------------------------- describe('Parser', () => { - describe('argument parsing', () => { + describe('static argument parsing', () => { test('validate invalid argument sequence and verify', () => { generateFromSnapshot({ process: [], @@ -115,4 +130,388 @@ describe('Parser', () => { ]); }); }); + + describe('dynamic syntax tree parsing', () => { + describe('execution item', () => { + test('set execution item to a process node and verify', () => { + resetSyntaxTree(); + const processNodeID = addNode('process'); + setExecutionItem(processNodeID); + expect(getExecutionItem()).toBe(processNodeID); + }); + + test('set execution item to a routine node and verify', () => { + resetSyntaxTree(); + const routineNodeID = addNode('routine'); + setExecutionItem(routineNodeID); + expect(getExecutionItem()).toBe(routineNodeID); + }); + + test('set execution item to a crumb data element node and verify', () => { + resetSyntaxTree(); + const nodeID = addNode('value-boolean'); + setExecutionItem(nodeID); + expect(getExecutionItem()).toBe(nodeID); + }); + + test('set execution item to a crumb expression element node and verify', () => { + resetSyntaxTree(); + const nodeID = addNode('operator-math-plus'); + setExecutionItem(nodeID); + expect(getExecutionItem()).toBe(nodeID); + }); + + test('set execution item to a crumb statement element node and verify', () => { + resetSyntaxTree(); + const nodeID = addNode('box-boolean'); + setExecutionItem(nodeID); + expect(getExecutionItem()).toBe(nodeID); + }); + + test('set execution item to an invalid node and verify', () => { + addNode('boxidentifier-boolean'); + setExecutionItem('123456'); + expect(getExecutionItem()).toBe(null); + }); + }); + + describe('parsing sequence', () => { + test('validate parsing from a crumb data element', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'value-boolean', + }, + ], + ], + }); + const node = getCrumbs()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect(next!.instance.name).toBe('value-boolean'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('validate parsing from a crumb operator element', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-number', + }, + operand2: { + elementName: 'value-string', + }, + }, + }, + ], + ], + }); + const node = getCrumbs()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-number'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('operand1'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('operand2'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('operator-math-plus'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe(null); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('validate parsing from a crumb statement element', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + ], + }); + const node = getCrumbs()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('name'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-boolean'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('value'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('name'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-boolean'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('value'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('validate parsing a process element', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + const node = getProcessNodes()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('name'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-boolean'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('value'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + expect((next as IParsedElementInstruction).marker).toBe('rollback__this__'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('validate parsing a routine element', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [ + { + elementName: 'routine', + argMap: { + name: { + elementName: 'value-string', + }, + }, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + }, + ], + crumbs: [], + }); + const node = getRoutineNodes()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('name'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('routine'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-string'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('name'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementArgument).instance.name).toBe('value-boolean'); + expect((next as IParsedElementArgument).type).toBe('Argument'); + expect((next as IParsedElementArgument).marker).toBe('value'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('routine'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('validate deep element tree for a block', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [ + { + elementName: 'routine', + argMap: { + name: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'value-string', + }, + operand2: { + elementName: 'value-string', + }, + }, + }, + }, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + }, + ], + }, + ], + crumbs: [], + }); + const node = getRoutineNodes()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + + const results: [string, string | null][] = []; + /* eslint-disable-next-line */ + while (true) { + const next = getNextElement(); + + if (next === null) { + break; + } + + results.push([next.instance.name, next.marker]); + } + expect(results).toEqual([ + ['value-string', 'operand1'], + ['value-string', 'operand2'], + ['operator-math-plus', 'name'], + ['routine', null], + ['value-string', 'name'], + ['value-boolean', 'value'], + ['box-boolean', null], + ['process', null], + ['value-string', 'name'], + ['value-boolean', 'value'], + ['box-boolean', null], + ['process', 'rollback__this__'], + ['routine', 'rollback__this__'], + ]); + }); + }); + }); }); diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 906aa4a..d455842 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -1,17 +1,111 @@ +import { IParsedElement } from '@/@types/execution'; + import { + TreeNode, TreeNodeData, TreeNodeExpression, TreeNodeStatement, TreeNodeBlock, } from '@/syntax/tree/node'; +import { getProcessNodes, getRoutineNodes, getCrumbs } from '@/syntax/tree/syntaxTree'; + import { getInstance } from '@/syntax/warehouse/warehouse'; import { TData } from '@/@types/data'; import { ElementData, ElementExpression } from '@/syntax/elements/core/elementArgument'; +import { ElementBlock, ElementStatement } from '@/syntax/elements/core/elementInstruction'; + +// -- private variables ---------------------------------------------------------------------------- + +/** Stores the list of process element nodes. */ +let _processNodes: TreeNodeBlock[] = []; +/** Stores the list of routine element nodes. */ +let _routineNodes: TreeNodeBlock[] = []; +/** Stores the list of crumb stack top element nodes. */ +let _crumbNodes: TreeNode[] = []; + +/** Type definition for an execution call stack frame. */ +interface IFrame { + node: TreeNode; + pages: { node: TreeNode; marker: string }[] | null; +} + +/** Maintains the parsing state. */ +let _programMap: { + process: { + [nodeID: string]: { + node: TreeNodeStatement | TreeNodeBlock; + frames: IFrame[]; + pc: TreeNode | null; + }; + }; + routine: { + [nodeID: string]: { + node: TreeNodeStatement | TreeNodeBlock; + frames: IFrame[]; + pc: TreeNode | null; + }; + }; + crumbs: { + [nodeID: string]: { + node: TreeNode; + frames: IFrame[]; + pc: TreeNode | null; + }; + }; +} = { + process: {}, + routine: {}, + crumbs: {}, +}; + +/** Stores a reference to the starting node of parsing. */ +let _executionItem: { node: TreeNode; bucket: 'process' | 'routine' | 'crumbs' } | null = null; // -- private functions ---------------------------------------------------------------------------- +/** + * Helper that resets the parser. + */ +function _reset(): void { + _processNodes = getProcessNodes(); + _routineNodes = getRoutineNodes(); + _crumbNodes = getCrumbs(); + + _programMap = { + process: {}, + routine: {}, + crumbs: {}, + }; + + for (const processNode of _processNodes) { + _programMap['process'][processNode.nodeID] = { + node: processNode, + frames: [], + pc: null, + }; + } + + for (const routineNode of _routineNodes) { + _programMap['routine'][routineNode.nodeID] = { + node: routineNode, + frames: [], + pc: null, + }; + } + + for (const crumbNode of _crumbNodes) { + _programMap['crumbs'][crumbNode.nodeID] = { + node: crumbNode, + frames: [], + pc: null, + }; + } + + _executionItem = null; +} + // -- public functions ----------------------------------------------------------------------------- /** @@ -89,3 +183,261 @@ export function generateArgumentSequence( return __generateArgumentSequence(instructionNode); } + +/** + * Sets the starting node of parsing. + * @param nodeID - syntax tree node ID of the starting node. + */ +export function setExecutionItem(nodeID: string): void { + _reset(); + + let executionItemEntry: + | { + node: TreeNode; + frames: IFrame[]; + pc: TreeNode | null; + } + | undefined = undefined; + + for (const processNode of _processNodes) { + if (processNode.nodeID === nodeID) { + _executionItem = { node: processNode, bucket: 'process' }; + executionItemEntry = _programMap['process'][_executionItem.node.nodeID]; + break; + } + } + + for (const routineNode of _routineNodes) { + if (routineNode.nodeID === nodeID) { + _executionItem = { node: routineNode, bucket: 'routine' }; + executionItemEntry = _programMap['routine'][_executionItem.node.nodeID]; + break; + } + } + + for (const crumbNode of _crumbNodes) { + if (crumbNode.nodeID === nodeID) { + _executionItem = { node: crumbNode, bucket: 'crumbs' }; + executionItemEntry = _programMap['crumbs'][_executionItem.node.nodeID]; + break; + } + } + + if (executionItemEntry !== undefined) { + executionItemEntry.pc = _executionItem!.node; + executionItemEntry.frames.push({ + node: _executionItem!.node, + pages: null, + }); + } +} + +/** + * Returns the starting syntax tree node ID of the starting node of parsing. + * @returns - syntax tree node ID if present, else `null` + */ +export function getExecutionItem(): string | null { + return _executionItem ? _executionItem.node.nodeID : null; +} + +/** + * Returns the next node in execution sequence. + * @returns - element entry if present, else `null` + */ +export function getNextElement(): IParsedElement | null { + if (_executionItem === null) { + /* + * Nothing to execute + */ + return null; + } + + const executionItemEntry = _programMap[_executionItem.bucket][_executionItem.node.nodeID]; + + const nextNode = executionItemEntry.pc; + const frames = executionItemEntry.frames; + + if (nextNode === null) { + if (frames.length === 0) { + /* + * Successful end of execution + */ + + _reset(); + return null; + } else { + /* + * ERROR: Missing argument + */ + + return null; + } + } + + const instance = getInstance(nextNode.instanceID)!.instance; + + function __handlePages(): { element: IParsedElement } | { marker: string | null } { + const frame = frames[frames.length - 1]; + + if (frame.pages === null) { + frame.pages = []; + + Object.entries( + (nextNode as TreeNodeExpression | TreeNodeStatement | TreeNodeBlock).argConnections + ).forEach(([argName, argNode]) => + frame.pages!.push({ + node: argNode!, + marker: argName, + }) + ); + + frame.pages = frame.pages.reverse(); + } + + if (frame.pages.length !== 0) { + if (frame.pages[0].marker === 'rollback__this__') { + frames.pop(); + + return { marker: 'rollback__this__' }; + } + + const upcomingNode = frame.pages[frame.pages.length - 1].node; + + frames.push({ + node: upcomingNode, + pages: null, + }); + + executionItemEntry.pc = upcomingNode; + + return { element: getNextElement()! }; + } else { + if (nextNode instanceof TreeNodeBlock) { + frame.pages = [ + { + node: nextNode as TreeNode, + marker: 'rollback__this__', + }, + ]; + + frames.push({ + node: nextNode.innerConnection as TreeNode, + pages: null, + }); + + executionItemEntry.pc = nextNode.innerConnection; + + return { + element: { + type: 'Instruction', + instance: instance as ElementBlock, + marker: null, + }, + }; + } + + frames.pop(); + + let marker: string | null = null; + + if (nextNode instanceof TreeNodeExpression && frames.length !== 0) { + const topFramePages = frames[frames.length - 1].pages!; + marker = topFramePages[topFramePages.length - 1].marker; + frames[frames.length - 1].pages!.pop(); + } + + return { marker }; + } + } + + if (nextNode instanceof TreeNodeData) { + frames.pop(); + + let marker: string | null = null; + + if (frames.length !== 0) { + const topFramePages = frames[frames.length - 1].pages!; + marker = topFramePages[topFramePages.length - 1].marker; + frames[frames.length - 1].pages!.pop(); + } + + const element: IParsedElement = { + type: 'Argument', + instance: instance as ElementData, + marker, + }; + + executionItemEntry.pc = nextNode.connectedTo; + + return element; + } else if (nextNode instanceof TreeNodeExpression) { + const result = __handlePages(); + if ('element' in result) { + return result.element; + } + + const element: IParsedElement = { + type: 'Argument', + instance: instance as ElementExpression, + marker: result.marker, + }; + + executionItemEntry.pc = nextNode.connectedTo; + + return element; + } else if (nextNode instanceof TreeNodeStatement) { + const result = __handlePages(); + if ('element' in result) { + return result.element; + } + + if (nextNode.afterConnection === null) { + if (frames.length !== 0) { + executionItemEntry.pc = frames[frames.length - 1].node; + } else { + executionItemEntry.pc = nextNode.afterConnection; + } + } else { + frames.push({ + node: nextNode.afterConnection as TreeNodeStatement | TreeNodeBlock, + pages: null, + }); + executionItemEntry.pc = nextNode.afterConnection; + } + + return { + type: 'Instruction', + instance: instance as ElementStatement, + marker: null, + }; + } /* nextNode instanceOf TreeNodeBlock */ else { + const result = __handlePages(); + if ('element' in result) { + return result.element; + } + + if ((nextNode as TreeNodeBlock).afterConnection === null) { + if (frames.length !== 0) { + executionItemEntry.pc = frames[frames.length - 1].node; + } else { + executionItemEntry.pc = (nextNode as TreeNodeBlock).afterConnection; + } + } else { + frames.push({ + node: (nextNode as TreeNodeBlock).afterConnection as + | TreeNodeStatement + | TreeNodeBlock, + pages: null, + }); + executionItemEntry.pc = (nextNode as TreeNodeBlock).afterConnection; + } + + return { + type: 'Instruction', + instance: instance as ElementBlock, + marker: result.marker, + }; + } +} + +_reset(); From ee19db8fc3f24c4a84ba10e6edbe178db638bcf1 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 12:31:11 +0530 Subject: [PATCH 134/176] parser: [feat] Add program counter override signals --- src/execution/parser.spec.ts | 496 ++++++++++++++++++++++++++++++++++- src/execution/parser.ts | 277 ++++++++++++------- 2 files changed, 673 insertions(+), 100 deletions(-) diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index fef38c3..659b9c0 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -4,6 +4,8 @@ import { setExecutionItem, getExecutionItem, getNextElement, + setPCOverride, + clearPCOverride, } from './parser'; import { IParsedElementArgument, IParsedElementInstruction } from '@/@types/execution'; @@ -309,6 +311,36 @@ describe('Parser', () => { expect(next).toBe(null); }); + test('validate parsing an empty block', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [], + }, + ], + routine: [], + crumbs: [], + }); + const node = getProcessNodes()[0].nodeID; + setExecutionItem(node); + expect(getExecutionItem()).toBe(node); + let next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + expect((next as IParsedElementInstruction).marker).toBe(null); + next = getNextElement(); + expect(next).not.toBe(null); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).type).toBe('Instruction'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect(next).toBe(null); + }); + test('validate parsing a process element', () => { resetSyntaxTree(); generateFromSnapshot({ @@ -359,7 +391,7 @@ describe('Parser', () => { expect(next).not.toBe(null); expect((next as IParsedElementInstruction).instance.name).toBe('process'); expect((next as IParsedElementInstruction).type).toBe('Instruction'); - expect((next as IParsedElementInstruction).marker).toBe('rollback__this__'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); next = getNextElement(); expect(next).toBe(null); }); @@ -508,10 +540,468 @@ describe('Parser', () => { ['value-string', 'name'], ['value-boolean', 'value'], ['box-boolean', null], - ['process', 'rollback__this__'], - ['routine', 'rollback__this__'], + ['process', '__rollback__'], + ['routine', '__rollback__'], ]); }); + + describe('program counter override', () => { + test('verify __skip__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-string', + argMap: { + name: { + elementName: 'boxidentifier-string', + }, + value: { + elementName: 'value-string', + }, + }, + }, + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + ], + }); + + const node = getCrumbs()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + setPCOverride('__skip__'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe( + 'boxidentifier-string' + ); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-string'); + setPCOverride('__skip__'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('verify __goup__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-string', + argMap: { + name: { + elementName: 'boxidentifier-string', + }, + value: { + elementName: 'value-string', + }, + }, + }, + ], + ], + }); + + const node = getCrumbs()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-number'); + setPCOverride('__goup__'); + next = getNextElement(); + expect((next as IParsedElementArgument).instance.name).toBe( + 'boxidentifier-boolean' + ); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + setPCOverride('__goup__'); + next = getNextElement(); + expect(next).toBe(null); + }); + + test('verify __repeat__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + ], + }); + + const node = getCrumbs()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + setPCOverride('__repeat__'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + next = getNextElement(); + expect((next as IParsedElementArgument).instance.name).toBe( + 'boxidentifier-number' + ); + }); + + test('verify __skipscope__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [], + routine: [], + crumbs: [ + [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + }, + { + elementName: 'box-string', + argMap: { + name: { + elementName: 'boxidentifier-string', + }, + value: { + elementName: 'value-string', + }, + }, + }, + ], + ], + }); + + const node = getCrumbs()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + expect((next as IParsedElementInstruction).marker).toBe(null); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe(null); + setPCOverride('__skipscope__'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect((next as IParsedElementArgument).instance.name).toBe( + 'boxidentifier-string' + ); + }); + + test('verify __goinnerlast__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-string', + argMap: { + name: { + elementName: 'boxidentifier-string', + }, + value: { + elementName: 'value-string', + }, + }, + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + setPCOverride('__goinnerlast__'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-string'); + }); + + test('verify __rollback__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + setPCOverride('__rollback__'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + }); + + test('verify __rollback__i signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'routine', + argMap: { + name: { + elementName: 'value-string', + }, + }, + scope: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: + 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + }, + ], + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + setPCOverride('__rollback__i'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('routine'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect(next).toBe(null); + clearPCOverride(); + }); + }); }); }); }); diff --git a/src/execution/parser.ts b/src/execution/parser.ts index d455842..12b2ed3 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -27,32 +27,55 @@ let _crumbNodes: TreeNode[] = []; /** Type definition for an execution call stack frame. */ interface IFrame { + /** Syntax tree node instance. */ node: TreeNode; - pages: { node: TreeNode; marker: string }[] | null; + /** List of one level down syntax tree nodes to parse. */ + pages: + | { + /** Syntax tree node instance. */ + node: TreeNode; + /** An identifier attached to it (usually argument name for argument nodes). */ + marker: string; + }[] + | null; } -/** Maintains the parsing state. */ +/* Type definition for program counter override signals. */ +type TPCOverride = + | '__rollback__' + | '__rollback__i' + | '__skip__' + | '__skipscope__' + | '__goinnerlast__' + | '__goup__' + | '__repeat__' + | null; + +/** Type definition for each root element's parsing state table. */ +type TProgramMapEntry = { + /** Execution call frame stack. */ + frames: IFrame[]; + /** Program counter. */ + pc: TreeNode | null; + /** Handler to update program counter. */ + pcHandler: (() => void) | null; + /** Signal to override program counter's normal sequence. */ + pcOverride: TPCOverride; +}; + +/** Maintains the parsing state tables. */ let _programMap: { + /** Parsing state table for process elements. */ process: { - [nodeID: string]: { - node: TreeNodeStatement | TreeNodeBlock; - frames: IFrame[]; - pc: TreeNode | null; - }; + [nodeID: string]: TProgramMapEntry; }; + /** Parsing state table for routine elements. */ routine: { - [nodeID: string]: { - node: TreeNodeStatement | TreeNodeBlock; - frames: IFrame[]; - pc: TreeNode | null; - }; + [nodeID: string]: TProgramMapEntry; }; + /** Parsing state table for crumb (hanging) element stacks. */ crumbs: { - [nodeID: string]: { - node: TreeNode; - frames: IFrame[]; - pc: TreeNode | null; - }; + [nodeID: string]: TProgramMapEntry; }; } = { process: {}, @@ -81,25 +104,28 @@ function _reset(): void { for (const processNode of _processNodes) { _programMap['process'][processNode.nodeID] = { - node: processNode, frames: [], pc: null, + pcHandler: null, + pcOverride: null, }; } for (const routineNode of _routineNodes) { _programMap['routine'][routineNode.nodeID] = { - node: routineNode, frames: [], pc: null, + pcHandler: null, + pcOverride: null, }; } for (const crumbNode of _crumbNodes) { _programMap['crumbs'][crumbNode.nodeID] = { - node: crumbNode, frames: [], pc: null, + pcHandler: null, + pcOverride: null, }; } @@ -191,18 +217,12 @@ export function generateArgumentSequence( export function setExecutionItem(nodeID: string): void { _reset(); - let executionItemEntry: - | { - node: TreeNode; - frames: IFrame[]; - pc: TreeNode | null; - } - | undefined = undefined; + let executionItemEntry: TProgramMapEntry | undefined = undefined; for (const processNode of _processNodes) { if (processNode.nodeID === nodeID) { _executionItem = { node: processNode, bucket: 'process' }; - executionItemEntry = _programMap['process'][_executionItem.node.nodeID]; + executionItemEntry = _programMap['process'][nodeID]; break; } } @@ -210,7 +230,7 @@ export function setExecutionItem(nodeID: string): void { for (const routineNode of _routineNodes) { if (routineNode.nodeID === nodeID) { _executionItem = { node: routineNode, bucket: 'routine' }; - executionItemEntry = _programMap['routine'][_executionItem.node.nodeID]; + executionItemEntry = _programMap['routine'][nodeID]; break; } } @@ -218,7 +238,7 @@ export function setExecutionItem(nodeID: string): void { for (const crumbNode of _crumbNodes) { if (crumbNode.nodeID === nodeID) { _executionItem = { node: crumbNode, bucket: 'crumbs' }; - executionItemEntry = _programMap['crumbs'][_executionItem.node.nodeID]; + executionItemEntry = _programMap['crumbs'][nodeID]; break; } } @@ -240,6 +260,29 @@ export function getExecutionItem(): string | null { return _executionItem ? _executionItem.node.nodeID : null; } +/** + * Sets a program counter override signal for the current execution item. + * @param signal - program counter override signal + */ +export function setPCOverride(signal: TPCOverride): void { + if (_executionItem === null) { + return; + } + + _programMap[_executionItem.bucket][_executionItem.node.nodeID].pcOverride = signal; +} + +/** + * Clears any program counter override signal for the current execution item. + */ +export function clearPCOverride(): void { + if (_executionItem === null) { + return; + } + + _programMap[_executionItem.bucket][_executionItem.node.nodeID].pcOverride = null; +} + /** * Returns the next node in execution sequence. * @returns - element entry if present, else `null` @@ -254,10 +297,15 @@ export function getNextElement(): IParsedElement | null { const executionItemEntry = _programMap[_executionItem.bucket][_executionItem.node.nodeID]; - const nextNode = executionItemEntry.pc; + if (executionItemEntry.pcHandler !== null) { + executionItemEntry.pcHandler(); + executionItemEntry.pcHandler = null; + } + + const currentNode = executionItemEntry.pc; const frames = executionItemEntry.frames; - if (nextNode === null) { + if (currentNode === null) { if (frames.length === 0) { /* * Successful end of execution @@ -274,7 +322,7 @@ export function getNextElement(): IParsedElement | null { } } - const instance = getInstance(nextNode.instanceID)!.instance; + const instance = getInstance(currentNode.instanceID)!.instance; function __handlePages(): { element: IParsedElement } | { marker: string | null } { const frame = frames[frames.length - 1]; @@ -283,7 +331,8 @@ export function getNextElement(): IParsedElement | null { frame.pages = []; Object.entries( - (nextNode as TreeNodeExpression | TreeNodeStatement | TreeNodeBlock).argConnections + (currentNode as TreeNodeExpression | TreeNodeStatement | TreeNodeBlock) + .argConnections ).forEach(([argName, argNode]) => frame.pages!.push({ node: argNode!, @@ -295,37 +344,34 @@ export function getNextElement(): IParsedElement | null { } if (frame.pages.length !== 0) { - if (frame.pages[0].marker === 'rollback__this__') { + if (frame.pages[0].marker === '__rollback__') { frames.pop(); - return { marker: 'rollback__this__' }; + return { marker: '__rollback__' }; } const upcomingNode = frame.pages[frame.pages.length - 1].node; - frames.push({ - node: upcomingNode, - pages: null, - }); + executionItemEntry.pcHandler = () => { + frames.push({ + node: upcomingNode, + pages: null, + }); - executionItemEntry.pc = upcomingNode; + executionItemEntry.pc = upcomingNode; + }; return { element: getNextElement()! }; } else { - if (nextNode instanceof TreeNodeBlock) { + if (currentNode instanceof TreeNodeBlock) { frame.pages = [ { - node: nextNode as TreeNode, - marker: 'rollback__this__', + node: currentNode as TreeNode, + marker: '__rollback__', }, ]; - frames.push({ - node: nextNode.innerConnection as TreeNode, - pages: null, - }); - - executionItemEntry.pc = nextNode.innerConnection; + __handleInstructionFall(true); return { element: { @@ -340,7 +386,7 @@ export function getNextElement(): IParsedElement | null { let marker: string | null = null; - if (nextNode instanceof TreeNodeExpression && frames.length !== 0) { + if (currentNode instanceof TreeNodeExpression && frames.length !== 0) { const topFramePages = frames[frames.length - 1].pages!; marker = topFramePages[topFramePages.length - 1].marker; frames[frames.length - 1].pages!.pop(); @@ -350,7 +396,76 @@ export function getNextElement(): IParsedElement | null { } } - if (nextNode instanceof TreeNodeData) { + function __handleInstructionFall(goInner?: boolean): void { + executionItemEntry.pcHandler = () => { + let nextNode = (currentNode as TreeNodeStatement | TreeNodeBlock).afterConnection; + + if (currentNode instanceof TreeNodeBlock && goInner) { + nextNode = currentNode.innerConnection; + } + + if (currentNode instanceof TreeNodeBlock) { + if (executionItemEntry.pcOverride === '__goinnerlast__') { + nextNode = currentNode.innerConnection; + while (nextNode !== null && nextNode.afterConnection !== null) { + nextNode = nextNode.afterConnection; + } + } else if (executionItemEntry.pcOverride === '__skipscope__') { + frames[frames.length - 1].pages = [ + { + node: currentNode as TreeNode, + marker: '__rollback__', + }, + ]; + nextNode = null; + } + } + + if (executionItemEntry.pcOverride === '__goup__') { + nextNode = (currentNode as TreeNodeStatement | TreeNodeBlock).beforeConnection; + } else if (executionItemEntry.pcOverride === '__skip__') { + nextNode = (currentNode as TreeNodeStatement | TreeNodeBlock).afterConnection; + if (nextNode !== null) { + nextNode = nextNode.afterConnection; + } + } else if (executionItemEntry.pcOverride === '__repeat__') { + nextNode = currentNode as TreeNodeStatement | TreeNodeBlock; + } else if ( + executionItemEntry.pcOverride === '__rollback__' || + executionItemEntry.pcOverride === '__rollback__i' + ) { + if (frames.length > 0) { + frames[frames.length - 1].pages = [ + { + node: currentNode as TreeNode, + marker: '__rollback__', + }, + ]; + } + nextNode = null; + } + + if (executionItemEntry.pcOverride !== '__rollback__i') { + executionItemEntry.pcOverride = null; + } + + if (nextNode === null) { + if (frames.length !== 0) { + executionItemEntry.pc = frames[frames.length - 1].node; + } else { + executionItemEntry.pc = nextNode; + } + } else { + frames.push({ + node: nextNode as TreeNodeStatement | TreeNodeBlock, + pages: null, + }); + executionItemEntry.pc = nextNode; + } + }; + } + + if (currentNode instanceof TreeNodeData) { frames.pop(); let marker: string | null = null; @@ -367,10 +482,12 @@ export function getNextElement(): IParsedElement | null { marker, }; - executionItemEntry.pc = nextNode.connectedTo; + executionItemEntry.pcHandler = () => { + executionItemEntry.pc = currentNode.connectedTo; + }; return element; - } else if (nextNode instanceof TreeNodeExpression) { + } else if (currentNode instanceof TreeNodeExpression) { const result = __handlePages(); if ('element' in result) { return result.element; @@ -382,59 +499,25 @@ export function getNextElement(): IParsedElement | null { marker: result.marker, }; - executionItemEntry.pc = nextNode.connectedTo; + executionItemEntry.pcHandler = () => { + executionItemEntry.pc = currentNode.connectedTo; + }; return element; - } else if (nextNode instanceof TreeNodeStatement) { - const result = __handlePages(); - if ('element' in result) { - return result.element; - } - - if (nextNode.afterConnection === null) { - if (frames.length !== 0) { - executionItemEntry.pc = frames[frames.length - 1].node; - } else { - executionItemEntry.pc = nextNode.afterConnection; - } - } else { - frames.push({ - node: nextNode.afterConnection as TreeNodeStatement | TreeNodeBlock, - pages: null, - }); - executionItemEntry.pc = nextNode.afterConnection; - } - - return { - type: 'Instruction', - instance: instance as ElementStatement, - marker: null, - }; - } /* nextNode instanceOf TreeNodeBlock */ else { + } /* currentNode instanceof TreeNodeStatement || currentNode instanceof TreeNodeBlock */ else { const result = __handlePages(); if ('element' in result) { return result.element; } - if ((nextNode as TreeNodeBlock).afterConnection === null) { - if (frames.length !== 0) { - executionItemEntry.pc = frames[frames.length - 1].node; - } else { - executionItemEntry.pc = (nextNode as TreeNodeBlock).afterConnection; - } - } else { - frames.push({ - node: (nextNode as TreeNodeBlock).afterConnection as - | TreeNodeStatement - | TreeNodeBlock, - pages: null, - }); - executionItemEntry.pc = (nextNode as TreeNodeBlock).afterConnection; - } + __handleInstructionFall(); return { type: 'Instruction', - instance: instance as ElementBlock, + instance: + currentNode instanceof TreeNodeStatement + ? (instance as ElementStatement) + : (instance as ElementBlock), marker: result.marker, }; } From d43f2e171ddaee590183ffdaa401f4942c1bb765 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 13:03:47 +0530 Subject: [PATCH 135/176] parser: [feat] Add stack trace --- src/execution/parser.spec.ts | 87 ++++++++++++++++++++++++++++++++++++ src/execution/parser.ts | 47 ++++++++++++++++++- 2 files changed, 133 insertions(+), 1 deletion(-) diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 659b9c0..8eda31d 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -6,6 +6,7 @@ import { getNextElement, setPCOverride, clearPCOverride, + stackTrace, } from './parser'; import { IParsedElementArgument, IParsedElementInstruction } from '@/@types/execution'; @@ -1002,6 +1003,92 @@ describe('Parser', () => { clearPCOverride(); }); }); + + describe('execution call frame stack trace', () => { + test('verify stack trace', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'routine', + argMap: { + name: { + elementName: 'value-string', + }, + }, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + ], + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe( + 'boxidentifier-boolean' + ); + expect(stackTrace()!.map(({ elementName }) => elementName)).toEqual([ + 'boxidentifier-boolean', + 'box-boolean', + 'routine', + 'process', + ]); + }); + + test('verify call stack for missing argument case', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'routine', + argMap: { + name: null, + }, + scope: [], + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + const next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect(() => { + getNextElement(); + }).toThrowError('Invalid access'); + }); + }); }); }); }); diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 12b2ed3..61255b0 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -15,6 +15,7 @@ import { getInstance } from '@/syntax/warehouse/warehouse'; import { TData } from '@/@types/data'; import { ElementData, ElementExpression } from '@/syntax/elements/core/elementArgument'; import { ElementBlock, ElementStatement } from '@/syntax/elements/core/elementInstruction'; +import { TElementName } from '@/@types/specification'; // -- private variables ---------------------------------------------------------------------------- @@ -318,7 +319,12 @@ export function getNextElement(): IParsedElement | null { * ERROR: Missing argument */ - return null; + const frame = frames[frames.length - 2]; + throw Error( + `Invalid access: "${frame.pages![frame.pages!.length - 1].marker}" of "${ + frame.node.elementName + }" (node ID: "${frame.node.nodeID}")` + ); } } @@ -523,4 +529,43 @@ export function getNextElement(): IParsedElement | null { } } +/** + * Returns the execution call frame stack of the current execution item. + * @returns a list of execution call frames if execution item is set, else `null` + */ +export function stackTrace(): + | { + elementName: TElementName | null; + nodeID: string | null; + pages: + | { elementName: TElementName | null; nodeID: string | null; marker: string | null }[] + | null; + }[] + | null { + if (_executionItem === null) { + return null; + } + + const executionItemEntry = _programMap[_executionItem.bucket][_executionItem.node.nodeID]; + const currentNode = executionItemEntry.pc; + return [ + ...executionItemEntry.frames.map(({ node, pages }) => ({ + elementName: node ? node.elementName : null, + nodeID: node ? node.nodeID : null, + pages: pages + ? pages.map(({ node, marker }) => ({ + elementName: node ? node.elementName : null, + nodeID: node ? node.nodeID : null, + marker, + })) + : null, + })), + { + elementName: currentNode ? currentNode.elementName : null, + nodeID: currentNode ? currentNode.nodeID : null, + pages: null, + }, + ].reverse(); +} + _reset(); From 46df357ce39c0962e04ab74382bdbd209e7e110f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 13:18:40 +0530 Subject: [PATCH 136/176] scripts: Add type check script --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 15a15ee..87f0a0c 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "scripts": { "build": "rm -rf dist/* && tsc -p .", "test": "jest --passWithNoTests --verbose src/syntax src/execution", + "check": "tsc --noEmit", "lint": "eslint src/**/*.ts", "prettify": "prettier --write src/@types src/syntax src/execution" } From 38dce471bf64c7eca5c91ea482c290acfaeb29f6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 13:24:59 +0530 Subject: [PATCH 137/176] syntax tree: [snapshot] Pack node IDs --- src/@types/syntaxTree.d.ts | 69 ++++++++++++++++++++++++------ src/syntax/tree/node.ts | 4 ++ src/syntax/tree/syntaxTree.spec.ts | 42 ++++++++++++++++-- src/syntax/tree/syntaxTree.ts | 47 ++++++++++++-------- 4 files changed, 128 insertions(+), 34 deletions(-) diff --git a/src/@types/syntaxTree.d.ts b/src/@types/syntaxTree.d.ts index e49699c..a0c5d51 100644 --- a/src/@types/syntaxTree.d.ts +++ b/src/@types/syntaxTree.d.ts @@ -8,36 +8,81 @@ import { // -- snapshots ------------------------------------------------------------------------------------ -/** Type definition for the snapshot of a data element. */ -export interface ITreeSnapshotData { +/** Type definition for the snapshot input of a data element. */ +export interface ITreeSnapshotDataInput { /** Name of the data element. */ elementName: TElementNameData; } -/** Type definition for the snapshot of an expression element. */ -export interface ITreeSnapshotExpression { +/** Type definition for the snapshot of a data element. */ +export interface ITreeSnapshotData extends ITreeSnapshotDataInput { + /** Node ID of the syntax tree node instance. */ + nodeID: string; +} + +/** Type definition for the snapshot input of an expression element. */ +export interface ITreeSnapshotExpressionInput { /** Name of the expression element. */ elementName: TElementNameExpression; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ - argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; + argMap: { + [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; + } | null; } -/** Type definition for the snapshot of a statement element. */ -export interface ITreeSnapshotStatement { +/** Type definition for the snapshot of an expression element. */ +export interface ITreeSnapshotExpression extends ITreeSnapshotExpressionInput { + /** Node ID of the syntax tree node instance. */ + nodeID: string; +} + +/** Type definition for the snapshot input of a statement element. */ +export interface ITreeSnapshotStatementInput { /** Name of the statement element. */ elementName: TElementNameStatement; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ - argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; + argMap: { + [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; + } | null; } -/** Type definition for the snapshot of a block element. */ -export interface ITreeSnapshotBlock { +/** Type definition for the snapshot of a statement element. */ +export interface ITreeSnapshotStatement extends ITreeSnapshotStatementInput { + /** Node ID of the syntax tree node instance. */ + nodeID: string; +} + +/** Type definition for the snapshot input of a block element. */ +export interface ITreeSnapshotBlockInput { /** Name of the block element. */ elementName: TElementNameBlock; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ - argMap: { [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null } | null; + argMap: { + [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; + } | null; /** List of snaphots of the elements nested in the block. */ - scope: (ITreeSnapshotStatement | ITreeSnapshotBlock)[]; + scope: (ITreeSnapshotStatementInput | ITreeSnapshotBlockInput)[]; +} + +/** Type definition for the snapshot of a block element. */ +export interface ITreeSnapshotBlock extends ITreeSnapshotBlockInput { + /** Node ID of the syntax tree node instance. */ + nodeID: string; +} + +/** Type definition for the snapshot input of the entire syntax tree. */ +export interface ITreeSnapshotInput { + /** List of snapshot inputs of all process elements. */ + process: ITreeSnapshotBlockInput[]; + /** List of snapshot inputs of all routine elements. */ + routine: ITreeSnapshotBlockInput[]; + /** List of snapshot input lists of all non-process and non-routine element stacks. */ + crumbs: ( + | ITreeSnapshotDataInput + | ITreeSnapshotExpressionInput + | ITreeSnapshotStatementInput + | ITreeSnapshotBlockInput + )[][]; } /** Type definition for the snapshot of the entire syntax tree. */ diff --git a/src/syntax/tree/node.ts b/src/syntax/tree/node.ts index 0a3441d..4c921a6 100644 --- a/src/syntax/tree/node.ts +++ b/src/syntax/tree/node.ts @@ -132,6 +132,7 @@ export class TreeNodeData extends TreeNodeArgument implements ITreeNodeData { public get snapshot(): ITreeSnapshotData { return { elementName: this._elementName as TElementNameData, + nodeID: this._nodeID, }; } } @@ -148,6 +149,7 @@ export class TreeNodeExpression extends TreeNodeArgument implements ITreeNodeExp public get snapshot(): ITreeSnapshotExpression { return { elementName: this._elementName as TElementNameExpression, + nodeID: this._nodeID, argMap: this._getArgSnapshot(), }; } @@ -186,6 +188,7 @@ export class TreeNodeStatement extends TreeNodeInstruction implements ITreeNodeS public get snapshot(): ITreeSnapshotStatement { return { elementName: this._elementName as TElementNameStatement, + nodeID: this._nodeID, argMap: this._getArgSnapshot(), }; } @@ -211,6 +214,7 @@ export class TreeNodeBlock extends TreeNodeInstruction implements ITreeNodeBlock return { elementName: this._elementName as TElementNameBlock, + nodeID: this._nodeID, argMap: this._getArgSnapshot(), scope, }; diff --git a/src/syntax/tree/syntaxTree.spec.ts b/src/syntax/tree/syntaxTree.spec.ts index 9748b64..cf60942 100644 --- a/src/syntax/tree/syntaxTree.spec.ts +++ b/src/syntax/tree/syntaxTree.spec.ts @@ -22,7 +22,7 @@ import { ElementValueBoolean } from '../elements/elementValue'; import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; import { ElementBoxBoolean } from '../elements/elementBox'; import { TreeNodeData, TreeNodeStatement, TreeNodeBlock } from './node'; -import { ITreeSnapshot } from '@/@types/syntaxTree'; +import { ITreeSnapshotInput } from '@/@types/syntaxTree'; // ------------------------------------------------------------------------------------------------- @@ -242,7 +242,7 @@ describe('Syntax Tree', () => { describe('tree generation from snapshot', () => { test('validate tree generation', () => { - const snapshotInput: ITreeSnapshot = { + const snapshotInput: ITreeSnapshotInput = { process: [ { elementName: 'process', @@ -367,7 +367,43 @@ describe('Syntax Tree', () => { }; generateFromSnapshot(snapshotInput); const snapshotOutput = generateSnapshot(); - expect(snapshotOutput).toEqual(snapshotInput); + + /* eslint-disable-next-line */ + function __check(object1: object, object2: object): void { + if (object1 === null || object1 === undefined) { + expect(object1).toBe(object2); + return; + } + + for (const key of Object.keys(object1)) { + if (key === 'nodeID') { + continue; + } + + // @ts-ignore + if (typeof object1[key] !== 'object') { + // @ts-ignore + expect(object1[key]).toEqual(object2[key]); + } else { + // @ts-ignore + __check(object1[key], object2[key]); + } + } + } + + for (const i in snapshotInput.process) { + __check(snapshotInput.process[i], snapshotOutput.process[i]); + } + + for (const i in snapshotInput.routine) { + __check(snapshotInput.routine[i], snapshotOutput.routine[i]); + } + + for (const i in snapshotInput.crumbs) { + for (const j in snapshotInput.crumbs[i]) { + __check(snapshotInput.crumbs[i][j], snapshotOutput.crumbs[i][j]); + } + } }); }); }); diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts index 3c669f9..c08831a 100644 --- a/src/syntax/tree/syntaxTree.ts +++ b/src/syntax/tree/syntaxTree.ts @@ -21,10 +21,13 @@ import { TData } from '@/@types/data'; import { ElementArgument } from '../elements/core/elementArgument'; import { ITreeSnapshot, - ITreeSnapshotBlock, - ITreeSnapshotData, - ITreeSnapshotExpression, + ITreeSnapshotInput, + ITreeSnapshotDataInput, + ITreeSnapshotExpressionInput, ITreeSnapshotStatement, + ITreeSnapshotStatementInput, + ITreeSnapshotBlock, + ITreeSnapshotBlockInput, } from '@/@types/syntaxTree'; // -- private variables ---------------------------------------------------------------------------- @@ -563,15 +566,15 @@ export function generateSnapshot(): ITreeSnapshot { * Generates the syntax tree from a snapshot. * @param snapshot - syntax tree snapshot */ -export function generateFromSnapshot(snapshot: ITreeSnapshot): void { +export function generateFromSnapshot(snapshot: ITreeSnapshotInput): void { resetSyntaxTree(); function __generateSnapshotList( snapshotList: ( - | ITreeSnapshotData - | ITreeSnapshotExpression - | ITreeSnapshotStatement - | ITreeSnapshotBlock + | ITreeSnapshotDataInput + | ITreeSnapshotExpressionInput + | ITreeSnapshotStatementInput + | ITreeSnapshotBlockInput )[] ): string | null { if (snapshotList.length === 0) { @@ -583,17 +586,21 @@ export function generateFromSnapshot(snapshot: ITreeSnapshot): void { let nodeID: string; switch (specification!.type) { case 'Data': - nodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotData); + nodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotDataInput); break; case 'Expression': - nodeID = __generateFromSnapshotExpression(snapshot as ITreeSnapshotExpression); + nodeID = __generateFromSnapshotExpression( + snapshot as ITreeSnapshotExpressionInput + ); break; case 'Statement': - nodeID = __generateFromSnapshotStatement(snapshot as ITreeSnapshotStatement); + nodeID = __generateFromSnapshotStatement( + snapshot as ITreeSnapshotStatementInput + ); break; case 'Block': default: - nodeID = __generateFromSnapshotBlock(snapshot as ITreeSnapshotBlock); + nodeID = __generateFromSnapshotBlock(snapshot as ITreeSnapshotBlockInput); } return nodeID; }); @@ -610,7 +617,7 @@ export function generateFromSnapshot(snapshot: ITreeSnapshot): void { function __generateFromSnapshotArg( nodeID: string, snapshot: { - [argName: string]: ITreeSnapshotData | ITreeSnapshotExpression | null; + [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; } | null ): void { if (snapshot === null) { @@ -625,33 +632,35 @@ export function generateFromSnapshot(snapshot: ITreeSnapshot): void { let argNodeID: string; const specification = queryElementSpecification(snapshot.elementName)!; if (specification.type === 'Data') { - argNodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotData); + argNodeID = __generateFromSnapshotData(snapshot as ITreeSnapshotDataInput); } else { - argNodeID = __generateFromSnapshotExpression(snapshot as ITreeSnapshotExpression); + argNodeID = __generateFromSnapshotExpression( + snapshot as ITreeSnapshotExpressionInput + ); } attachArgument(nodeID, argNodeID, argName); }); } - function __generateFromSnapshotData(snapshot: ITreeSnapshotData): string { + function __generateFromSnapshotData(snapshot: ITreeSnapshotDataInput): string { const nodeID = addNode(snapshot.elementName); return nodeID; } - function __generateFromSnapshotExpression(snapshot: ITreeSnapshotExpression): string { + function __generateFromSnapshotExpression(snapshot: ITreeSnapshotExpressionInput): string { const nodeID = addNode(snapshot.elementName); __generateFromSnapshotArg(nodeID, snapshot.argMap); return nodeID; } - function __generateFromSnapshotStatement(snapshot: ITreeSnapshotStatement): string { + function __generateFromSnapshotStatement(snapshot: ITreeSnapshotStatementInput): string { const nodeID = addNode(snapshot.elementName); __generateFromSnapshotArg(nodeID, snapshot.argMap); return nodeID; } - function __generateFromSnapshotBlock(snapshot: ITreeSnapshotBlock): string { + function __generateFromSnapshotBlock(snapshot: ITreeSnapshotBlockInput): string { const nodeID = addNode(snapshot.elementName); __generateFromSnapshotArg(nodeID, snapshot.argMap); const innerNodeID = __generateSnapshotList(snapshot.scope); From 9ec1b787398b10df6bd6a83bba5bdf6522c0f602 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 22:38:48 +0530 Subject: [PATCH 138/176] refactor: Load factory list elements separately --- src/execution/parser.spec.ts | 5 +++++ src/syntax/specification/specification.spec.ts | 5 ++++- src/syntax/specification/specification.ts | 3 --- src/syntax/tree/syntaxTree.spec.ts | 5 +++++ src/syntax/warehouse/warehouse.spec.ts | 6 ++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 8eda31d..8d6e099 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -21,8 +21,13 @@ import { } from '@/syntax/tree/syntaxTree'; import { TreeNodeStatement } from '@/syntax/tree/node'; +import { registerElementSpecificationEntries } from '@/syntax/specification/specification'; +import elementSpecificationEntries from '@/syntax/specification/specificationEntries'; + // ------------------------------------------------------------------------------------------------- +registerElementSpecificationEntries(elementSpecificationEntries); + describe('Parser', () => { describe('static argument parsing', () => { test('validate invalid argument sequence and verify', () => { diff --git a/src/syntax/specification/specification.spec.ts b/src/syntax/specification/specification.spec.ts index b615184..7c27def 100644 --- a/src/syntax/specification/specification.spec.ts +++ b/src/syntax/specification/specification.spec.ts @@ -14,6 +14,8 @@ import { resetElementSpecificationTable, } from './specification'; +import elementSpecificationEntries from './specificationEntries'; + import { TData } from '@/@types/data'; import { ElementData, ElementExpression } from '../elements/core/elementArgument'; import { ElementStatement, ElementBlock } from '../elements/core/elementInstruction'; @@ -23,6 +25,8 @@ import { ElementStatement, ElementBlock } from '../elements/core/elementInstruct abstract class ElementDataCover extends ElementData {} abstract class ElementExpressionCover extends ElementExpression {} +registerElementSpecificationEntries(elementSpecificationEntries); + describe('Syntax Element Specification', () => { describe('element specifications', () => { describe('data element', () => { @@ -277,7 +281,6 @@ describe('Syntax Element Specification', () => { resetElementSpecificationTable(); expect(queryElementSpecification('dummy3' as TElementName)!).toBe(null); expect(queryElementSpecification('dummy4' as TElementName)!).toBe(null); - expect(queryElementSpecification('value-boolean')).not.toBe(null); }); }); }); diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts index cc0e598..3e10fe1 100644 --- a/src/syntax/specification/specification.ts +++ b/src/syntax/specification/specification.ts @@ -7,8 +7,6 @@ import { TElementName, } from '@/@types/specification'; -import elementSpecificationEntries from './specificationEntries'; - // -- private variables ---------------------------------------------------------------------------- /** Stores the specifications for each element as a key-value pair of name: specification. */ @@ -118,7 +116,6 @@ export function removeElementSpecificationEntries(names: TElementName[]): void { */ export function resetElementSpecificationTable(): void { _elementSpecification = {}; - registerElementSpecificationEntries(elementSpecificationEntries); } resetElementSpecificationTable(); diff --git a/src/syntax/tree/syntaxTree.spec.ts b/src/syntax/tree/syntaxTree.spec.ts index cf60942..fb3334a 100644 --- a/src/syntax/tree/syntaxTree.spec.ts +++ b/src/syntax/tree/syntaxTree.spec.ts @@ -24,8 +24,13 @@ import { ElementBoxBoolean } from '../elements/elementBox'; import { TreeNodeData, TreeNodeStatement, TreeNodeBlock } from './node'; import { ITreeSnapshotInput } from '@/@types/syntaxTree'; +import { registerElementSpecificationEntries } from '../specification/specification'; +import elementSpecificationEntries from '../specification/specificationEntries'; + // ------------------------------------------------------------------------------------------------- +registerElementSpecificationEntries(elementSpecificationEntries); + describe('Syntax Tree', () => { let process: string; let routine: string; diff --git a/src/syntax/warehouse/warehouse.spec.ts b/src/syntax/warehouse/warehouse.spec.ts index cdf4c76..7563f85 100644 --- a/src/syntax/warehouse/warehouse.spec.ts +++ b/src/syntax/warehouse/warehouse.spec.ts @@ -18,8 +18,14 @@ import { ElementBoxBoolean } from '../elements/elementBox'; import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; import { ElementValueBoolean } from '../elements/elementValue'; +import { registerElementSpecificationEntries } from '../specification/specification'; +import elementSpecificationEntries from '../specification/specificationEntries'; + // ------------------------------------------------------------------------------------------------- +registerElementSpecificationEntries(elementSpecificationEntries); +resetWarehouse(); + describe('Syntax Element Warehouse', () => { let instanceID1: string; let instanceID2: string; From 7cc26788b45c0589a4a3e8445014004c34ad7776 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 22:55:33 +0530 Subject: [PATCH 139/176] refactor: Extract factory list elements to library folder --- package.json | 4 ++-- src/execution/parser.spec.ts | 2 +- src/execution/parser.ts | 4 ++-- src/{syntax => library}/elements/elementBox.spec.ts | 0 src/{syntax => library}/elements/elementBox.ts | 2 +- .../elements/elementBoxIdentifier.spec.ts | 0 .../elements/elementBoxIdentifier.ts | 2 +- .../elements/elementOperatorMath.spec.ts | 0 .../elements/elementOperatorMath.ts | 2 +- src/{syntax => library}/elements/elementProgram.ts | 2 +- src/{syntax => library}/elements/elementValue.spec.ts | 0 src/{syntax => library}/elements/elementValue.ts | 2 +- .../specification.ts} | 10 +++++----- .../elements/{core => }/elementArgument.spec.ts | 0 src/syntax/elements/{core => }/elementArgument.ts | 0 src/syntax/elements/{core => }/elementInstruction.ts | 0 src/syntax/elements/{core => }/elementSyntax.spec.ts | 0 src/syntax/elements/{core => }/elementSyntax.ts | 0 src/syntax/specification/specification.spec.ts | 6 +++--- src/syntax/tree/syntaxTree.spec.ts | 11 ++++++----- src/syntax/tree/syntaxTree.ts | 2 +- src/syntax/warehouse/warehouse.spec.ts | 11 ++++++----- src/syntax/warehouse/warehouse.ts | 6 +++--- 23 files changed, 34 insertions(+), 32 deletions(-) rename src/{syntax => library}/elements/elementBox.spec.ts (100%) rename src/{syntax => library}/elements/elementBox.ts (97%) rename src/{syntax => library}/elements/elementBoxIdentifier.spec.ts (100%) rename src/{syntax => library}/elements/elementBoxIdentifier.ts (98%) rename src/{syntax => library}/elements/elementOperatorMath.spec.ts (100%) rename src/{syntax => library}/elements/elementOperatorMath.ts (98%) rename src/{syntax => library}/elements/elementProgram.ts (91%) rename src/{syntax => library}/elements/elementValue.spec.ts (100%) rename src/{syntax => library}/elements/elementValue.ts (97%) rename src/{syntax/specification/specificationEntries.ts => library/specification.ts} (95%) rename src/syntax/elements/{core => }/elementArgument.spec.ts (100%) rename src/syntax/elements/{core => }/elementArgument.ts (100%) rename src/syntax/elements/{core => }/elementInstruction.ts (100%) rename src/syntax/elements/{core => }/elementSyntax.spec.ts (100%) rename src/syntax/elements/{core => }/elementSyntax.ts (100%) diff --git a/package.json b/package.json index 87f0a0c..169904c 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,9 @@ }, "scripts": { "build": "rm -rf dist/* && tsc -p .", - "test": "jest --passWithNoTests --verbose src/syntax src/execution", + "test": "jest --passWithNoTests --verbose src/syntax src/library src/execution src/library", "check": "tsc --noEmit", "lint": "eslint src/**/*.ts", - "prettify": "prettier --write src/@types src/syntax src/execution" + "prettify": "prettier --write src/@types src/syntax src/execution src/library" } } diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 8d6e099..471ecc5 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -22,7 +22,7 @@ import { import { TreeNodeStatement } from '@/syntax/tree/node'; import { registerElementSpecificationEntries } from '@/syntax/specification/specification'; -import elementSpecificationEntries from '@/syntax/specification/specificationEntries'; +import elementSpecificationEntries from '@/library/specification'; // ------------------------------------------------------------------------------------------------- diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 61255b0..87e6bc6 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -13,8 +13,8 @@ import { getProcessNodes, getRoutineNodes, getCrumbs } from '@/syntax/tree/synta import { getInstance } from '@/syntax/warehouse/warehouse'; import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from '@/syntax/elements/core/elementArgument'; -import { ElementBlock, ElementStatement } from '@/syntax/elements/core/elementInstruction'; +import { ElementData, ElementExpression } from '@/syntax/elements/elementArgument'; +import { ElementBlock, ElementStatement } from '@/syntax/elements/elementInstruction'; import { TElementName } from '@/@types/specification'; // -- private variables ---------------------------------------------------------------------------- diff --git a/src/syntax/elements/elementBox.spec.ts b/src/library/elements/elementBox.spec.ts similarity index 100% rename from src/syntax/elements/elementBox.spec.ts rename to src/library/elements/elementBox.spec.ts diff --git a/src/syntax/elements/elementBox.ts b/src/library/elements/elementBox.ts similarity index 97% rename from src/syntax/elements/elementBox.ts rename to src/library/elements/elementBox.ts index fec22cf..0bfc35e 100644 --- a/src/syntax/elements/elementBox.ts +++ b/src/library/elements/elementBox.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementStatement } from './core/elementInstruction'; +import { ElementStatement } from '@/syntax/elements/elementInstruction'; import { declareVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/elementBoxIdentifier.spec.ts b/src/library/elements/elementBoxIdentifier.spec.ts similarity index 100% rename from src/syntax/elements/elementBoxIdentifier.spec.ts rename to src/library/elements/elementBoxIdentifier.spec.ts diff --git a/src/syntax/elements/elementBoxIdentifier.ts b/src/library/elements/elementBoxIdentifier.ts similarity index 98% rename from src/syntax/elements/elementBoxIdentifier.ts rename to src/library/elements/elementBoxIdentifier.ts index 7c98705..28fa421 100644 --- a/src/syntax/elements/elementBoxIdentifier.ts +++ b/src/library/elements/elementBoxIdentifier.ts @@ -1,7 +1,7 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from './core/elementArgument'; +import { ElementData } from '@/syntax/elements/elementArgument'; import { queryVariable } from '@/execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/elementOperatorMath.spec.ts b/src/library/elements/elementOperatorMath.spec.ts similarity index 100% rename from src/syntax/elements/elementOperatorMath.spec.ts rename to src/library/elements/elementOperatorMath.spec.ts diff --git a/src/syntax/elements/elementOperatorMath.ts b/src/library/elements/elementOperatorMath.ts similarity index 98% rename from src/syntax/elements/elementOperatorMath.ts rename to src/library/elements/elementOperatorMath.ts index 2abd934..0be6012 100644 --- a/src/syntax/elements/elementOperatorMath.ts +++ b/src/library/elements/elementOperatorMath.ts @@ -1,6 +1,6 @@ import { TData, TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementExpression } from './core/elementArgument'; +import { ElementExpression } from '@/syntax/elements/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/elementProgram.ts b/src/library/elements/elementProgram.ts similarity index 91% rename from src/syntax/elements/elementProgram.ts rename to src/library/elements/elementProgram.ts index 7b5a678..9aab522 100644 --- a/src/syntax/elements/elementProgram.ts +++ b/src/library/elements/elementProgram.ts @@ -1,5 +1,5 @@ import { TElementNameBlock } from '@/@types/specification'; -import { ElementBlock } from './core/elementInstruction'; +import { ElementBlock } from '@/syntax/elements/elementInstruction'; export class ElementProcess extends ElementBlock { constructor(name: TElementNameBlock, label: string) { diff --git a/src/syntax/elements/elementValue.spec.ts b/src/library/elements/elementValue.spec.ts similarity index 100% rename from src/syntax/elements/elementValue.spec.ts rename to src/library/elements/elementValue.spec.ts diff --git a/src/syntax/elements/elementValue.ts b/src/library/elements/elementValue.ts similarity index 97% rename from src/syntax/elements/elementValue.ts rename to src/library/elements/elementValue.ts index 1efafde..38a1475 100644 --- a/src/syntax/elements/elementValue.ts +++ b/src/library/elements/elementValue.ts @@ -1,7 +1,7 @@ import { TDataName } from '@/@types/data'; import { TElementName } from '@/@types/specification'; -import { ElementData } from './core/elementArgument'; +import { ElementData } from '@/syntax/elements/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification/specificationEntries.ts b/src/library/specification.ts similarity index 95% rename from src/syntax/specification/specificationEntries.ts rename to src/library/specification.ts index 6471471..814c7be 100644 --- a/src/syntax/specification/specificationEntries.ts +++ b/src/library/specification.ts @@ -9,27 +9,27 @@ import { ElementValueBoolean, ElementValueNumber, ElementValueString, -} from '../elements/elementValue'; +} from './elements/elementValue'; import { ElementBoxGeneric, ElementBoxBoolean, ElementBoxNumber, ElementBoxString, -} from '../elements/elementBox'; +} from './elements/elementBox'; import { ElementBoxIdentifierGeneric, ElementBoxIdentifierBoolean, ElementBoxIdentifierNumber, ElementBoxIdentifierString, -} from '../elements/elementBoxIdentifier'; +} from './elements/elementBoxIdentifier'; import { ElementOperatorMathPlus, ElementOperatorMathMinus, ElementOperatorMathTimes, ElementOperatorMathDivide, ElementOperatorMathModulus, -} from '../elements/elementOperatorMath'; -import { ElementProcess, ElementRoutine } from '../elements/elementProgram'; +} from './elements/elementOperatorMath'; +import { ElementProcess, ElementRoutine } from './elements/elementProgram'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/core/elementArgument.spec.ts b/src/syntax/elements/elementArgument.spec.ts similarity index 100% rename from src/syntax/elements/core/elementArgument.spec.ts rename to src/syntax/elements/elementArgument.spec.ts diff --git a/src/syntax/elements/core/elementArgument.ts b/src/syntax/elements/elementArgument.ts similarity index 100% rename from src/syntax/elements/core/elementArgument.ts rename to src/syntax/elements/elementArgument.ts diff --git a/src/syntax/elements/core/elementInstruction.ts b/src/syntax/elements/elementInstruction.ts similarity index 100% rename from src/syntax/elements/core/elementInstruction.ts rename to src/syntax/elements/elementInstruction.ts diff --git a/src/syntax/elements/core/elementSyntax.spec.ts b/src/syntax/elements/elementSyntax.spec.ts similarity index 100% rename from src/syntax/elements/core/elementSyntax.spec.ts rename to src/syntax/elements/elementSyntax.spec.ts diff --git a/src/syntax/elements/core/elementSyntax.ts b/src/syntax/elements/elementSyntax.ts similarity index 100% rename from src/syntax/elements/core/elementSyntax.ts rename to src/syntax/elements/elementSyntax.ts diff --git a/src/syntax/specification/specification.spec.ts b/src/syntax/specification/specification.spec.ts index 7c27def..b74a451 100644 --- a/src/syntax/specification/specification.spec.ts +++ b/src/syntax/specification/specification.spec.ts @@ -14,11 +14,11 @@ import { resetElementSpecificationTable, } from './specification'; -import elementSpecificationEntries from './specificationEntries'; +import elementSpecificationEntries from '@/library/specification'; import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from '../elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from '../elements/core/elementInstruction'; +import { ElementData, ElementExpression } from '../elements/elementArgument'; +import { ElementStatement, ElementBlock } from '../elements/elementInstruction'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/tree/syntaxTree.spec.ts b/src/syntax/tree/syntaxTree.spec.ts index fb3334a..3d7850d 100644 --- a/src/syntax/tree/syntaxTree.spec.ts +++ b/src/syntax/tree/syntaxTree.spec.ts @@ -17,15 +17,16 @@ import { } from './syntaxTree'; import { getInstance } from '../warehouse/warehouse'; -import { ElementProcess, ElementRoutine } from '../elements/elementProgram'; -import { ElementValueBoolean } from '../elements/elementValue'; -import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; -import { ElementBoxBoolean } from '../elements/elementBox'; import { TreeNodeData, TreeNodeStatement, TreeNodeBlock } from './node'; import { ITreeSnapshotInput } from '@/@types/syntaxTree'; import { registerElementSpecificationEntries } from '../specification/specification'; -import elementSpecificationEntries from '../specification/specificationEntries'; +import elementSpecificationEntries from '../../library/specification'; + +import { ElementProcess, ElementRoutine } from '@/library/elements/elementProgram'; +import { ElementValueBoolean } from '@/library/elements/elementValue'; +import { ElementOperatorMathPlus } from '@/library/elements/elementOperatorMath'; +import { ElementBoxBoolean } from '@/library/elements/elementBox'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts index c08831a..cd81f26 100644 --- a/src/syntax/tree/syntaxTree.ts +++ b/src/syntax/tree/syntaxTree.ts @@ -18,7 +18,7 @@ import { addInstance, getInstance, removeInstance } from '../warehouse/warehouse import { queryElementSpecification } from '../specification/specification'; import { TData } from '@/@types/data'; -import { ElementArgument } from '../elements/core/elementArgument'; +import { ElementArgument } from '../elements/elementArgument'; import { ITreeSnapshot, ITreeSnapshotInput, diff --git a/src/syntax/warehouse/warehouse.spec.ts b/src/syntax/warehouse/warehouse.spec.ts index 7563f85..ecf14de 100644 --- a/src/syntax/warehouse/warehouse.spec.ts +++ b/src/syntax/warehouse/warehouse.spec.ts @@ -13,13 +13,14 @@ import { resetWarehouse, } from './warehouse'; -import { ElementBlock } from '../elements/core/elementInstruction'; -import { ElementBoxBoolean } from '../elements/elementBox'; -import { ElementOperatorMathPlus } from '../elements/elementOperatorMath'; -import { ElementValueBoolean } from '../elements/elementValue'; +import { ElementBlock } from '../elements/elementInstruction'; import { registerElementSpecificationEntries } from '../specification/specification'; -import elementSpecificationEntries from '../specification/specificationEntries'; +import elementSpecificationEntries from '../../library/specification'; + +import { ElementBoxBoolean } from '@/library/elements/elementBox'; +import { ElementOperatorMathPlus } from '@/library/elements/elementOperatorMath'; +import { ElementValueBoolean } from '@/library/elements/elementValue'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/warehouse/warehouse.ts b/src/syntax/warehouse/warehouse.ts index ed6d5e9..fff6499 100644 --- a/src/syntax/warehouse/warehouse.ts +++ b/src/syntax/warehouse/warehouse.ts @@ -16,9 +16,9 @@ import { } from '../specification/specification'; import { TData } from '@/@types/data'; -import { ElementSyntax } from '../elements/core/elementSyntax'; -import { ElementData, ElementExpression } from '../elements/core/elementArgument'; -import { ElementStatement, ElementBlock } from '../elements/core/elementInstruction'; +import { ElementSyntax } from '../elements/elementSyntax'; +import { ElementData, ElementExpression } from '../elements/elementArgument'; +import { ElementStatement, ElementBlock } from '../elements/elementInstruction'; // -- private variables ---------------------------------------------------------------------------- From fa530fa4b4f9ce63fb52891dccb226e8c1e42291 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 17 Nov 2021 13:34:00 +0530 Subject: [PATCH 140/176] interpreter: Add proxy functions for parser --- src/@types/execution.d.ts | 17 ++++++++++++++--- src/execution/interpreter.ts | 18 +++++++++++++++++- src/execution/parser.ts | 13 +------------ 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/@types/execution.d.ts b/src/@types/execution.d.ts index 7f44fda..cfc963b 100644 --- a/src/@types/execution.d.ts +++ b/src/@types/execution.d.ts @@ -5,18 +5,29 @@ export type IVariable = { }; /** Type definition of the parsed argument element entry returned on fetching next element. */ -type IParsedElementArgument = { +export type IParsedElementArgument = { instance: ElementData | ElementExpression; type: 'Argument'; marker: string | null; }; /** Type definition of the parsed instruction element entry returned on fetching next element. */ -type IParsedElementInstruction = { +export type IParsedElementInstruction = { instance: ElementStatement | ElementBlock; type: 'Instruction'; marker: string | null; }; /** Type definition of the parsed element entry returned on fetching next element. */ -type IParsedElement = IParsedElementArgument | IParsedElementInstruction; +export type IParsedElement = IParsedElementArgument | IParsedElementInstruction; + +/* Type definition for program counter override signals. */ +export type TPCOverride = + | '__rollback__' + | '__rollback__i' + | '__skip__' + | '__skipscope__' + | '__goinnerlast__' + | '__goup__' + | '__repeat__' + | null; diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts index fcb8dc4..37fc99f 100644 --- a/src/execution/interpreter.ts +++ b/src/execution/interpreter.ts @@ -1,7 +1,8 @@ import { TData, TDataName } from '@/@types/data'; -import { IVariable } from '@/@types/execution'; +import { IVariable, TPCOverride } from '@/@types/execution'; import { addGlobalVariable, getGlobalVariable } from './symbolTable'; +import { setPCOverride, clearPCOverride } from './parser'; // -- public functions ----------------------------------------------------------------------------- @@ -26,3 +27,18 @@ export function declareVariable(variable: string, dataType: TDataName, value: TD export function queryVariable(variable: string): IVariable | null { return getGlobalVariable(variable); } + +/** + * Sets a program counter override signal for the current execution item. + * @param signal - program counter override signal + */ +export function overrideProgramCounter(signal: TPCOverride): void { + setPCOverride(signal); +} + +/** + * Clears any program counter override signal for the current execution item. + */ +export function releaseProgramCounter(): void { + clearPCOverride(); +} diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 87e6bc6..10381e3 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -1,4 +1,4 @@ -import { IParsedElement } from '@/@types/execution'; +import { IParsedElement, TPCOverride } from '@/@types/execution'; import { TreeNode, @@ -41,17 +41,6 @@ interface IFrame { | null; } -/* Type definition for program counter override signals. */ -type TPCOverride = - | '__rollback__' - | '__rollback__i' - | '__skip__' - | '__skipscope__' - | '__goinnerlast__' - | '__goup__' - | '__repeat__' - | null; - /** Type definition for each root element's parsing state table. */ type TProgramMapEntry = { /** Execution call frame stack. */ From 9689832993e2ea8f1a2385294d9f7122f747ed50 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 18 Nov 2021 01:02:42 +0530 Subject: [PATCH 141/176] parser: [feat] Add signal to visit scope again --- src/@types/execution.d.ts | 1 + src/execution/parser.spec.ts | 65 ++++++++++++++++++++++++++++++++++++ src/execution/parser.ts | 42 ++++++++++++----------- 3 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/@types/execution.d.ts b/src/@types/execution.d.ts index cfc963b..bf3daf3 100644 --- a/src/@types/execution.d.ts +++ b/src/@types/execution.d.ts @@ -27,6 +27,7 @@ export type TPCOverride = | '__rollback__i' | '__skip__' | '__skipscope__' + | '__goinnerfirst__' | '__goinnerlast__' | '__goup__' | '__repeat__' diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 471ecc5..1d6b86f 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -813,6 +813,71 @@ describe('Parser', () => { ); }); + test('verify __goinnerfirst__ signal', () => { + resetSyntaxTree(); + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-boolean', + argMap: { + name: { + elementName: 'boxidentifier-boolean', + }, + value: { + elementName: 'value-boolean', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'boxidentifier-number', + }, + value: { + elementName: 'value-number', + }, + }, + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + + const node = getProcessNodes()[0]; + setExecutionItem(node.nodeID); + let next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + setPCOverride('__goinnerfirst__'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('box-boolean'); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + next = getNextElement(); + expect((next as IParsedElementInstruction).instance.name).toBe('process'); + expect((next as IParsedElementInstruction).marker).toBe('__rollback__'); + next = getNextElement(); + expect(next).toBe(null); + }); + test('verify __goinnerlast__ signal', () => { resetSyntaxTree(); generateFromSnapshot({ diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 10381e3..3b885bb 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -48,7 +48,7 @@ type TProgramMapEntry = { /** Program counter. */ pc: TreeNode | null; /** Handler to update program counter. */ - pcHandler: (() => void) | null; + pcHandler: (() => void)[]; /** Signal to override program counter's normal sequence. */ pcOverride: TPCOverride; }; @@ -96,7 +96,7 @@ function _reset(): void { _programMap['process'][processNode.nodeID] = { frames: [], pc: null, - pcHandler: null, + pcHandler: [], pcOverride: null, }; } @@ -105,7 +105,7 @@ function _reset(): void { _programMap['routine'][routineNode.nodeID] = { frames: [], pc: null, - pcHandler: null, + pcHandler: [], pcOverride: null, }; } @@ -114,7 +114,7 @@ function _reset(): void { _programMap['crumbs'][crumbNode.nodeID] = { frames: [], pc: null, - pcHandler: null, + pcHandler: [], pcOverride: null, }; } @@ -288,8 +288,8 @@ export function getNextElement(): IParsedElement | null { const executionItemEntry = _programMap[_executionItem.bucket][_executionItem.node.nodeID]; if (executionItemEntry.pcHandler !== null) { - executionItemEntry.pcHandler(); - executionItemEntry.pcHandler = null; + executionItemEntry.pcHandler.forEach((handler) => handler()); + executionItemEntry.pcHandler = []; } const currentNode = executionItemEntry.pc; @@ -340,21 +340,25 @@ export function getNextElement(): IParsedElement | null { if (frame.pages.length !== 0) { if (frame.pages[0].marker === '__rollback__') { - frames.pop(); + executionItemEntry.pcHandler.push(() => { + if (executionItemEntry.pcOverride !== '__goinnerfirst__') { + frames.pop(); + } + }); return { marker: '__rollback__' }; } const upcomingNode = frame.pages[frame.pages.length - 1].node; - executionItemEntry.pcHandler = () => { + executionItemEntry.pcHandler.push(() => { frames.push({ node: upcomingNode, pages: null, }); executionItemEntry.pc = upcomingNode; - }; + }); return { element: getNextElement()! }; } else { @@ -392,14 +396,14 @@ export function getNextElement(): IParsedElement | null { } function __handleInstructionFall(goInner?: boolean): void { - executionItemEntry.pcHandler = () => { + executionItemEntry.pcHandler.push(() => { let nextNode = (currentNode as TreeNodeStatement | TreeNodeBlock).afterConnection; - if (currentNode instanceof TreeNodeBlock && goInner) { - nextNode = currentNode.innerConnection; - } - if (currentNode instanceof TreeNodeBlock) { + if (goInner || executionItemEntry.pcOverride === '__goinnerfirst__') { + nextNode = currentNode.innerConnection; + } + if (executionItemEntry.pcOverride === '__goinnerlast__') { nextNode = currentNode.innerConnection; while (nextNode !== null && nextNode.afterConnection !== null) { @@ -457,7 +461,7 @@ export function getNextElement(): IParsedElement | null { }); executionItemEntry.pc = nextNode; } - }; + }); } if (currentNode instanceof TreeNodeData) { @@ -477,9 +481,9 @@ export function getNextElement(): IParsedElement | null { marker, }; - executionItemEntry.pcHandler = () => { + executionItemEntry.pcHandler.push(() => { executionItemEntry.pc = currentNode.connectedTo; - }; + }); return element; } else if (currentNode instanceof TreeNodeExpression) { @@ -494,9 +498,9 @@ export function getNextElement(): IParsedElement | null { marker: result.marker, }; - executionItemEntry.pcHandler = () => { + executionItemEntry.pcHandler.push(() => { executionItemEntry.pc = currentNode.connectedTo; - }; + }); return element; } /* currentNode instanceof TreeNodeStatement || currentNode instanceof TreeNodeBlock */ else { From a6dcb86c03db72461de79681842b236c72c25e46 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 18 Nov 2021 01:11:09 +0530 Subject: [PATCH 142/176] elements: [feat] Add repeat element --- src/@types/specification.d.ts | 2 +- src/library/elements/elementLoop.ts | 39 +++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/library/elements/elementLoop.ts diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index e157483..03d98ac 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -41,7 +41,7 @@ export type TElementNameStatement = 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; /** Names of factory list of block elements. */ -export type TElementNameBlock = 'process' | 'routine'; +export type TElementNameBlock = 'process' | 'routine' | 'repeat'; /** Names of factory list of syntax elements. */ export type TElementName = diff --git a/src/library/elements/elementLoop.ts b/src/library/elements/elementLoop.ts new file mode 100644 index 0000000..87b1e85 --- /dev/null +++ b/src/library/elements/elementLoop.ts @@ -0,0 +1,39 @@ +import { TElementNameBlock } from '@/@types/specification'; +import { ElementBlock } from '@/syntax/elements/elementInstruction'; + +import { overrideProgramCounter } from '@/execution/interpreter'; + +// ------------------------------------------------------------------------------------------------- + +/** + * @class + * Defines a repeat block element. + * @classdesc + * Repeats the scope as many times as the parameter provided. + */ +export class ElementRepeat extends ElementBlock { + constructor(name: TElementNameBlock, label: string) { + super(name, label, { times: ['number'] }); + } + + private _counter = 0; + + onVisit(params: { times: number }): void { + this._counter = params.times; + } + + onInnerVisit(): void { + // no use + } + + onInnerExit(): void { + // no use + } + + onExit(): void { + this._counter--; + if (this._counter !== 0) { + overrideProgramCounter('__goinnerfirst__'); + } + } +} From 6302941d21ca6191f9ad5095c83aa05a56078c2a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 18 Nov 2021 01:15:30 +0530 Subject: [PATCH 143/176] elements: [feat] Add if element --- src/@types/specification.d.ts | 2 +- src/library/elements/elementConditional.ts | 36 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/library/elements/elementConditional.ts diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index 03d98ac..c2f6c4c 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -41,7 +41,7 @@ export type TElementNameStatement = 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; /** Names of factory list of block elements. */ -export type TElementNameBlock = 'process' | 'routine' | 'repeat'; +export type TElementNameBlock = 'process' | 'routine' | 'repeat' | 'if'; /** Names of factory list of syntax elements. */ export type TElementName = diff --git a/src/library/elements/elementConditional.ts b/src/library/elements/elementConditional.ts new file mode 100644 index 0000000..aaae1d0 --- /dev/null +++ b/src/library/elements/elementConditional.ts @@ -0,0 +1,36 @@ +import { TElementNameBlock } from '@/@types/specification'; +import { ElementBlock } from '@/syntax/elements/elementInstruction'; + +import { overrideProgramCounter } from '@/execution/interpreter'; + +// ------------------------------------------------------------------------------------------------- + +/** + * @class + * Defines an If block element. + * @classdesc + * Allows entry to scope only if condition is satisfied. + */ +export class ElementIf extends ElementBlock { + constructor(name: TElementNameBlock, label: string) { + super(name, label, { condition: ['boolean'] }); + } + + onVisit(params: { condition: boolean }): void { + if (!params.condition) { + overrideProgramCounter('__skipscope__'); + } + } + + onInnerVisit(): void { + // no use + } + + onInnerExit(): void { + // no use + } + + onExit(): void { + // no use + } +} From e79028bd649b5347d9820e37898295b3ec01e2df Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 18 Nov 2021 18:39:03 +0530 Subject: [PATCH 144/176] elements: [feat] Add print element --- src/@types/specification.d.ts | 7 ++++++- src/library/elements/elementPrint.ts | 15 +++++++++++++++ src/library/specification.ts | 24 ++++++++++++++++++++++++ src/syntax/warehouse/warehouse.spec.ts | 17 ++++++++--------- 4 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 src/library/elements/elementPrint.ts diff --git a/src/@types/specification.d.ts b/src/@types/specification.d.ts index c2f6c4c..ddddbb2 100644 --- a/src/@types/specification.d.ts +++ b/src/@types/specification.d.ts @@ -38,7 +38,12 @@ export type TElementNameExpression = /** Names of factory list of statement elements. */ export type TElementNameStatement = // box elements - 'box-generic' | 'box-boolean' | 'box-number' | 'box-string'; + | 'box-generic' + | 'box-boolean' + | 'box-number' + | 'box-string' + // print element + | 'print'; /** Names of factory list of block elements. */ export type TElementNameBlock = 'process' | 'routine' | 'repeat' | 'if'; diff --git a/src/library/elements/elementPrint.ts b/src/library/elements/elementPrint.ts new file mode 100644 index 0000000..94355fe --- /dev/null +++ b/src/library/elements/elementPrint.ts @@ -0,0 +1,15 @@ +import { TData } from '@/@types/data'; +import { TElementNameStatement } from '@/@types/specification'; +import { ElementStatement } from '@/syntax/elements/elementInstruction'; + +// ------------------------------------------------------------------------------------------------- + +export class ElementPrint extends ElementStatement { + constructor(name: TElementNameStatement, label: string) { + super(name, label, { value: ['boolean', 'number', 'string'] }); + } + + onVisit(params: { value: TData }): void { + console.log(params.value); + } +} diff --git a/src/library/specification.ts b/src/library/specification.ts index 814c7be..07d014f 100644 --- a/src/library/specification.ts +++ b/src/library/specification.ts @@ -29,7 +29,10 @@ import { ElementOperatorMathDivide, ElementOperatorMathModulus, } from './elements/elementOperatorMath'; +import { ElementRepeat } from './elements/elementLoop'; +import { ElementIf } from './elements/elementConditional'; import { ElementProcess, ElementRoutine } from './elements/elementProgram'; +import { ElementPrint } from './elements/elementPrint'; // ------------------------------------------------------------------------------------------------- @@ -141,6 +144,20 @@ const _elementSpecificationEntries: { category: 'operator-math', prototype: ElementOperatorMathModulus, }, + // -- loop elements ---------------------------------------------------------------------------- + 'repeat': { + label: 'repeat', + type: 'Block', + category: 'loop', + prototype: ElementRepeat, + }, + // -- conditional elements --------------------------------------------------------------------- + 'if': { + label: 'if', + type: 'Block', + category: 'loop', + prototype: ElementIf, + }, // -- program elements ------------------------------------------------------------------------- 'process': { label: 'start', @@ -158,6 +175,13 @@ const _elementSpecificationEntries: { allowAbove: false, allowBelow: false, }, + // -- print element ---------------------------------------------------------------------------- + 'print': { + label: 'print', + type: 'Statement', + category: 'print', + prototype: ElementPrint, + }, }; export default _elementSpecificationEntries; diff --git a/src/syntax/warehouse/warehouse.spec.ts b/src/syntax/warehouse/warehouse.spec.ts index ecf14de..18f1701 100644 --- a/src/syntax/warehouse/warehouse.spec.ts +++ b/src/syntax/warehouse/warehouse.spec.ts @@ -149,15 +149,14 @@ describe('Syntax Element Warehouse', () => { }); test('verify category count all', () => { - expect(new Set(Object.entries(getCategoryCountAll()))).toEqual( - new Set([ - ['value', 2], - ['boxidentifier', 1], - ['operator-math', 2], - ['box', 2], - ['program', 1], - ]) - ); + const categoryCount = getCategoryCountAll(); + [ + ['value', 2], + ['boxidentifier', 1], + ['operator-math', 2], + ['box', 2], + ['program', 1], + ].forEach(([key, value]) => expect(categoryCount[key]).toBe(value)); }); }); From a5d35c2bb58eab897a524d1909504247ff9fbe46 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Thu, 18 Nov 2021 18:26:50 +0530 Subject: [PATCH 145/176] interpreter: [feat] Add basic non-preemptive execution logic --- src/execution/interpreter.spec.ts | 207 ++++++++++++++++++++++++++++++ src/execution/interpreter.ts | 62 ++++++++- 2 files changed, 268 insertions(+), 1 deletion(-) create mode 100644 src/execution/interpreter.spec.ts diff --git a/src/execution/interpreter.spec.ts b/src/execution/interpreter.spec.ts new file mode 100644 index 0000000..191321e --- /dev/null +++ b/src/execution/interpreter.spec.ts @@ -0,0 +1,207 @@ +import { run } from './interpreter'; + +import { generateFromSnapshot, generateSnapshot, getNode } from '@/syntax/tree/syntaxTree'; + +import { registerElementSpecificationEntries } from '@/syntax/specification/specification'; +import elementSpecification from '@/library/specification'; +import { getInstance } from '@/syntax/warehouse/warehouse'; + +// ------------------------------------------------------------------------------------------------- + +registerElementSpecificationEntries(elementSpecification); + +describe('Interpreter', () => { + test('run a process and verify', () => { + /* + fibonacci sequence + + a = 0 + b = 1 + repeat(10) + print(c) + c = plus(a, b) + a = b + b = c + + expect 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 + */ + + generateFromSnapshot({ + process: [ + { + elementName: 'process', + argMap: null, + scope: [ + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'value-number', + }, + }, + }, + { + elementName: 'repeat', + argMap: { + times: { + elementName: 'value-number', + }, + }, + scope: [ + { + elementName: 'print', + argMap: { + value: { + elementName: 'boxidentifier-number', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'operator-math-plus', + argMap: { + operand1: { + elementName: 'boxidentifier-number', + }, + operand2: { + elementName: 'boxidentifier-number', + }, + }, + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'boxidentifier-number', + }, + }, + }, + { + elementName: 'box-number', + argMap: { + name: { + elementName: 'value-string', + }, + value: { + elementName: 'boxidentifier-number', + }, + }, + }, + ], + }, + ], + }, + ], + routine: [], + crumbs: [], + }); + const snapshot = generateSnapshot(); + + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[0].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('a'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[0].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('0'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[1].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('b'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[1].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('1'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[2].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('c'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[2].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('1'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].argMap['times']['nodeID'])!.instanceID + )!.instance.updateLabel('10'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[0].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('c'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[1].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('c'); + getInstance( + getNode( + // @ts-ignore + snapshot.process[0].scope[3].scope[1].argMap['value']['argMap']['operand1'][ + 'nodeID' + ] + )!.instanceID + )!.instance.updateLabel('a'); + getInstance( + getNode( + // @ts-ignore + snapshot.process[0].scope[3].scope[1].argMap['value']['argMap']['operand2'][ + 'nodeID' + ] + )!.instanceID + )!.instance.updateLabel('b'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[2].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('a'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[2].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('b'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[3].argMap['name']['nodeID'])!.instanceID + )!.instance.updateLabel('b'); + getInstance( + // @ts-ignore + getNode(snapshot.process[0].scope[3].scope[3].argMap['value']['nodeID'])!.instanceID + )!.instance.updateLabel('c'); + + const node = snapshot.process[0]; + run(node.nodeID); + }); +}); diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts index 37fc99f..5392659 100644 --- a/src/execution/interpreter.ts +++ b/src/execution/interpreter.ts @@ -2,7 +2,12 @@ import { TData, TDataName } from '@/@types/data'; import { IVariable, TPCOverride } from '@/@types/execution'; import { addGlobalVariable, getGlobalVariable } from './symbolTable'; -import { setPCOverride, clearPCOverride } from './parser'; +import { setPCOverride, clearPCOverride, setExecutionItem, getNextElement } from './parser'; + +import { ElementData, ElementExpression } from '@/syntax/elements/elementArgument'; +import { ElementStatement, ElementBlock } from '@/syntax/elements/elementInstruction'; + +// -- private functions ---------------------------------------------------------------------------- // -- public functions ----------------------------------------------------------------------------- @@ -42,3 +47,58 @@ export function overrideProgramCounter(signal: TPCOverride): void { export function releaseProgramCounter(): void { clearPCOverride(); } + +/** + * Runs a process, routine, or crumb stack from start to end. + * @param nodeID syntax tree node ID of the starting node + */ +export function run(nodeID: string): void { + abstract class ElementDataCover extends ElementData { + abstract evaluate(): void; + } + + abstract class ElementExpressionCover extends ElementExpression { + abstract evaluate(params: { [key: string]: TData }): void; + } + + setExecutionItem(nodeID); + + const memo: { [key: string]: TData } = {}; + + function __execute(): void { + const element = getNextElement(); + + if (element === null) { + return; + } + + const { instance, type, marker } = element; + if (type === 'Argument') { + if (instance instanceof ElementDataCover) { + instance.evaluate(); + } /* instance instanceof ElementExpressionCover */ else { + (instance as ElementExpressionCover).evaluate(memo); + } + + const value = instance.value; + + if (marker !== null) { + memo[marker] = value; + } + } else { + if (instance instanceof ElementStatement) { + instance.onVisit(memo); + } /* instance instanceof ElementBlock */ else { + if (marker !== '__rollback__') { + (instance as ElementBlock).onVisit(memo); + } else { + (instance as ElementBlock).onExit(); + } + } + } + + __execute(); + } + + __execute(); +} From 76c630bc6e97c67a9bbbb96572d84f77b4719a42 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 19 Nov 2021 22:12:54 +0530 Subject: [PATCH 146/176] docs: Add architecture diagram --- docs/images/architecture.jpg | Bin 0 -> 168961 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/architecture.jpg diff --git a/docs/images/architecture.jpg b/docs/images/architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e03db7082bf4dfad39fe2e0e5719aa0aac73a5e6 GIT binary patch literal 168961 zcmeFZ2UL^Wwm%xTy?`PHl%^X5q{*g)4sNA)1B70bDhW080Ad3n5ZIJ}bftwP5TpbM z5V6q(1QL3Y5_*?j|IxkA-uvux&VBd3d*2;zymuC3FxHpMIe))7*UI|VnrnUEVejD= zzy&QeO*O!gBLKh=`XAtM0H6#w`op*K?f+4FIdorq?fgGjimc=FwxP=!zH4o<2+e^uJgR-vXFU z9eaK9^U)*RfFGES9A!Fk_z}SMjq1@O-wWW^a`MEf)5nh;{o%+N`uF!P0KOp~`QZe^ ziPLB4A2I-r{BZQx@e?OcF`IpDo>TwoxGoAzoR2?&;{^$A6$B z(7)AUqKA?GHN&x!CyyTc;V9tfcYLOcKgJ$sz9e=VY+&daSKQGlA$cEu0?5KG{_35P z?c?~a(Xp(O<&&&;?0KGmyxu>xTRH3poTG#Mz;u)ea0@W|;&-rrSN4P5cpZ-SjV~Ncf7|A0S`Ml7W5$T){${+0LMf%4mqS0!jB8RTV^bE=OoPyi zp~9Aw>)dDG)3f`cz3kAh@Xp#;sar4a7%=3?b0RT7I5*AASzq{Td!6n2KrFn7tl-t0 zy2mcHJ}rN2{bADl`KOM<$$WtLm@rnso1xGbBp?3IFPeRx*O|ouW@D z%Nae&$d|r~qT9Xv__f-5L4TlMdL;8us1Q$9a@_aIl{XCegUsV)mw}#_^UTy8o7V<_ z(JewbVQoA0-?aW6t$+8efBzEcqt*Yf2Z%Y>uiD@W)Xj_lo9iX_ebvcJaC{o=RVV~v z(u~W!l)8X#ZP7YV={~Zd%Jfirz=)elRkFWh0c;9BPDtp%?Bz*ViA)xpmW>x9`vlhQp4>>zJs4BMM1njKy z$fdGC{7y%J)TVRbWUHr6-oTUD)&p3Zs0X^Nl~5Q@$QqmyWe9mdUW|~BHOJL}WZgMD zW=)q~U5)}JS3f6V#F`Qf_dsnSaoy)4HlStM|0%=lL-Tc zv%|)#C8rjFUsdH+86%o^@i(N$(vUL3=z3m3dxmY_Nes zF{3U=)D4u`Ct9h|)KyL!2J<1x$y3z*0*4p(8XIoUQ0XO${ysp^Pe#>J=4tZEJc4Yzih<$tpl zOnB=J>(kHQ89oF+IA_-6t5l>P=kyF2bj_8w# zq_AFWczAv~w9e+oCazzxIDa#2_C8qV-It|~@Cx04F4+~sl82j@R`lPs4KLV=m;k$= z5;1h9xk?Rszu5ab#x~^dJO+DUo5Y);4+PjfVwV!1wCGSBI3>WdxOzdM43zun&(rbG zW~4s<#WmictC&i~&N>q$N!1gi&tfzitr0_RVoO_EoaEkbB0=(dcDttiyg9fRrVeBe z0o~w%_C2pdKtb+RVlN{qP+izR4)yN4uF@Ho~7)UMaEJq+nS+S9no)T4cP>8u8yA3gY&e15m|qkyX5MfJ{=RooeO1lf->dJut_F>QtzWzNZtKI=6RLk`yJkQih;Pj8x2QE?fMU64B4qR48@ZJI@f z7IlPyKCL%b)FQYGikngMX=$q5%P~`7f-CP%`X)a>SNDENe4D7P^Wv#wQ;(Bg^Mm0M z{e=)WVt$PuMYtBN9)Q^TLOqjWS$(NbuiFo$0J=E5_HeeBpr;Cnb8$m#3k zc_{3JTHAq)kc^yF0*o&r;+3Y8td-fF8^jMWm zsg%V_zG`u+V6``KNm&uMbo03x8>j}UD1{61Sf+s>VDP>rd=t*e(&96s;Su~(jM=Kr z;t(T~gun!HQ@;nI&%=ih=Lg+~Q5&aZnG;mU$G?2IK3w0Eozv0YxPxSvJZUHT2s|qSI!_gvWL74j#Ru`N9Z%=56sG;+^}+S1O;fL zd8=5dVDefpj@x5WYlfrH+GI7YD4{pgo?rVlC+~)WyJ=pgZTW!6@#~3~<(vhQ*(ay* z&l}KaN%R|{*Tn~RR%di7Ze`~VcTa9Qy@P(eJ_^Wlx?hb5uqj}v( zHW=CM7ZWSOB}yz26*tx2+%3D{4p&^MJE=Id-)4;<@&4cFIky|ccNneMJE;s8HeW#7`c(<)G=G`16T>%KVnsf`k>T1=qB6;N@p?xa z7YS|anKVCSAMA{r%$X&`jFjQQ%jOJ*@0}_K3oa8(5AsDl$gx#U;*zx4>CVgyaBX{c zovqAS<8Zg^pDWnV1s$zwS+zz3rg4yt0%im1ojPl|?kl|wcv&O8GF5lMh<3!~`d*1@ z5tgTe5;{fjODQqXa!bO+Zin@$oChZ+tb@By=KTdNJQJ3BjU$V$!!& z^U>T*WfTP52ajY}S!bDRJtuIz^W)a#^%&A?a^nn(CiAQCe9AOPE-`m?mqW%{)W&jF z!Hd7gxW7c!K-EsM$fQLmb{3fix_ZfdDq+-gB<7Lak1iX^a@B_+F8n0#$etXkorn<$fX~F^f+Y!nBW8zP#=v&|tug z5e&ySzY3q_Is|My&kaBsA5WPBF@P4s954l#+=_1F@LG_Nq;rV6OHy~Fw zxWQT8wQJr^8=kV8Zsn+qWu2MhtJWavV6lm(V%yb-<`ZhNZBXx`v%@bfrAG-p@+{4Z z{p~ONpY>)MDi&|F(DEELdOq;lyM!oL8ZD`ML1bvG3D&?fgc7%++rD$kP~TE0h!csM zJEN_wk?@rY(V^&V=KLhKqy|T(L&Jv+qXQOY%loc}ynZoBUWBX1dJ};GGx}~F{`%Bm zTjN5XJ0bOGb@sF6BIW|U`$ag@ybMd=OX;GzuhyEW8oQCRO+gCo*^vJm4f|9nmNSHoXSWM`H- zW~Fg&*zH<1j*ZYQ>@$Di`es4#^WxPGr6b=BKen90)T-zIiQ02IHNeE;^#k9{(;_!KcLQgvq#Wf8m7B+;UDPTuFO%MHH;)+qp)a}dcc^6|=#luw?st`ch%p@r{43ITcE73oLyOVb{f6|N92oQFJGsAh z&F@Hoe7bbsh77F$36lhDz_Ku4;5_6NCx ze-XJ~k$#QbcNNByfBhByf%I$S{;$c^4(ey6E39u+EI)or`1=J$#csr!AtvLy54D3P z-^6zQsTh*p4jHw^bXUKLq5en3{sT}$%tJaT<9E<>`ET4j|Iq~`-G%>W#B8$uC1~WI zK>w3s^zi;`7a$nxT9b#rdRi#AzEe&2^e?Nyie2Q|A7XUSeg) z@^@=*2LH#!WPf$xpMolV_w+mH|Fqb_x48WSXcXO3rP>~Pc;5^1YdUbuHFp8k zJPb6CL2%=;WC!7-LqNrMDqM8N=gb@KE$RtQOzDqh?#)bPBDK45BZ6b&8K&QEwi~;i z8OXBno}Hz4&;O(Y`E3kR|20GKGvC38n?#3k8sZROwe{1VmHsZ1@SB`<>dqm+<~O;u zkskWhyXQZAPhk9(a`<~ev0V1MRNZkCsA@ZV*MNkCqDW2+#h}hCkfaS(R#)pwqiAUt z6qh)66slz#mLk@c$&s>)z4xUV7jL!>bXZ+l@?<99;Avl}X*x7HqRPr#4_2{;*W?DS zU`%}LgSNOl+JU}t4zC(?@}@$33|b|lts(6uf;jBdRn-rB2bg_&-fz`#O0k5STl{%@ zf}Z!sMu7O_-{*d=Qrx}uU83OGFY+ghw$SG%PH=X1q|D;;V!l+!&7_OyT7z6NoH=Un z!?UJ?G@ErC_C;D-&%V(x;cC{F6(48Jt*c!Lb*?u^Cloe~Aa6vEMq;6SDs$Q6)#L(O z?xNE?t)Jc&nGdiqL^njtET#{-xRiBD^_lTyTk`qna^D%Qhs1WfSreSJ(JjL@t8WbJ z{nR}cd$YvAR?I-EF&JowzZsAm-fnZrX{Bj#%TmPiaj7pfqBBp{E=A@*=*F)N_|F;! zrT%Nn7-p=SeE2m5678D4g5RVDO;yidFx!0?Twv}R=H&k-**;mtC|S+1lsCHn7hPer^BFJh)p{XQ zl-_}Lp&o5CFeyT0sgJ2IQPDN4YLM7T`K71j`rU@(4EA5M>eubkw(LSX)rNE6JQ);N zl}WD26RVe0N%{DZ`W&|t(XW!u>1)le^{R;))y*Q!o6KhfC%>hFX48?i>`qR53PrX_ zT4fvAZdVxfJwCdEdW5sDSAhp-q1Y=zvjTQrb`J9B#+r{26f&2dHEq1+jP;@)Hr$!7 zH{R46BVBAs=##&%Bd2*S5tlf&mLDO=mft1^`K17tzbOW89SyRdk%)5g+hKyd^d$#1 zu1itXQJ)%T1PK?FC3St?T}~$|+$E(K#HjOZ!Psa1}ZDTM+9TKP*1iAE}LL9zv#M8aay`U{(q z=N61j)EGNETAfhUzF*{1@+L3kbm~z-^Rxn2^t_t(dykr8%QRVhJEN*q@NnX$YaooG zEBfw%I80SUb?Vy7Op&ni5rw6kdRlTv3xxee`i+Ts+9)%2Saed<4>XiBUZoo4+H>ON z=l(?M=xYBsHoMR`OV^BNcQVCW|N0!ijfKfqOJo}pTlg+6o$flzSnN=hdK+2?NBUCDW}(;8`3b1jSyg26caV)8WBxi|Q05&4icv7gVS(mvA znI32{KH8s3@Dd$b{9HReVs!%j%|T{#27# zdZOw!yg_X6DY1zBzL!4;coXCOVCGgcHwIeU)b)d3k^Zqmz`f6la_bc-bLDB%iE)kz zvaa1@^T>sGYd&pMTW+W5gXZ!LH&qo_d>9TVcncqGy{McoGpT;BW!^|uNhBb<+We-6 zR9bYw$(dEnsaD-w%{Z*#Hy5RlKo!>9NKm3Gr8aoUFCeDGChc$#cnmAa4# zdJiK+6LYse%h2F+(vuzhVYS6Ynq9F$h*Vw@?YpiDW@lGhM=e-Si47?Tio&ySH&|Wy zhBJD7T14Z2=-fA}7#5wkk8xne3Od`!o2HTPn~mE!j>%RO2 z;_xh9L@zP!gbE>N8Z*W_qe3fGS7ggjQLl|@Gu-aYCA1{Ev3i?Fpu28cq#4XIKptPm zK{XYDS*(rC53(UkE^aQtii13zCjtfY*^6Y?@Y2VI=A_@bH2)}yX1_@Ngf zC;3Eu1Ldv-TBP}pXWXT@I#gOpj)SGUoH|}uxxcRkO;OmcKd$2dlD>Y1I+bBb zm{}DC7)k9G`nIUGd5AdloZHEWjkhZ!Cc&uP-cB%~u4eo}{9p|?C?7`~WdiEM)csK9 z>A`PWB4^a_1Mbq{FSZqa&_W>PA}+VLdAsCCOKXIu&laeT%D4GK9jw7#omOFA66ZKm zwq2_}?&Qx`^d~99NP}a`js^_|g{s!f6@g$GBR`i(oS-1O(C@vUKmzn(q@x@v;z4wZ z)yk*lr~Q%XEPB&(H-#72Vk*@7xb^xt!qe2!4hS;vRd%Za`TqWmCp3olL~Y1)q2F+# zlKH6{IJ^S}77N6S8>;dJgNM8RwtQ=!FRY9Y6R0w|$dRg|x05 zdA~eaRNn&vgInP|Df#*N$TT)tt|LV$K9!2L-6FZ&&c4O{@ao#9G}DE8a`8~1&u5-a zt?Q{+9;Y*#810b;4v-yk!()JMWqWexu@JJpX z$vLB6DDq6zWRtvu+Ma`R z-`4_U>Ggx!W!r}TU>5aZV4)r%)D>bgcL+Gaab`+UaYs?@pUk%Y_v9+40xFHI2-FJg zXNxI$ge=Xx*p_C}A{>W11k~wA9ZVf?>2LHLOfCE8&FQpF+a%9W4`#fBL|HTGHJZCv6%SAOZF1mqT5jZ$1NtOHr(dQ5oW4@wI+>x+?cz5ivOj!x#V)6Bb@vS^b z=)e(e_B8wf5hB5S;&bNbu#BLDvVBG#S;Y}nrpw4N*{Qld4?~Ht3W<&w0KmlT@8SM@ z^s`;s*?GCzj=jYow>Pzy`z(vpmlY~B+}PM5POdCG zR(6)b3EmpLdo1xK^Vu2!s%lk|YIq>n-bj=<>(Wh_QN#H3Vo3`em21(kPix*|UoiMir4Lp{?r|)Y?^& z7X%j8#hdnovh7~rFOucavc_5d`Qa3`yuL@*NK(z-+Sdl)uC_zkz6~B_aaX9_DT%zW z+-UD~d+$@4G;TY|}h4R?6W=RU$kgC^k(Y!(uWKUNr< zelt<_%5Z^-wJCXUr6D2r5ue4Qfdlr+eSw0Gy)jzAt5V|@UCH?VJfvWb_eIeBXlDbD z3j$cD?!VAJ&IhhyAq%Cn@;&aQB4*?m?4^k)^J0!R$VpDd|ld|a4|Lzr=ez|Va zM86Nq3tCE1Xw~E#y0d?0x|4R)30)LyWT1T3f8M%VR>u9ta4sAVt{;CS^8wc@H9%}< zuU|`bHE$}Aqh?wQPR|G@kU;NC5FBbF-O(9Npk?Jt4|;oxaqtN>T+!(dMzfLSyJ7Mk zlBqEp&8x{GEJBNScIL;YL_f>) zga^YF4~gT=wQUc-=-jLhcrPmdIBU?y$7g68$SAz0TBcZ_?H(7=r72EYDS&Y|Q6=It zI@lYyMA63V4jU3{Z|X#R<=wj(Ofg-lp>}wux6Z5T%1%jz0YMi*D9x*9<4G2jXd@Nc zEVilg8iR56hP-!Tj7mvsOZJUBlaem`>+f`d3slb-_x~d$-nt*&24b4dlvYMH2SF{qI>Ge2f z=xzb|;JfS5Sb__}-}qF@LF@?hiMOX7uv!^3#u~`P4swf2Vd{qQAHWcBp<4gjKMy|t zh5EU(W}wnzpQC(-66g~a%S)^lWRd7}3Z*T%1p=n_Wn~4hkIAFAqSk)1sU$?5q(+J5NHOp4#|}p!Gfwpu#i^45V+&yr$iwT(%XOP#l-%)(P$0<2t*5)wB2^dcZ4+_J4^saMgabhDY=Nc(I5k@Nr6 zQF%2lFE0y&jE>H@aV<201FZ59cA28bRH(A3qO$eN{?8o8Dnl|Uhk!RB2U9Ug~( zTi8QD&>>(iVY@wx>%9B2`aJ;S{k6LmbBn~+1Fqg6Alm1=#wZ38(W%Lk)YwhT$Km%H zgJ{p44!q<7_J11L8lFMtEk?*K@|Exlc^qDY!>#3>E}(A){fj{zgVN+^@(xeFXN25||q}W~Szfm1
^flchDhe+ne#Z6^bU5{VT;CW`)M-`fb7}ow!8lY&%SB z0ct2GU65v6k2M~yz0%w(2e#@Acm8RB=%qJkYa5|VhHT=RJX(>ZYl4@&1siSmz_^daWIAME6$@q9h*wm zGl_6ft<`8_9%_xKh#v5q^6d>jv%<@2>dAvXEKivnMSU%T>*Z1WV#?=S?PmFc$l2iZ zb6!cghM~sG1gNNi)y~q@Tk(Zl&puFEZC??{x~}W4E1uWOqM{KlafH5f93i| zTAG(9@iV)$eLokImoF^Y7`Bc}((#zBf*~Bh1Dtm&&R{+qi&FI<+^mn7?kTI(8#UyUObsw?mLif|{ z@_~iVNN|xZW6~5dOQJ=g^hGnjNPtu3yZ7WzbrxA}x^mg$%(7020V-38K_rJ2*Au3Y^Ut!a&QJ`y8xL46X)?8%jt5#d_^go{d-#Q?5@ggCzBs1fM?i*G z<|0sLv@|ESaV66>4h&o@79#lomfRA}Z*4}CTi3IUPask*p?tc8MYZ553SMWa7LI|; z(*}sCHSR&HY~(}cs|hqg6IX~WsltXM z$TmcV0yqtR1dvC+(ujPugFvQbjU{Fn9s-ufB+L;Agq%NC;9B&lYj$?X8~rG|%MtHE z`RR?}5%0M#8$UaECi!(D7c=d7rRmG%c7M`W{U~zL(Z%uu(`CSMhnENZVQeq#G5Ha3 zbwZFhu?2N{#%2@@4$8-_TJRJw*PwnSdv?{W1UB8F6&c!;7Zlz zLukeG@;A9mZKy-QeurA@o!Z5yardg@&s{6@$qUOc^kh}vLMWt#Sgm`hbfdHyJ43zX zS&_@yn67X@G)M$I9^Vz}6b^AGsSPN||5$08?CJmsb|IqgR+Y%+#m4!lY^ZcgzgiLd zM2jA^7@^$XK3P2TctXxE^!~az8H@eJdB|w}@~~}1Ue(H-CPVC}AHWVS;}m1Ksh%x_tn*VE5| zp;SsAT@Umg(7RGD1YBb7`V_;DYgp`&9uinEK{Vp75f%5=8#D?dVq9Qjt39N-G48LF zA`@xe@&XAj|J-c$7E#jiFbr4qhoG{dd5}&XAsZh-fLS(iG=LZH1m9Eo`LUm=kxwkp*W5bdZs~svp2SF^Q!KOEy5}45kZjSFhStoQeOj z(M`^-5RsebYxxGdo;2^rO3qb$lV^4-)Z4`iXlsIjV+1MsKzgE#GVs$0_8d9oN7L3v zT)K26OQd>iiNv7w)O@MD=R&k{22R2}x#trlPV!l>Yhkf-!|tjuM5W1z<=s zsP}oa2T0_Da`97JX-n5uXs zZWa^Sx(inD5a4t-kqHczRe@)bWTiBYuy(ZOOdp_}7d0`7J7>ex8C_;Z(1RsxMdt`_ zsvJorB06ax4rC8m2FmT$-GoAPlI)`AplZFu1RBV}R~ z%u3SUO@CgDtY&eCh=Fue9GDb>wm&^I%PUr875t2Ilo*3DwCE8}v?`0VEj^i#l=R>h zCIY2MV@OHJD6q{7%uEK$_l%2;JC?Ni^#of}+4g^^foj!7PbA+WO-b~psLtODhN{)k ziiwLeD<;upknvFKuM0bhc3XTT*;Y10t!*HVLPS$!%i29=5O9m>0@DWfZJSSy$&gn(u^poKN#ERM%K6&k|eI^H&E&&zJ~$ zR4to)yze&Z$UW~l7nR4yUt%ZYK^QVV1Y7_JReo!AdHq+nUNISSR@YrV_)8*S@s z4HhOq+=^2jxj4HqE6zkIy~#LoFrph}18nZ*0UKh0;a9?{7Nzjs@@!qMYBlCq*Q6aQ z(=xN7goGHA+nnBKMGdndG;opKcr1JK+WOkMd~|N*;(5<1Y^FxrTcmDnrr>-_Hof2 z@S5?(myK=}r-MwY_%@KST^rB|8(_d_jVz=Mrqr4`vltw?%WmSr%KL6d~b=Cji87Wc{`C0 zBtfl!i);~-*i@Xx;HJ14J3B`PzZOrdNnBB3bxZ54=MdxjH8(tGgM^hwso_ZCN=RVP z(W@1OLi~xU>NwD%2T$ zUK2=7UK)L$XhY28nY!#NosXO632dyDoC=+&dp%L2=3*lH`H4N6LBzYApDjgLug}aU zUzfxcR|#Cb?xJeFJ_}zRj!xQsp_H=}<7wVih_J(?R7c<2dXwouP26%{zdR45eu^oJ zO<248enMlI;-cq8i%-HB%0QNsTRRn;^w;%0Om*Ex$`#e0-uG|4GX&=-75g}J+X&4h zWTOuxVfi`n_E0!&c09vh1?tl$1qq#$$-}vsk0;prr7DW-8sO#@40}Ge=yL{(SLyLR zZiikkE)w`K(CoMUb95)Pe%vS3c_60Ca!R($qBNZ+A0Y(n6q8GB_Istb zp#ayWSr3TKpS;nf)52JD&wIYOM?Ka&U8SGIPFd_s#UgTILRBEf70=;mqVW8O15dj- zrcMm04S5f65^}@p(y2DtWK~`cgC-&8nb9Dti?X=sN|Wl0P`!uZ0#9f4wl;x67X6`>XgYNW{WDErJq5|}|h7D_*Pn^tSf7ip#G7LHx#j(se>gFSu zyzpg(4!ojv`d%{-7oUr&Y#=6-m-VJMk1Ps1NTunRX!}Sb`ocI-FujCDuVdZ)JDUcO zk+SzGRG0E5Wqm>J*0X}fYFbUU>Ym%y(QC6t@n5ZCoy$ckUAVISNjKA-yY{=RN{^9j z*S0xvj-N*a`nOq(KTwKurnevqP~woHo0HHxLJB!%#<#-G7->~IUuq<|=^;+-P(&vV z9NW-#&BB%xLv18F)jl@v80bCUaHTKlaTR17iU)ncctWT`SMjwjrxeJ{r`*Dg z*&d3T)OucpQ<=|J=lA0fJr5OvfQ?p($W*XoX|SAnL4~eN%UA77TWt3$*u%t}eQdid zGYti+%u>>>dwNM&;&2(F=2?Ojp<(@Eb5d7|5T#0UQjf8SrZlS(^OQ8TQBAwx;XcLO zcAJx7N~DXIv)v5@i?plQa8!D}9LK`IJV{J~tTDZbQID8Fjp23%WL(k+{` zaiMs*TMDF#8q%5)^#Vt`Ypr1fZK+jH=aJp6h$O#^y{*u!#F2Y>wS1f`631Feccr9+ z(GnCAu%kr?{M8riO=N1McqyPhdc)38(?Z-+OFCTQ-M7^w5+*YG?Gvl5%0JDxMkDk1 zO5_Bu+*7r0gKiZ@UpJa@_lpHfg?$a9t?pj&`~tR3dOp#VO)0M{DG!4bEq^46Me2Xq zSHwVLRNd9}O$~ZaJvtg@*g`FjlB|Bl)*CDQT%lLE#1|#b0JDY0MqWt6* zVaCAT30gSzAP&Tg$*ktzP>~o2`zW%r9@V=bl{Sp$k2zDLx0Pw=UP9e!izAw*;j>Ls z*;A;qYHxhAHqw<8>@=5A5(91LEwWRidbz;qv!Lj5f)He^Ju=WvJy!KPAy_`Hkd?$- z$o57EU7(hQF%Y`AuZ@B&qUJl>ZD0d@8Ppytah9RdblEafD@k}CuZl}lbh-mV+cdUL zpW1HDkMJ&X8s<8Pw2_9XW{z&cjK_c4Z*(Rem~>4LeXGt|l?Mf4^NT5JueH+g;QcoD zz*x2kjSdJ-Zrq)?1M@Cz2=9NebSY^zIlXu2OJ*+9=lbG`I!zYS zosLCSZ*hKjR@U)n|77a;Uw(f3$Xo5_+xz;v^v5eFFm1uC=fCb`Znhr+n)K6le*CgQ zUxE7q0Fx}7ncJUcrq(`$EPHY(wJ1)m#8}QO8J{h5C>d8f=*%EQ`zcF`9s&j%iovZm zQ>xeM%+gem3o5i+W_G*ly|7~2bylZCz?FzTk+MOzWk1ema}QzRwmWDLLspM>VoF?k zdB5}q7{dYLn1-~_xBm=}4k+ej!!1&Y62@PJh~Dd-lx}^w9wj*(F^pgKwK@-klii=@ z@5CWSP+Qv+yiM4QBpyr|B5JJ!7fsGIv6v&PNJElcia~_HLEMz+S6rlS|J;3&p|y*j zAU-&lBLW112)7|0*z5DW*uV)vZkY=dRgk3S@AI{B31m%lW#=+6$?S;FW@rutMB%);N3zS&(4Pyr%*atTkVkwQCY!%tY zsXZT&|P=f`b4CFgo?{wGq7bBJFT$qj7oe3I2#YkPO5xdjT zv?5SYvHt;SkXED(c zX=RvYNG7MDgzVfrrO#>z541?3=V$TZdtzJI79{<|BXzqR2J>Th@KN&UwdS8bX>(CN z-6ZUOsrbZ~^+YSBzNxQ1IvoXra74S`Zx*uGV~gxeziFt{RLps`p|DDmbT&HHXa?BP zx6c4-uCox1eb;+E27=YF?A~y`YTpNL;&6U13nb8@B{Ppu71cWXX9#kE$wMv@M%e}- zN7K!lVr$kmqV{@LnpY^14MGhGhX9Eo1Bx!VD2$eGhVI^1l#_k!?{J6w3s2>&M&EY9 z)U&Bv<_zYzI{Jpc9}v=u6Uf7+O-e+(c+sL}x7^+;_t|_1X1q)pNO8nv@!UwumnI9IB26wDt-^@{FJL}OeA6i1+q7S>tV#F zmv!V?@mD~+>9ILtT@BW2^L8quSJ=1bQ2FUYB1Za?VrQkS678@aZnxrx3M2d;uT>n& zE=;_7E_85RT~s-~%yzYgIGD9+L|lVUSbQend<-vr+@EO|$n#2@v<0bOf|`-4yC=zV zwmzSzVw-j%hF8?UMKRGnHNPAgNdLCxJTh2#djFL3RFk&;=P`-+zuR0_3aJmQYflNX z?)lFwcK;Z4WK?f0uZEP@Zr*yj`+MeOd;q_+d4Q-Lx`__mxa6z;2yjCf060-Mf3nTG ziT=nJ{rwB-o`mPwF%!uw{9e)Pkv5A`uxGknW+v{qxC}>P(}!5DI(2SA(X%7Np=q33 zA8c=s#nKGLVhHXL7bd7|soKUh>4cYcwjE8EfpEREO#` z5Wavb`iKe~U$UN1q4}$T)Yz$$Da)Ub84DJ`Zn=a42QU6WDEr;$IZXo<>zoi16t!Jp z^J~+A)e!^wmgpeEX>vv-XFBXvAW#jI9ojG&`$lp}@(II7So%$w z7wJm)iH`pMj}gUEdyVsLd7nG2*44KA2R=^m`&Mbz~S# zH6(cMaf^orZrV-fKc{FfBb9h@7`!H%4wWeo?hC!GUXod-Fw<<;02ahB1*E$Aw zMq)cVaN@bIdB!r5+w?5@KL}X}2QAkKrO;0u`0ZP7LH z3U1!^OOF+o;l>7<7ln9%nV6VveF+QBV;}9$E2e#VyS8My;3u@!ZaOnPnTO5x(T)W| zURPyFNjZ!H{cUl}$TvUVd=x)RpNX&Mn29{RiZ#!MH7v0V7>YtJ5j{UeFRM4lg655E zbD~Xf+-h}Rd-$&Rf_c|78oAoipHze6t%TonNxc#Pl0)^we4D9o>9@PLPOWlpZUlwM zu%9`{qe(2)T5rFwNq;Ugm+`iprqwa@PuXMiVga;%C^!g-)JdLy zG(V;@FuYy$^}a=|`^eXNL$=@m; zM_=Ip#SgF$t$Q)iiBe7S)ke_b@NN=*oFq$QswwhB&TxG#Zy}I4jepFoD!Ls|)2VuW zG24e%S2#}n>eQR-8B)Ia5yNCot4939(hn2{iGdUJSHFmO4Tim%k?hM&$?M#yQk!{i zFaW)uGILY_=Sc7x+*oP3$Rg;I6Fj&=aZPl3F>W4=wDJn7pKfuDYtrU*4Yn8$>^x2-;$O+ub<7j8YrhUt)?+y(%&~n|& zl1k$U&(9C`EnIVz+Qxd$0P*JYL|Fyu!=vZUAwy22VDP!z4(1JCmJro-Dw?cV2$L-2 z%h^gkwh>Y~!vGq{;9D|#oJ(;bg?!_sDIYdJe|j8icJ5pdl41e^4k-#W!}CKB0wmq@ zgSzGAGubJj%CYLM#UQ6wc63%bGkAc=WWdqM}^5jTSw& zWnK7rNHib~qHUL(myI*yGYwP;%!s_`d-{{ON6DIxcai>$d)54d97J}`*RYIH5D?$1 zG`X9*I=!Z9tnQI2SO=Vr%Fpi_nSO)=-J_8B@ z0wM$mRfi^BAcc+^dKCf$2*n0MXo3RL6{I8~ASFP6z=-tTLN8K63B7mbJ38|`gHxXO zd;j3pT6VR@s28rZOy&il{ zktecQ8KR6d%1Tme%)EBOjs9#Jn$7H^Gn2uhG9JR%YbUrmp?~-4RY>&rF3NV&SHdC% z6MOLS;gR$RJ5pATwtmV>sAMmZ<5Kgxt^;KXP0;r+$tYUfZ5`x}SI^Pb<#m_Uac~;b z^)|_xR91#el%MGc)SV^AUTRq5(5zVqF^;7|x>uU_qFXHjmC}P-GScl!EtU=FThXxv zVLrAN-b7kC=hW3$1k0kNbMuX+4W_9E_W*%w_$;d0Pw_x1X^u{JRu-13tPG5cyBp2b zRB-S=W5PYEuRU;}CO$h;H$9cG_Xk?ztNcNJx`!dYS~B(zqM#r?dNfCp z^E2A$_cn;$IsVL;W;mXl@jlKwDA{?wBg;cDxnSWh1_o2u8xSdmfxUF|3V)f z$=U>XBQNd7d-T%&dkVC#9ThR!y7a_08|Dl8MIehM$S^@ePTSe|+s>+2x^D7!5^T{3 z*Wv(J+DH&CD;&k12rQB28~andKy{=9aM|+y2w*#Q)yC zi2u8K{Y82)osb1j9Z2>6}qMLn@ICRoZTIfWbGuGkMuju~Z9sf;@pd_Avn z1=7*E{%Mg_=vH=3aBj?zHOP=;qXnehv1bEW}@fnJ_g3Fw!WNMLY#mA@jrF`>ukYr;gxV1FZ%eVBqAJbyO`BK5J)<|tg zeA*bmP-9=VA4D3Htn{k=^eY{=Yi?$rhJmyVZfP`hoEzI@epO7gMpV|NHL6>Qk|Rcu zKXrr(=Qk3a3%vk^59XE_@J1ki7~GaJ0DUjv%60b-xZq|SxUTj1GwfXV&-T0c{NZ8n zdoFWe=}D7Fon~-w51Pq z#b02hU%-}sJ5-Ha<_=JwzRYz3T@mJUl_&o+)jh=ck4^qc=jgxae`>+>+d>MFajiBx zir=J;*ic2RFBjn7PUbHi$onmP3Hv>K0nPo%N{=x_kDaa7Y`y!jaQDcOAumJf4^3LB zeJ5n+VQQB|><|OkDq@2gs{nrj=Tb;-5Rf_(l7H{-t@P_B{NMFk!PsQ@-1*z{@1|Vt zZJ%U&ZRT=T`uPx5*x3B4EF&ZW6SoHGTqll3FW{`KWnIJ2+xj;;h8W-r2?ri;tzSv& z2be5*Le_hm5iFIP8?oO-((>RHNzL}LbrzcN!>n@hTx-?bRL6}lWMlTgORX5H0Vn$2 z~S#kQT!svLRb$o6f!{lS*3W&&SJL1H{_*YM56 z)Uv9%$;V7gKZXroi>zxhz;#pMZxeB8MnUW!d|S8M5U8JBFn9Pf3oKaia-g30{Pgwp z=%9h%BqlkH{s{?YFjFgJNxOwTX(r%TI@Ifv(>D*q>kzH$d$-neuEW-p}} zQ0Q@+kY&Mfl~kF`hkA_bx5sDeyFLLd0m^{^>N_uZ7!?QztmNNcKi((?A?4ZWA+S@~aQ zbT62V(9^>MaVSBk)U6vV??chzn}&L6BKaLAmUV^kY&BPq)lqd!cCed_ky(q2M*Wks zPyk=359Gz{h>K`0gUPSXRhvxJI7Vq$6dGPFPMdu_rLSSAsJeP?_|9vA2a}*V&B)D)KPw7f2fu>AbauL z*>+>I1o&7ati~5#ZxOIg@V%)XtH#vfmj9L=E0&1gnaRRAjqng#ZdB*S=XrXY$<2UTWJSjVcjnWa{Ii21Q z0k$}^Mu^_G8^!Q>s;D%7ndHNq+{@od=w?E8JoMk2%23psI1%cNg56NPPDr|Y#n`#) z;t`qS+Vs3(hG(ypr>4DpWu^;HkeFQ=yd+aWcsH62i`Ve=^)*v;#>U5As-3kR&v?ue z*4V9W)SVSaFB=qLCYw=ZQD)uc6CvA~y%XY6sFjun?V9iyM2ukqe#&|xbqS1cb8;ny z1_xCm;_B+!UhIK*ZrvEZ+kGHG2{~w7(?NC8;&<_~;z*@N+fi7395)06WC8d34{&8ChdcoE8=>wYJPP0N=53o5jf=sGKF@6+iDD0DXOl`E;ds_ z%d{&oLi45(j%E+jaf%;=gU<9d1}gJ-y4Fq;TU1>pp>~;T*Vqqx4n#k=_}?$3=vo73 z4I3i0E5>^`7R~Nx`#HgDNwTy<>F7oEVB=*`{!r__?T<`OcJvZK}@>0U`*GvO7hjjRu7@@Q~W|YjPPSqPBBdbl!^W-)*;2`TjFK{&ioWhwbLyO< zXRkY2$Q|hAJ_AAL$M)5;f+lIOaT%@Wde;sj$@iW^XK%!_Cubf{$C7l%<|H2}QKKUA zRXys%-G-xxCe&3tNqJ1`X^&&nxHKM5Z|^6G-C0bS(lhStav?pCl<1V7xRdy>!3z=l zN+pk8*K_4EjshdgW~jaC zmTB8O{Ji~K#aM!Cr?)9bl`sl72f9Mk%SUH-Xh85XLtCpeX<>;#;JYH5Y^I53=s%2l zP-c^2r(;Z>JCl`(f4pik6|j+2(7LmyZ9+4k< zzpuzv>xwrToLlVCP~ObDpWoZ-;VQ_%^EzC4#^J8CJXP71SfMJSu;}~DiF2p4`B(YPTglEHOf=yLk?R z)NmA=6_UJOIvFiQtX_weeV9;56>SU$GBn|9Nmbl9+%sp(c;iQtGVg{t-%Lsoi)PWq z)}4bh0`|6XH#@5HwRrY~-eT$6h@u(Ycza4=Sa#p0P|G3mLKSbwt{}&UG(+JG|;nl#LW5 z!AP=@>2%LA=|bvC1)ty*#Op~jCiX-DuJv#3QwGG+w$!nLIo`U@q1}ySJuNv*j4IjR zh|~<#Cofue8NKh}FTfP1r?Dti&oxa<&C0x8SM(!GJ|xzNO0T{ipMO2MZHZ5+YDWo< z@F~fi`!tfPd(gKP+;KtCQxf0p@8M7}JhmHORQ0@X2yUn|Jvo*o6TQTc${D!q49_~8 zM_120e_PH*p(&JcIV~S(8Qj~`1!v0u zK?_R}V|S^inzxrjnY3i6(q%sX+*AwyFMYaS_eUEVkI0le(!XL)zYM~A->@3@SBHMu ztWQa1E7CvBIG^0`j##Wa(!b563*D5W3wb3u`6+D;A1#z!m%E|n-GMa=GPeDJ#HmYr z!;5Xu+W~hWSBR8OVn_PVqQlESSHR_rCVPa z{IR1kr~2)qR~nuowhBW2^VqAoHT!&3kVnUKFMoCKZx_eo6M6<(wSufrT6$IUUGVYV zU~^NWSIzL!!Mjx2O9FN>7|57+^~AQRuYB|-3bi2F31}!TsS%SXz%hD*w!qS{mkx>U zmE-@2qgk3^d6R22ct$D-CQ|~~x5FZ7o?2aGsW5P{$qJPoqPa#D)7F%sW4Z#-|QZz#7Xex7W z+LP!y1Q(H)B0l*Iskhl@yU1{)ne~j_6i^`xa-CPaYLDj-+x7d z#f*WxJop4{g!45bIVA^&FXhZ-?=1c?SLic84bZy5|3G?t;P}2AI!PPFwhH zP-Qek`=oRDO7iNWjJd=}-M@{bS_Juznp@+7w zxE{K)IUgOOUDNMkIW56CZRp1=LZ?N)Vhreco*}sB46R_ z#|sbtcrgt*{o?*=&U=oXAq!g?d2C^g6HohabAkf%uex;fWncYJs%8<{43}GU#YZ>d zfKS>yjB7K#GM1}bo>1er*uPFv`lpv(_wRS^Ym7MPY)-ZS?rY{#ms3N-*zt@ zu*-Vi$lqxkPzB4jy&Gz_{ge56GA>ad6UjjKyMofV-*N6zMsz{f?0E*pP&1=V#CjMK zzLEOQx7M0b_cp_iPb5^?9aTg_l~jmXiQL?Lkw1_Dt|R4Tbc%PPGPI>3)5MxyQ)yMR z*4;Xm-9D%dSh=TFCWlC1^Vb-!2cYTYR@bHp{Pu@`5O(;B41>?#47z{+>HluT{;y`7 zJXYM4)VT2`-rlp^M8JM-ZsiO}3kucDiLssXWz_bGl55OCCQ_jQ!x8X_+c`?_PoZbO zL^`1P2&!?mq7fTZ=)_@Y~Xow2_8>f2vwPiW$R zw$uU-eMeppSa?APQTh9)GoZH;oi42M3GDg;1s{%F6hGN~x!QZ!7-h6?UgdN3&VM-D zlbuTjN0{M-w$8L*hRvZiadwVt-JSV{{JgOB>_~7uo~;C`ov~al^6jXD=aih*+g;n2 zT?T{>Gr@;4CqP;?ud*FA+w%jjS~y2D5L)bT%M>$)#i$41iy+XBI`Kj=JQROL*j1oke=? zQ82PZ+f(Vl?$peAOIzMCNq}9$?*LosUb=sQsc}|-)=5e0GMF(JZw`hR0EsrS5`I`I zm3Kjy5%^l#N@UT(&qKnW#EapZ)2`h(X&)4QcZoh*v*>zYyod2k=Hj5l#v;L?P`CVo z^oy#Jsi$zuINZsJrv^944&CL?eYZ14#A#bhydvQUu}M-dql@}ZneuE##vB^jA)@!o z61@?wKN`J@eq-#^=KJDc&^Ep6Mjfb&=|fgFO1jCH39*8)E5#3MI?-mLbF3}DJ*%ox zjlP@LGr4!llA4!!DR_Cy>L*Y;A4DXkuXWlGU zv_}l0-QcVS<1jgRJRGzXuIlC*4kKlS*`@M+9O5X?mT`)=4Yr*!x2l|sowXfAwE}>M z!orf8==+ES9&Gf%#R>@=pI%yNDMynR1ahwG~vrXbAxB;qxK^PoI%G(T|&J0Q}zk=^%>qGRLy}h>$f<`^R(MTxr4vm^%%IM&* zm}SG`Eg&klFN#ddHD(0`?>0EKImtY0SWmwGE1gTRjU2gg+Bm(U;Y5W1tlx2IDG*2( zQms(7+mI=QB6STYE0MI);rUpEG~R{MQr?4*PSUU`>Yd)ScZ?6-G{9Zz_cjWE4JGl! z#>EHCynK&3XV!w=w>33+d`O0$!jt322jcqSs5>1I5V%B2 z`m6m?aUTMei5{}+E@LKn>^9cGuT7N0syZ8-UU?~eFUd}MF)%JqjC?sP{oTt9X7vpu zdp2a^d2#qF`&Z4Hbw7+ev{eaQG>5!Ts;hL^UBG#Ur|S-{%;uj(iRXPdcRhTbela;7 z_Z`y%`zR?Ze@uC*D0y)~%Ie&+xy|WfHRp2LVbY?#wi}8$d`w>pm}8B70f1BMWfOv$ z{bXFzRR!Zn{Z*Uthvkyb?2{gM(B1OTBAtnuDzxl((y~u0p4>b`)Ryso5=^665*}x} zHk`)g25sJ{<93}?hI0$7G(28PF?HWlTU)sJ(d{H!aWVd>XNgfpT4@((op_PQcJO$* zKgTvotdiuSU^46FFC;_&7WiYNWDe6jtB2z^mGV?2(C(?`5FzETLQt*2ZB z1=E|2V0p&O@ZH@nV~C#m3)pT#hf}5rk?otoP28Y(=JC$5=Y>qM{i54WlwNchRL^FR zeXhMe4auHJG%9z?jp*(CW%y}bvnyWvOwgzpdXH*Zz**EiY;VdSJ@Voce5RL`Pg4)PrcZ>1sibPv zvFAbiBmhjkh1it=4|onqKI=Ym;HHUu(U|cgNe&Cg)B;E+*=!q6ujl+-c(QiaTiPVG zTriQ`$hMSG`ZV0G;>3gQP!;vy>-|h@f-_0F7wfpIf2HHohp)kRLSIe$7P!WFVCF|1 zjhxf*h^MlYGY*%UOsn>|Z;sk#1ZOW}8lus$X+-&0>gD>Oi9_E;44_=)!U)*(= zLGgtdJI49uQ{|4^0h@+bLE~XTlt6M=@Zy~^?M&`GZ+MKrx+r_ttv}(!{&BU@a6=RP zLGn!RBCO@|cCmDyOGJJ9)yjRoRiXO(!L|ow(nk-Y2WfZ~lHlSgY>*pnAA`9Mz&$V+~BlBd*34^pZ+M>wDTcfcVuSj zdB;M4|0*qF!Ss;lkHSwniO11t@mxpiKmAcbO8()w#c-Q{kot>cDfsRBAN8O%t15Tg zRX1~frDK?;`#<%(jSr~O&gMo8ItijzOV&bLxe5aD&Z^^L=T=Mnc$`-82};6#Z=%_l zplyPwF`ub2snv}2ume4O5yee}dfK^;NR16R`RkH9N$OmbW`r{COM6tq!QVFY; zU1abe*X3m8Y)*m2ZzfGYwuaU=Z0pD>%zS&rIFBfrP%=uO^Ea!mgI@y_IUJ-_@h5r;CX*%1e!(bDSvJ!$4_NK z#RC*0GSzn5*#Ev)qRm^uZH`6$6*nS7QOt^vu zFGNuOQ~35Tdpml!-q+E}e}%sN`rBUxrT-y>^(j^vGIzvVCL8eNx?Q{~IBi$T+tNus zy{^q<6h84vdHN}h&h@#Tp!lHPL-eK`DJ;-xWo|B}2uS0V;1g%;J>3hQ)q!(p>bZ#N za&Q^HQ;YP3DtQZlgh~U73HtR1A+)n15WJm5cQ$LwVn$4=?VftPItFZ+d=0G)U(HT) z?OF|AMAeqFjVl&wy@`)5(e!@)UA6lFUMDZUUhrBzPQdsIC?D9vn~&sn$VHp#boOXc zU~AnkMf3#t)Sub+wG~oXHsz8R=X7lmRvOvNIa$)W-VcZ!+#k*uwt4dzsgF)O=;qQU zu5F4fm)CtWs9Fea<@2g@@|(@++GZLEG*a8+YsA!Tx)O6{T~VnkRr@OS_g=%~GPX@4 z=&EP-FSSJ&e=6!w!Z#LOejVzp_bc5ysuC5bHHoWaSvuA{q^RibL7l%xn~FmZTZqS* z*6|WbIt=H83iNxRiX6UI4s?IsOdIX4H}9wt(aZe4VQrC<`r2;f`{L|1p>{2U5?fBG z*@c~vOHB^lz5D_{VJ<1kzUm-zT<35=0!1bC14&E>!yjhbk4MLz{*F)<)M4t}$q{DN zcPVz9*{D&PG@B=J+mocDe_G{biyCY8$oV#gR6~<2va3tgHa^)N_Jp>T&z8*+Afe;j z=r*D4*7+o3^ckUN5X7*AA}Jh@I-0A|SW=j*g|@ehe6*^xl6J_WAK8Svht1pE-d>m9 zd1Uc=#Ot}v0;nf-&LJk5tKC(4JCD*7Hmt>Qp&AN${+f>eGiSM+@0LBUL z?O1)=k@SJpGsM!5Kkt@O-vyvm!I6?p`&>GLRovuq9G^hK6S}T4$6S$S@{4^QBmVWZ z>qXFZ*ijAgId3cs1a zmm;DjnhVUYIeHY5p#5{Hvv+9aY*;4a4h9AS6Fq%rDo#XQ;q7!VJZ8{l%^3FmbtXY` zPvVg9@|~XIJO^>tPGv!p@(rG7N{65>YgSh8Dz=J;q^}HZh14lfbNqQ9@Os886m!Vb zY-kuefnf>rhyCf^rjGBSclAd_`X;hOwpe#xPd-sjcebs5=%Ghu@-}TdopdL6)rl69pS|ThAi!e%WRzh%Q$;>i1!T+sHJViRP8B&*_hR7F$;_ow zr<+}Ue{p=W5jKuWAXaiU)9i96ZsHf)&Q&luu&dqO1a4tY9}%N4kof?p}lCV@*GnrrHm)(O1Y~dPL1Iy)tP(p1(&6 z?BDoiw#b)2)7%9=Y_jh3mQaqp7Y*A=_q8l?sYulBJ=#X}$|MZGLecSt}KU{01(W5$BfktG&oy5{L?z!?dV0+%t}5LKddX*rBfy)<*) z)^;k@b~BRt1Jy$|f}>WL1hw>Fx>uh}Eg5uZRoT>x&M`wkxBG`Dcv9*j8W(2%wG{mR z^B-N^zuPRjc*KuB0f}~$X+fwQI+qx&A#Ro)}+JoPIb=WgjYxT8C1U$)l% z^yEKX9y_|l`r@l*U0ONZKuzIm^?on3%k!sOk6b>yICki-f4K82-46d+$`NMz_S%Qd zA3^x2(ZKQ8kPV3D!j&ieib9Z3XIXbagdL7gfn^;8)mO5Gf)%TT^g&&k`YcU#r}AFj z@AqIfX!1Z{My`Wg#R@H$rCDq(kX{p5HXdClc)N{V9}23C7E1(EG&{ghmOFId8+5)~ zf+sfHw3H1|`MvEQTtlj^rDHREG_fINbzvq!5zgMI;#W(eV)S4QQ3laOdAegUbiUn} z1c!T~@+w#j7WT>XC3fV_{(}| zW|#Hb&)frYF&Oo_yX1KxHNz9NIZCR^E++y^B)K1-SNf0sbF7E~+DwWl=ubw>HYo2xrT|*sjHzeuWy0G_0Bm zcQ@Y*D3<-GosVW>8wqt(ZtT$2U`VV`QoU2H3>`z0M4yH+Un8+Xv|W~6b1;NfXszDy z^~}sHd=@4u>U-W~>msStFx)hmR?cG-Jc7fObN{qAOklP@S7oof*$a2d$%Lq3?LN8P zti=Uog(D)Fz{<)?I^1uY0KLH3Gp~>SNLNqiyJjF#xaoP5WuCY)fJ=A#0WKdmt8+bU zIz~cSI~FWurpug61x&0~NpnS>?m}rlf;^G{*^^5yB^Tb1&cNDYM+I)5@t0OzPhBU< zONxB=#EL(3GAJ(b?ee3uj{x1Bryd0py_PtNGg>V&YV(ht zWz5W$(V^Xu!;=4!*X942r}^c5|9|7K7tU3 zbqzYb@0_nZonWJJXO0Z@h4fn#j+`BQnxQJkR2j44W5%O1!4!PDxCV}FoBKCjI-{32 zfOd%|?KN+aqZof{4sz5cKF(AqnP@5`hole6wqRVapA5_2T!4|ds(7GK-NsDf;sT>d z28D@2zeTiFaRcTUTuJ5gTF%=gP`DBtD&Bn1;w=`f%TikkAk-p0?9wiMLZZV1ExcvQ zu3xz32bXQe*9dQT+?j>(U&c0)P5Za_PLFg-kWKo{LWb*Z%6(Ya82E{k3sppIZkT5w zBo!MwHWUh~QFe0NeBCxB)1-RufIeOVRiy%-kthG7H zaSk!p3BD*kziU7px5$`5z79vegQ&`ZRrV8Lbq-~z?TIqy>*s#jtW#Y(?cHz@vS6-n zk1`TDiThiFsZ;NwzGxaX1GC`f#%gJK97&7XI@lUhE=rg+`0I~-YR7OWTHN@nZg z^Hv@Cj9}tta{@F!yk{Lp6w+~YcE^;41DIKpw&PFiY{rpZt2`Y^shM+;)tUESwlI1( ziMx_>osJuGgPFhL+!cp$Y&8<6CLzJqw6<$uM#O!u6%}SAJ_ln< zOaf6%tkdC4qAZ&B6Uho)33aU=k3$C63x4We;O$M2e^VFKSZjvm7i!YZ6E&@>kbIZV z(*eweW2{reMf=$B=;FDPFYb9ieiMHoil&`6_?``vb|EbtF_r3Wvhh+&OEar)+&;b> z!~;dX#E0v@nkbK6INmafRN%E$AeFF$Ppv=K1D$a~`_$jige|=IU{k|CYtK(8Y{SMg zYpJQvj6|wnHtaTalwJA0|L8UG3MjaK$f3fyv0o_o8Z*To+~_zRdnrO#7ayGNo5C8X)sBRb}DjyWe^I3QKcUcb`J(DBC4uqBMOOUz%JFJ;ZhxVh}(S~9`eZ<`D`IVMidmtfk*Se7g zjuRXv7trwftlZ#6KwL%+3b?hqY^d^x$9BQVURS}U_^D7ln31cG~Yo^4P*rF16g5>ass$iVXBfP|kHjLoT0sfT<-ni#*e;uQ}6VM6`aT)F#`kdcDZQXM5Y;r6PjT91s!ajU}n>u%XT-P-u%d|NCwnvGox2@iZ{m*eX0(&(Cqiqk56 zdiN#)YuDINECWkabxpOuzA31jv}__Mt?(?yb6d6YfYDl%=xN_eW@3z6biU)xbGK-^ zxcTX~HBS9!FNNwQ$K=NkYVO9pb?bhW6E@3elMBnWSch{zOq5Ip|9o1s*u@~k&6J!b zK7`}WC5h2XtTjo6v9Gm?HLdBu&i8P(G%gr*VzPoe_Bt3u%{fV(P1iGlgFjx-^M%^E zH-jl1djazLiqQ}Hm1_mcgf;_`=(~xRF_TE?#4t0?UcL*i;Ln2x%l65v=)kWxterLw z*=l4*bJjWc3hXUxR_>2Hx$s>i;L|I?1w;2PH!+~rN=MLIM zw?L&UaYh1OTw-x-dwZ47Rs3@9x$;dVx4sw=itcUc9D_)u7x2|5MD>~?-uDW)4Pys+ zI(`C*N~+P%Pc&3XTOp}Ti^;rU*EO}>m8C^ty02>Y#Am5BHMt22PZ<~eILT}bEczf@ zEr8l~i^*oXt`48FO|%ysuzc(`u!h~`A;1WCiYGWhtMP2e8N00UF|TMIp9r{E4U%N` z3Px_Zhng{%ZEaj=I&=3jL-^LY*mn4-aHZ4 zCp63|LkO?-2pt^9+6f9F(oGMdRuTq_c(Ka z9M^3L$BA~c3hc&&vfC- zI12=Q)(ZBpbV-gChISGw>0NDtlQEjY^;_gcC^E6|29T%(Ow*|^Mv3L7xE`;W=Gq3A zoTSqk$@l1##((n?KV3ait4%)S-|iVeXY<1{+W(2naW{_>&N(knP|9Ln3lVm6nMyBb ztC>V@C?7A~O=31jp*yn3X58TS8{0TrmwXviyR+{(o~D8%(Z<~Ff#P7e>eZq_=aQSz z`MPp>+cRW-?mO7AJD7fYFoG33fuc#eUc;XdAHu8f+V+Yj`d!;MG57Gy{4}^I-m5Jv zP^|r`8j6?A#Q0xWQf2pnhT5B>B-4t^k}6T#641!mgW7OA!H_Ej`dVkqxgU-M4}=BG zP^p-j*l>xe1Uq*%`#}dg#o+bYzULGAE>r6A5 zq-3H8h>W^WeJ5TVpENhGl~~8?#`rR1m`eg$%BE&8mD+$SwFP{MT&TV%J=mHdv8z9p zG4qFosE#M2Zk2|Gb^5bnLpR6bjjvtBhd*9N>b8wJ%sNB@M_A11y3pa%nCul#SAK(` zVe@(*0NXli^aVssg2E)_ywi~*;6^857xc7cK zFtu;G>0rxRz9aP{B>a1~T=QE0l?P(+Hl(f8*R8I&B>hC2R{c6r*3|{oG^H zm}@MxzK$&h`}ScnvVs%W_5ku}9@P+GNa3Q&>7aOl(6xlfl##eFme-;Ad!?yjNy4%N zb?Jk8#gn^6!&VeuW1?-Vkg;B23>KG_WGIIom!I&`&Y0{x+4(C^n|FdeN{fecEBvq z!bl5|Q_t^W#2TVC@}&3MXeN57+ih0z{Re{4^xdlhxf~6G@HNwhm`MZj+8qyav9a0P zU-nF)xq8=}K<{;iXm>1^ja8GWjzZ$%!^L7Q?NQtxc=SMK z>1N4`OpJ~A{RzqYYkn!vY6L^6`}p#@aTlh5s0Fo*9q&qu5Ecegb}sw2rJeCBi)Ual z!NmiSLS5>8GZP-P+hGM%^x6`#n;${@w|gr?R^1r){|dyxXc1Z7`%5eyn;-CiZDYwTfYD7|7Ol0SR_JWG7Nz*(-sztY5c2 zda#8K+cV9k?3@*Tq9HHGaZwp=uDOFiWFTSI*YAv2LB`lIk$xxvf>VCN@k*~Ne)D31 zK%Ez{fgU20KS(Yo!;E1Ah0ER7@{>6~LGhb9Jv^`M?GC4hGpZO?+jVz1rAye<^xD<1 zig$^zBf(U$Tmw1@M>OG~Q<+lX@t@reuTNhOH?AWID!$DdEXgWS$E#i}UbV@JOwEk! zB!!s=L$#jQ3A@K;d-r;l7}6Y>pz9AIZO&L&c6SuO{QdKWvnvUMqfC^&GCL<%GJi$| zG@<%15f=l_lP%3$4-v&9hwVzM)#w%{Ar2Mw9 z7t8*({vX|~;W|km?H=ojfZF)Y{35YaJp3)$hBtmhgq7z}Z*TATCA)YWF3|~Nm>IXO z3tp953*nmt1#L3??cUqB0kf3h2*cviST1(Cf$IOB8RBQr636Nv3@paYyu~b1NQ2 zBQpbfGaL5(W_A?MXzn3?Bk9k2t9b0TM8SOa90{enC%P(O*DC(%IKuud0nnTK`kBn+ zY+c{Jzth|9$*wk-O~pK*x49WM9XZ3)y}ZBb&3*kGAfm&!59sw^yF{{gf$|pOFM8Wt z03`T+mH_Cj_>H67hE>R7?O*lwS;FpT317VAUG!%!`7d7WX9>PvB-9=8myhagXb_$d z6TKgtcks={7XVF&$HAK|!na+w-sBTXdhd~vXUZ;Bm&jrvgF zbofMkkAhPu6PWqUU61(P#Rd!qPymk(*$4oJeNjM|{04B(-zq>Q#hVC#%RVdMHmfg< z!u59wsC)xRaQghzT;Qp0ztT}k70Qlk;LC{XE%v`H?N1v9U~7Qo9DECejd(YIz;ymJ z5a`zgFc^J;jT00Ysj{x2De2n zA(?=Q3krpk0r17%r~cxI+n#{@6c3|1-GDK;SWa$@!gihP;jTu9vk%^6rH${)c>NMV z9ivhC06l#UtUk%-==t{lbq4D%PPy%Q0biK%xxHTN%#U`<)V^*nmM&qRO=4|E*E#E!=%fVj*(9as%n34H* z!!LIJ0-%5Lse8$}od=KqGS?({uX8-{uGH8(1?bi6>3bdctluwR&0JsM_f-G*)`!Ih zMjGjT=X{DyxU}=i{fazc$wncT`K-2F7fI~daM3K>h!JI?q4B5IVFR=n2neyjn)Vqy z;k;7onJICNycke*n+Tt*NB%Fzl)w9@Ba*L9nUAi%|NlSye));D3_D;bUSPY3^vt`e z7`djbrZ@Fb>}7p!uor?Ne-)yC`Dj6~_F|z9kGRxHrRr7f5>IGI^Z>>#)rv2fCB{EH z9*fgpwL6dYs!%?&cLz(uCB9cVWRgy}_^`Gt077LAsdGX90uoa#+IqtRDLI+mGbtUB z6@!sxu`zT?j*(%_c2@h9PM{pL7-kvGx(gVF0+E%(B!jY-|n*xSZe6`uXF)QZs#&@K|G zrBInSIPVH;l?t>;h1unq>c;3-Z)ERy7)BW9c%V<}cof|=8^0s$R_LDp@tlKAxROOP zA~K&yzogBMNfxU#ij$DZ^&Z3saU*sMVsz_nYc@*Tuz4i4*BoaERO(BlJ`lz35GI~& zm)yAFl6%2!(c7(hy6p$5@?OzuI}Rai>uq>mE0Wq9yvmL{cvx;K0L6nW-8H7;_PKey z&=jbrl9Kk}q>_@D-9r7`a1)z}N+sMij-VaZUcqc)L5q^)Q?K0t&!L%QN=>NRG9|p9 zY7Eez8c`^{w5(AY+*(Y0v`neF3sURjJ#FqR(^Ek0HTVcnoAfk$x zGO)fyrAF2|r*j3_dL;Suq55m^lHFxT<<`R1#p0n;f+Pcca%-!aO{T#f4B4hJxRdKF zD{@|0TbHr!SQQ>N7mUFMw?)9Y?4u>^Qy@B}!$MjGwnj%M3%oJDqobZR zV@tDR&I8W#r8~vPl1v0L;p_mDXTT$?Vchkuw@$Bvrh*#J#0r+dq8s9py?PeEDk%0f zwdaZ7Gau4^t1k9O=EFZuX#bSB{=ZWd(7UA8@Z}ghDF3YDPbK|Mce&rWyD^D8fu-&k zcT<$d{KQv9YQ1jNKx$mXDJ<3RGO!tL*u->=reeWdFUs4^vzgHR(@k!9+4}ktnR($J z0uKq%JhKb*y6BFf)dx}@?s2mVgM&kC{G|r=l%xcl(1uPxoAotZof`n^gJ$7?vHEOL z_D4k()|yh@VMZl=*+}}BYT^SCxQPjl6c=tXEtd^cztK`}St^W^FiaX1j@3YSste#S zv+TR7JdyS9a}}b->O;m|MuIBzn@N@==rs41IjSLt(o2Z}9~5E@w92`O%-OBOdh})Y_oR(FU)nB(^7G*!0jw4SITO43E|L*XUNwT0wj9)bC*UR_2+ewH0@L?M!#N5(v-4y+Hy2O9Uai>9TfFe zSJzTSuCd$yJOn7P!F0FoSn>sX9iNUcVV^X)Z0BA#Niu)OR2!_;FX3_TrHS?j*_3i( z5zfN?L8jw?g$gJusD~$V*!0|(l(QUv)x+mO3mV<1A*bHww3Byedj|?nOmQ)D(k&04 zrnB^GA68%uJA+1Iahcx*Pl~>G$vpQUbloPXZR{*1hzv7=Hd9w(3?JFmzMHj#P~yE3 zOtVF>v&(@U-GYdO%;e-w&W-uh|makRd5k)3nE+Eb?E z-zXA$rlu92Sxm^q`YNri6In;FoVe+SJw$Bd7B{!o4{N_%3Bn+*jX#Ww&je4tR(-=rRV#+s^$uL{^I3@G&X zR+G?c8-63d=Cn%viGc05P~|_a$A3gPpNBD$Un)_&MOGkpU^On{EA9}FyT2yU{2QCd zn|?j>lXDob!6{D&bp`P&n}HLrw?s#Y$H0Z-Z_|xpg^%EaqYMx)=ISplt59H7IaBQe zEtok8k*>S0T=Y;=pRW9gJg@OAnd4Pwl*SYSkF z^jVoZSPNv};+w+IROG04a#Iz%yv?{%gADA{ z1%VPSQ0?F7>dhsYUD(5O-Y2@RDU3z>SuA(D}{zCrJ6OO$S$Y!-TEngC6` z<)TKT%rjg1;$Dg(N(x8U#jbE1C^1L9s_p!Zh65{Zc&Rl$upA|>>S@-ZJnqFO(we0$ zdbKWG$~1>FW(lBzf@#j&?o&n1ka(&h?6KQ{yag0ya9}D?U8N?Ed)#QG!@tDZjh-z4 z-jLIf2X*N}*2$renjwBEhB{i1Pawb+03=%|yGcaph9jCdX`_s3mLG_hmscHq>i7^B z*MF2+@I{Ul?hDz{k6c_|*M@$J|Cg`X|6I5A>recmIerM|MNVS#P*fcY;z{tthp^m~ zB&%r^vG5V&HeZv$MZy)CGGLYjUw+8F(E=%zmE8P`xOeyN6f*{ z*8{yQCWC%4U&KHPeHrBJA2|8T?D zO^VOSNiF`Mcj~%s%MWq!%>ovWop^YPU=rU)$4u*Lm%duDo$vzrVO#^L#762YO?f*< z%$e(3rR@Kc9mIjByVBOl2CzO`KJ!bfwlfvCw=;z>?ERF$*O~z*M5_io(BsmlA^t(6 zpqPdldyAW)!}+Qi<(I&_6%J1C&-Iy19j5frp=*cX55JQ+ZKcL5M^Tp@fsIK?D#Y@R^N|OyZmg&t&*uNNZMp8 zPheX>9gwxPe2lrN@$qW?Dst_Go! zX7@hE>y$JANU*pB|D_wfAfr$$(Erw-1XXPv>u=VrC*#5-O zQx8Ul*(h|C7G|jO3iJ+dM2cuS@SG$s`8oLKr?G$btPTt~15TfizJPa0s}PK;CH9U) z9%dL}RYmGI*Y_MNszM-ZY;MRvhRO}MkEo239FNs|3$B$Tdp?7?Ze7ps3BA=MGh^Q=XxMcg%)N)MZmiZ|-&BVH~E(}T4ku&#Cj7F8?K ztey58E}QSRk-GeeD^lGB-&?3W7NaQs=!bGU_vQG&%d`ewF^gC+fzi1;)@?+45U3C| z14ZilqgIuPi?U>9RQA#uo5W|}LJmA^onMd>A&$J4**1g|!{UODhN__KV^)Ktq^OWc zwu9H5?VaTpp>$R=qdTtR)hNh6g}yW4?5`GGO(R& z0JHhoHRHl_Gjys@LY>IH1wHZGj|rfI&^=QoDU3#yZpW+$V577%u$ULQ5w7{{|*Tu0dlB&R4b5|65Qme~!_U|1Oy|N>&}gJCz^|5S`V%=r+eNCuQ!> zs8*j*@D!gKH^>XQ*ti`3rk?G;^yI=hv7%7<#FF4lVRe*nr07x--L;K+?7dr^6a zsB~7NMrl{V#=#?eoUH1%SXAWdpOg&r+dV(II~hs|G)O$~&rxNmErNbB~zb$h7I>+LV7J%y;V{FUGS#OGchwx#MgNGpxVZk~xNF}rVsEAh1!QRF*Y{YBm=9tm zxGw=qG#7VhU5@zF=<^kUGq|oXE1|>$^<>ZS$3&}>BWGWF|5MJ{aK=6Rv(bxEBNu~z zDferdt5I-#->hUV(^V0Z~OS%Yq6B~PsiHJWga^$ z7Nw}ORN<9_)>5a5!xj(&!M>iZB5>i;susdY8XouSlv1#`jecV>(v<41Y-fyuPS(;F zY5|52e-uiYHgHv_me<+RBxY~}00Qyj3o=MwzJkv_s}rB$^g5=G{k5nl>;H` z&uTQk^d6jW`HCGYatk;0uvnCe@Q(1>VVerKlL#>K%GB!cV7Q$HotFV-F*H*MAc}qw5E%vr>lyA z5?is=;N*0&p$LB!$JqX_E0~-)k;Ge{KZTTcn?&pS(R7eW1Tz>bYt(OH2eipN+irUY z%MlOUx$8ecgC3`78?~A4AF-DX?i_4>v@rAVbfzqM9o%wJG;|{~LkM60hB^6O+NN9M zQfxEY=p3nfv)j$T8CI1H_kFe6(S^BZ4AW|V+P9^*-`w2?8+ZCzuN5KB{)u;_Um9&I zTDtMAY=5?0TfS<(tL=s50DUWk+P;C;Hm1BTmx_|l4h=hng`?n!NgSOBRB|T`USvZV zEYhaSX!Xbl^htBbB^kGT#^!Hga*V)zAn6$x#gJ!ACJ%X0a8m_a6ue*{iWep#SvEdN z=}C8nRCFFpCaJXNYb~J~0^hh6K-HqpYyx_z49C~ZbkLwv$3l5ST*i)6Tc|TBupqYNx)3K%r$Zl|x9nQl;(`5~XZ24e< zNEKT1DLJQSU2da~1uI_a;XKs5Mx9eDA6v1pg(Y!3{WEIoQ${R!BxP#%| z%`{%3rf6Vc1BSMw$uSv-SYp%`k;&Rx=R>3|TT~K=gPStZw~|tI&oG_KM{3VmTxas* zozcYvAwgydpbbAW6B;QWZoh$#8oaMlwi`GyL|-hAh?~FjbfL!VwL(~2e%OW%2qJWJ zRd?OvRBxlet^p9QY@j)2$S;;VBhcoTaBIBfp_p=fve!PVcdm@JaM4{Y2}CnaidPI@ zBkweilH|kPXf(92CD8ifTbmsYwRpKHIWAOXZq6?slf$QN=U(}a5fNEw*=Ji+Sx+~N zc-g2O=A0=!r$6K9HxQ?%7sNf2k(~k4nhlsxqzmj#l*iq7RI$nDF*etN#Lv)pxye19 z>Y+J#PLj0q93Le6bGLUT0!03Bm*o;Y;5CU7d*1#*KkpQ5M8TqH;Y@w`5AGDWj} zRa6vlb)&heu-nQnW8x=v>Hh3DWOei1LyNd&vax3El%ASsGl#SY3RQWem|O*Ukf5~( z>TuPeMk+x&`;OPXDS6Nx zf6Mu0d(za=1QoI%o$SeODJY<}A+vaD&(3yjG!#_MxB~9n+8)<#?n?mhZ#ZEbCc6h}+p ziin1V1YDrQHm#FWbfe`U`xwyVQ7q}nzd0YNZ_doB+ zI0WC%r9U>!yR?Zk(pkeW2597mU-KjX_4dsdSNI~N`j?sGUmX3#)cO9JNUGg7el;nD znrBz?1uOC2flGbf6C~aH9GCL7{_v}}^3TKwfBsayD9D#j`(LdAe0lU2Pxe3jZ~onk zU~aPws}D^9$3HHoFG6)Zu388fYJm*t1_Tu%zqo;+nt(8{W2=TNNN$KbFT_Q~G>@_J-{=$b3sAJib}U3ke1+g-YAf zB`y}!0)ZUNbQXP7<$BP*yE?eE?leam&$gG-HBe$O6MVfPv~r_c50$qRTcMw8QPWhk z8XOnw4Xte0=zZ!r_x;9I-w{^)P>DvEdFfI8Fk#J*S{I@;GiLgXC~$aUyFxi z7rfl&C$2EjcKI})d>5gJl7xJW1fT=y2IVj|rhzc*_qbJ&vZR52H3?($lVe9HIS_f? z8#TV|k(R4Fcl+y{00qx5Rq79B0}lQx6h6V8`%sBYF~YP`?@Q~!#;W% z-2SjW8I?D#j>X2W$4qGw9WM4$7kzBKVRkYh9#KuOs<-e{ee{_6%$ zY)T*B`)F--L1$p=MQX7Xup+rc<;QVhB4{d)qcrIBdhPAdDFUfA7_F=Hb&ERVp6#Nk zVS>E)E8Tnm4jot%6%7&<84}DNorwTohnh$BGss<@fMbSnz^-Xnm5qQ5tqbuEV?V7d zBDMi3?-kF_=a!6>?nZEcPcnh(p7(GGAfTKdKQTV0Z#>ToR4^y%*I-*C%6hsl;|3;u zW*0UTcqG;k?Q}v+M{~aM4}3F(#IRqh?8-BT(kG z4rRCxV4B9OZnHzot|nM05Wb6oF=LI3x*?ZVaH!z^Y=O}y%ff7Ze09`18*7i|v3jVn z>!td{8k>gizEyF(^E$rN(A20UQaK#B{CC>r2E6@PK&i zH~otX@X&~xFjoo)A~OF@Fk9JerDZeqV7AixtyX!zmY1?lPdiH<=sC~_ct3uBGC zeS=ng`Hj~*yG!(70g#UMxAVvzZ%tuV0QV zu*kym7mLWiK6&(-)cd3HD&me0v&MWpRU6JegMo8~7nUn& zX@EsCh;oDK>aC^x9h^B0Mt(t9$ zM8_=doeD%fYwem?J}^|3==>NWrH+pK*r5x@2$KGE6%UPu{FPQ4xEbh~~GDj>7 zEx$M>*85lwXdc%VowcZNnnTzlImL5uL3-wK$DCQE4t`XRA!UL!`?h&MPuELZ{D>2^ zufN><+k!B7&H~5$Jp=z{2HvZ2TLOth0TBY`L`rjItbSPZJZ8kdiRNEBUUaN_RKYf% zzkEo>zZ2x-SomKN4-R1uDdD=oC*<= z=|5SJxv|p*NVrH-lYm@n>r6a||!`IOMPD?-;WyDlSzYkWu)C7iR)04i-;f%Ux0y z=28jLP&T+h=R_NUp&%a9?MF!?NC>JtIiq6C-|R7TM-}#_n4$e$+3>~Z71ymco+K7y zqm)p}0h*w$$s!nH24t^J1MW&oyDhJG7m^53X&5cFnKWG|fwp%URbh!#3vR^}dzDQb zhqSr_$YlheCU0~$5mCq|>c)@xVmp8zImx5N)`A|Pcf1{pMAtISbV1_Pg`=m#sv@1F z?CculW4ZC&!T$c+55+xoyK#9pWS{Es_Yf@j_i#haa_-Y{ZJ8_`00_`Q1I{UQbac$g z?6t5Jzj@>RY#fj<13bN(@1VX=2rM;hV4W!DCwkc4LF8x>K5;FcOXOErHW@f-IaM|a zw=SzQSvh+eg23hGR`&IGUta`V@?R$$9e9Ga=mly%@phl_mNCcMkWoCkE}@eZB@oW7S+7DU;0+BS z26`Iz@9Jw37(&hj3f<-hjNx+7X=U{L{sCR8ooCEPnHeNI$asiqTV+v7@tpFmyU+vn zisb9*RLOqr8Cd7xbt*-TL9QCjepojH@-Os=9=d73sZ-a8p~abogUF0WSAQ;0Yp+$O zrJJmqt>kW@(>zM;PoEx|Y9)XLJW0>)& z9u!^H;~YSfshz<60s-{B9#%aUV>_$KLo%20K~7J$3Dk36?yTs~0C^^Ik2S?Duxr`T z!QM_8!*F$j(W0ly&PYgqs{o@>UzKQvEe^MKjE4^9_G*4`3fUC$8#PnUv$_4e#5p)X zJV#&yo&;97ZE*GIGJG=ce)h614oos4f3)K)0oiPy{R{WY0~zgA%RO+^a}LGuxjSp0 zMa(aJ216{>)9xIz6jsXj)wB2FlbFbHjLnpKGG3K9qZWTW_w>fqrKiht761t7vh`|5 zgOS&h<`NBisr*)k9q)qRrF+1+HOm(Kc%I(E(zJt6k--(^t@pl#ft`=0k_(N6a^D%7 zCLoUl?ALbNR_70Px;Ay&ie}5=AH>RnKvPtZ>A7lF>>Y{?awwo5Qf9z~>rbbGL?OfS zbco?ohPxE6ns_3vE2c{qAxh>6LF7V8XF#%{ewE>gfU)udH*UTBf%XGDE@h+3?4EM- z!vz7he`%SH2eox2Swm3#vGo!fseRAl1lfuiGYLCRA>bD`gUv+j3eK8Ydsa*(zk$(4 zr!!A~ABq|3$92wqR3Xouj$ejbf^frANy=Wcrj|9Q<<$iBeoQ8Eo5qHYhfq` z8xuf>o-7Lz;?`rCg{&ymd8p3jE=&|x7o^^?!7_r-zbI2G3_ZwWj-1&U27T-Y=cU4j zAh8=zqCs;X)y~u`JnBrqy)oaM>X8Mn!M0?e#bA9KGUQoJ`L*!@KijO1f`YnLtwgH; zNPudsxNw47?avD|)FzJc#1Tueybduq&o9Im!fj*Un5{tki$8Hi zeN$Cb@4i8GQol3S#rM#1V6KdP!f{wuNYkhX2>dbA(#n|EKtZe$yfrQ*N>Q2|Gn$PW zy{{)P#8^?Zc|Uf&Kki7Msk%p6P_k{|+O#UKsV(q`>CrAE=2)A`MgmB?B)-cJBnI8>x zoPgwuVaw;^s()XJ^-Y^!{H( zx@Mu~j^?FajMGC%GpI(i7znJrmJ+sZsu2o7Oj|b1V0Y#`*L5+DUSrjaRNp7vD87hsXqDE4J}>>#wkSHW}6hQR9t-f zImSiTTBIX7dPdJ4N*G1y1M)&oQe@iQwCiCrl#hBPFfDUatKg(0?n{a;lOaU^}kYAHJwj2iRGP^l7l15KY zZrj*=@OI~Chm};~S-ocAK#)C~6gl-L8q71Gal z$Ujf-*paqbd5&mW?I8@KG<_GA)^__{Each~-Fd%|Fbb3kD|8G{#TOiyI>XAI8yZah zWwS`P12&ys;IG8N83)m>b$#j$T$^-e9}5k;u-~c6?_>M!Sq3hkgMI%3Da*{8t_Cxv zo{uq>)$zKQAkoOpaX(rR3wkJ>K?5Sz4chQzkj|a=La%#=eKa)&Y^A?xErpxqjLHDl z;chu$FLHB<4_#4|>`bZR`ayrTbo>=aj@*8?S#n>*k3A6?%U72plBDuZEG=7(+t0HVjb(N^pSd@sE*!QPx$PxlpQIu{ z?aD^^jqae(;Nn=pIIz$3WFborfj_Wz-$2P+jn*kZ|7gMxj=)tEvWC6ur#pO)BH40w zeP_bKT8HvKEP#YW@tW;pLmZLnG~7kqtuLa}%LxW#G$*g{SzV%^ktEvB;0iZYexy^< zLi)*-t=;ZmVk*fIV4Epl95Ya>|H$krY2+}iquN$E?>XwJpYWB{^hB^efwX}Q2*nmzgpI> zlFS~h_?aL~ofyQNg;|mB(0qi4#fiOEO*LBiQ1`dEYc`*_#w472Vx~a|QGAH;-F@ks zE6xY?S4J*Wxr6W+wid4Y{(vLz6%Q~p5C5Xj

V%5;?uAbnimBVFsRM@fZj+5G9{y zps`6yJygtM{%wyIX{8B)V)0x#OtaD|4Z6VOq4Hjv*S^>!@nm2cICG;Zh|tSdvenA?{o zK%f`C_pSbhrfE=jGkz-gaTTaM{b<6qX^x-7P}@8OE)J(ZFjyN`vpAU)Dq6*JYQ4f6 z!$_}gm&LFmL5dznbR(Me99%b|LepS21M=g+iDj!#mopE#dsI+*cG zDRfn8cN)YBG=-9rRuc00fNbsTj}HovtmIX`P=He@%~9_FAu28F~E|<%_K;=VB=OEf*k#xAqznqgmoQX5L5g5l?ANo;5b|Tc(tuc zd@8f{IXsCj)%IOKYH;DC&~w^Nq7{1oRhD$%fT$6`$ za9Nicqy;NRjQX#&Aw@oMU23+Zdiq(l9<@{roBB$$H_!X%^Mu18AjUct*VywoU!(>Yy= zhifLz)R|tj(3I&)#&w0|7>YWj5S2JU3|~4!B?+h-boG~ehusqR-JFoh+h>|`p;_;A z-c>R@A<;JGLFJYZ-DWXH+cO(!i`HpQmBDIv9aLOCP8y^{%zN$7;iTNxB@x=hW?xtu z#lT9YkKYE?EMt6TS`X}J(rBPwm&!|RYX-<&DYdA5v)(e8BT*CgI;@U^EK9%Jq|9*( z=3Rgj@s9RkqanD-ckJ!k8wWbrb!y#Z`8Ia`+eIbIm)NJP#Vq-@RGiKibH>3b zCAtf+>ZAoo6>m#d>VTCM?bQyfQY`K4$-LE;Uju5KMOe~yQ6O9swLhX&L^$8LKM!r;3q>%+(ABhp;Lz{k+?3j&6(OLav7=O!?wX6No^+8aB_NXjR)uC}AoFfKtx2I8hl@qjk!2OkoL#-6AqDceyt zr9aacBo{ic1OfXVg3S|yi)6-EOvQn%(qrFR8SqU*pE%{3g{F-YZEK}+Q%af}tz1gM z5FI~4S+BXZ=?8Azr}BM`d+lgd?+>Sr`PW&V8%b{VrOLiivdrZl(DcC-W;eYwTD(sz ztw$rDQt-JIPQl*J#nq)@!3IW6RaXqvBI9yxuyE&nN%+)}I!k9VB#b*i zsB6*GAcSlb(|gH~Ln9JtSA|Fg$T=7!s{m@38@zjAgKYu#<$E+ww-qXFW+X(dxVbP^ ztq@f%;9dWOPh991Cn|8rLL9o~4TLb-s0;BKClYN72g4eiJjeSDY@b#Wm2f|o**V{B!EA0 zDfZBpShsMQM<%fyx6!6)&MpR7z@t zuXXg%yS8AlWW%W_? zTBd~NQ)+O&$cdBZZ|%f+gpinEJ>Y^v^~He>hp@2jUZtK;3Smzq_dR&p`hsrTq3186 zLM+9jQcF1Rj6D$x^Uv{_j)yeqt7D%lzTOX%!{VY;bK=$PTlqN}2eyt-_75i ztBt(#9`TCfEA#nE-VdLvP5znw@Yh=TU$>svkNQi6CT(Ss*Z%Q&I5hsYi))0JG1VD!F4~Ldq-p;*kx&O{hx0!7PL-Uq}Y;_P_Igm8YPV6g`7BXLOuwr z;MJ$X)~(sh4Yk|JxC@KIPuaX0&oqdP==6s=&i*odUDO@~iS%lRn_BEK6jC z`u0E^&u>0#iYUNhFF)6n=Vyq;?-1{o=NYUiaSA? zwidaW3OS-=YB*vJF-U+usQ4~_OneIee|)jXhsf#hW1W8MQN9{UORTMeFJh7%aQsB7Db!(%a^+ybc61ZHqEkj*nS_ zQ^Z3}#q6YaZ2IW_WC2?Jxu^49NSK!pKJ0m`f(HDx3?nw+9+p47!F~GO{D|rG#vo&1 zVr)}<%$w-Ol|2{bjBmOG%-YC%vA3c8?J_7Ny^wM)0W$3mHfn!xEUGxccD4WtDu~jH zIjvuw+PZCq;psqBU~Ftl?1Cytl-Ktl&J4I+cJKiaV8x}V)6+eW0cR_fhc2S$zmFXX zPReLMzuu>+k%LX#F2%Blshdv?( zc6Ji#AjaY8(i2iD80h<+-ncTBV{64&%ksqamw0V2MQC-=UU#CE-MN7Mv*pC^M~0gD z@rH+`f6-&21)AOKbNtt+$GH67zRyk1qzS#8Kd>*nr(!DgKqB*i3U7cw3IEv-qU|2p zOLl(DW&T07YTNj0Vt7U|NG<+)``S@H-*o%Y!RK)0#|!*0%n`!T7laz9q-;;ms7#Pl zAi+|91J^JWZHTL#2Z6#b@N=nLyhz6Z)11M%DES%0>INd2?5AE4!Z# zGCmRblG;nM5_jBG4Q5VqAfl%6T<{9c#MO)Ky%7eCVinlH*ql$gKEO~k*QRZctf`~7dG?8Qz~b<+ zzU6NRT9WJbH@|GlXuXuEX=CnJNpYX_h7CBh0pcDaqw7u>O>~C!zOG2twCT%89Za4I zO-I_S-&E5Kv zk|Oznv*Ft&5_|_FP%q~k+pK}_(?ofH;?iK5YVVa!)V=>vdAt$rxUEANiE~b_E@3by zuG%I6;=9VoCLgw3=0WrEHP}l*hqL&Fxl5t`f$XH#`_^QqW2BbJ&}Q+Rv|VEvxGe@; z$Q?@My|QAas`CsKnjL>r{p#4b@z0~!JbcZfX&0ky#|0R!M6;?N=8#asI6C`06ANV%$=YaUFoA>+ranEn)tSDmxL? ze>p;{`Qj2-AfQh69rUoieYcNgnEuVxx93T)YAUb#qV%7&kuRy!nqAp6=ZA%oBK5Sq$HNTH-Q_pBN zSwHBjdVp4OykaC!1<_A1?bj9UqF9a zISB1Z|Dn-)aC7ASl2%%R(c!cfi(pSXM}1bG1R*qI+%;4zgt@>3F@O16P5t@;|8I7A z;d~<>V^5a>r_TbI_j=(ux81F594y;HgU@ygna4BZUCHg>J0O<+R$D>L#6+8q8>=CZn!VFW-qExk zG!bsc%T=_qv?Bxbo&MDz(!j=nGmOIG?=Sv6P(?zTL zq_+@wK+AZN_n{_J0>4%MS(Os27u>ZAv+8!j#!!E?U)GVo`@(Fre{m z;wh6gf@y(^$w?g1$V+~Ud>lqjH6UD2c%z)!F?S`wbGAi%(caTa{qif1_u8Xcbn9mQ< z*$=AYt+73a^W-*WJT7oH6htjiXsj>}8O8ESFcAEMK(9mEWO?DO)S`ZwlHMs2QgS4y zfP_?&(32vIg__NY@sc1ac_EXbiKvjD4kdfT&3&nzx6=5I={y>+R!@u;9_wZQZn{%}Jtt=8lO2E2^Uk3q5@jV`j3`fSeKz%y?;cSczY z^f!#ZK`FuTi0G!(=^s_5f338ik36n@uAuqPJmIttGs}A{fDpAq`9{H6Qq4!yrb7X| zq0ouA_U7-i_|vYIe4KRId0nY#{ko+3SdQAT%t~3awckr+%+bK)E38qZsrvBLB zUE7L!Jc9RP53y2VT@EofU@u-&&feI&j8?uV#J^`TeqzCqYMGvau0Wgvb5d41BSl%Z8mr`n~ zLjbfJA8MXW(S*3y7#qe-RSpCo#IKF89}qaZ9zcEzRu>(erji&1J*wc<466XJPsXot+{+>_C@vA`Hx#&Q-(I1n5tA!qTT7*leFm+lCFU}gRjngB z{cVKM^9vA(AcbPpnU+}8#LZTzpeNOMkE`bc_UwMZx)hz$TZA@N6rWqrU6~_cQR>^@ zW+#M+L%CgQ#w81H5OZg?_EfL$*mPN=oV*H4Y^EI%>j~H*YU?Misv;n8MGpuB4V#Eu zdBc`IL7oeiSxZ~JMYYN^<@QuZTTAnTw6u8fNF*I#!OMZF>jHtQ93+$0TcV9x>G(VD zH|{9Kdp5sRDa>3AY!tY@Bb+(|eLzSd>msTM^!9jFr;$|w=_T0PK@$U5IXqCNz&Pzj z9>w-{`Pd1%g}39IQYp>H$Via~sU@4+yrAHH?sxyzP5u7)--;^#;TnJa`ad7d|F6$5 z{Cly#Ue-U$s^J(1#NohjGbNN99#k(^Jp7EJ2%qnlgoqn*$X?w&$V zsvD}pdq)Mn=bCMtxE7#pMtxdTHO*))3V=RInl5Y+OTaQJiv~DTFN53a7bSm**lP+n=1dyY{RJY>3_)cg z2g#i?s(uukCYtTL8a4J)C}N~Z!j)8eBMeBkWx9zb6YrC~O{fpLV70R4o9fwCIQ5jo z;eA%?DMRb8$~J!rkoLCLzvY0Qf<6qv%n#4J@YHmn;#(4qw@JV7DAk>}mVgz(R9h$b zB`#KGjGP*kg+yO>3&gG*ro4X14A;QJ93V*iPkCbz21G zQ3c0WBCfCVRoKgSB4I{hg~9{74vgJflVz+&m>q-2UUJawLfSGD54!JY4$~yBY|(P4XO&q!QL&LL>t_Rl&mM88k#!P^8xw( znOpfc$8PLpv$y8W-?<|v-eZ0~gN-sLbUaSCHi&l-WEcG)K0*jfMNipO2g4p(qnHj1% zbMNw4;>=KB1{0_h`q4qFklF1z`sg~WaN&IMPXpi$rLw{_rH3a}t_@b5pTW=KMa9kx zF1v~O!Y)`W`MNg-j=zf#dc77>Y?5wHcw1xb2Mzr$xj02UOvLK?e4oB_0>}xHTW0nU zCCqE7q}Rf}595FaLm%by_aYa|g3F)(0-j^A_-+(eG9`&G+r}lpeXR=R!bDs!jAE7) zf5rX=UEnw7(N|ZK|J{}I-`~{4W^&y3kD##4{ihF|RE&M7ltd0_g=o86Z#}o;tA>>YVFrvat%HX8+tq31whMM>%CB7pD53xJ-rSdmBM@Wn5;;r8=j9n!J&|- z67}C@Ud)gXZamfyh|_!2zpz_YjJ`2;L63#U&_Mx3X&C88w};vO6mNbl)Xc-trUF7c z1TFUqcSIlc!7@bO?-^NOU*FaOsSLTol}4Nb-Do>Tl6oz;rdk*zRipk85upB17xYuM zTOYT2F)U!$TIR;et!K^yz>USC_WHS?2Uf4*uB8sEE}p!iuR<-<;|NyGCH}}gHM%OZ zYtzUmx{Z0<;gKS>(1UlMg=;x1`7R$hbX`s(QE-^ddFe6aN&T4?|6=YRYB`rG{PsuaJjCI0WG=<)N_6wSCOhv(NB zmZdE%ItMmF!^jMd5xrKndKQOCPVO@rkX-+M4^sWo_WCz1qE3^7JF| zl|Ovg9M`-U_7NC_?P1Md(fiwv|Lsu5(m{P{($15j6}H8AmQMBaNxt9CM*UW15%^0X z{tYXpRz)4nAT;6_>;8k65OBZI@B(udsV`?`-^weu%8h7bRqD8)EZ>xp}G?`^nM2w4Wd7Gx6 zUSFdrVl1*6fOFg7LTd-V(R@kTv$Oa}sCyH3%i#khcNY>FQ@p$H6Ib!xlQoN7Plu(| ziBDVyom75)K_9d1We&fCF&FQ6A~n5-#$3MZj>3^GKot`pCuYeB|3V5awjt@Vs1mB6#Uw{#<2 zP*@?gdv(v@=ZTj-Cr1u{;+mm}FseTol=FV#YR7AngSOJLUTW`(%zxq%k1VI{bqjss zdKa`L_}xZ*-FAS%2JsUY&+@~_HRh9LyFIa`<9p3J+AV)C^qtqQ%>U_aX}$WywG^5A z;mLn|$^T=|@!-9c01h?j)TUZNUR-F}M#nUmw5T^dGM2ZJ4ro+J_c}sQ*(P0~)`R<% zDdlFASig)Kz{i|T%6XO^4F7ImrpC7c=T!T^@$#T6OL#V;`GU3iJG$zg@eS>KWs)6I z{`9(Nh+mgj1<*xA$Sd>iv8Sw?f3JsM>>PNwA{}CFnk7l<^Sn^4HY`*O#w-V7gLsb@ zn9VgD>90M{S!Zo+Ky$=^(HJGj3Zov1|F~1;hDC*oay(2Ev>(s#DDwISQ!Xdzf%N?} zEV@5d&9U1A=8y4?%BjG~&M8Ooy70vOzt%O|&A-;Q8T0ht+eEV}ZQ}}UO(3WFwt}$9 zUu(bf|FIiDf1XzUkBxDn!_Muyb%6v5Z&Omos#UwTB08+}4kf>c3E2DaPrDGwl?LS{zNA8XOm5z zy>)K(YZd6E;kC4n7y96(Me!rN?kqYi$oKlr16KHDs`^`fIlqhyRa<0qLCloiosWg$ zc+vzx9~nGXFRJPqBDU3KaZ(<_7n^%X7X-Ym*vJVgMlg}K*|m2k?dsnLR)hZ^*4_gu z&2(!U_MEht)Jcr7#~FI(=h+@mwg{TSG>r9HVL>!GJHcYS}AQ%fO zDmt3j#g4tif(nWqyXIrgciwa6yx)1>@BRMuvlfeowKn(D_QSpRz4vup51v-paflo@ zRMmt0?1h_H41FCq`;|9n;dk4ZnCI&?mcKZw-- zIC}A(IQiDm&)A6MUQZ&CcgwHy>YV+O1og!7nfyM=>9{2bO1W6uP+A)2M-mEsxj4k` zJsW?vSBoe0Nb!acP|n8G^n{G}CEfLI8_)E@oP2~X)VdLb?jcWUOI~`KB@g(IQ~ZzE zNTEFEDCg&eF;0bs0?7~&-KB_b&)KOgZ3_vpa%P`YR5p#{Wags}z@@AI&Yi*Fzx#8Z z&;LWv@*m#%KY4Hz4(si0O_kj7q;v%lx@pKY2pY!2eaQY#m)8GRhH2r7t@`I%NPl4> zY_~{+8cNQ8IKmdFS&Z?J8Ko>r1X7S*CYF|*VUP#L7Bb*13_5o>QdoY8?H6Y8$ofC)7qV3@MW#| zru4s=9$nV$@fPpVII+lboHCF&J+G^~r+a^!SS#-QH@ovwhk}pwYN1D$bi0?Odi0L{ zVJGve-8{a|s9=J);}s9!3w!$NyxuhbC3x3n=l=G+%6Nmlh((tBzcY*4G{+y+4utbZ z^Oojb!QY2Y{>FCO*W!mgjz@}1MQyb zq_MJe_d*$eJBBCk<&Gx3ReP+mf)DL?w6^x2g~yc55ALnhcdRO9Zf-B|#F>ugis$&6 zrrfO=T_MlrBHrYSc%KT<1(KO=1m!^F>7UJ}DMqNm8pmar?VIIvB86y^pU~b$!HfBo2bw#Pr*z4K4* z?)UHAefO(?@I{fBY2bV#w^AYPlWp2U^DhEQg}>~mrY>Gp^CZ^IR-}uYQX&B<#PX`V z-+nqK*f!t7GoR(0jX!Jo@4rBy&-oh91vzy#P!P9n&# zB6)e`k?y0P-%SwNTlvnZ#JE-3ZCgNi;+e1_s);h!shEaRbcCbZCzQkWLkJ*tk+CGuCL(rqjsmc!8rd9zCu?rsAP)kAH%4k!Pe4RuGaSlv zq}x(YHuK(oLvy*$iyuihKD@?6Y|ax1XIx;Ux35?if#z>oD7#px_%Xth!KD(0S0(J8 zuBnQwYv?1!otwpux8FEtV$jz8FknkeoB`C~y9+KN`NAY^8-n@(*mEM!Y1m+ZH%-w2 zOk=72hX>&nd{3kwj?Y=~AD91j($Oh+8WS-!`&GazV%aYuuTLM=CsilKC43l<@IjUo ziAnt~u;KTwkDq|Rsl7oU#)t~#cY*VtKmTe&B$1M?|9osQ&zA}aWR?WwqSlK-*v{zW zhyf!0^7+06^M!lndJo~@uP-j>-_3VF7acuIoSYX{Uwy@3Fk|=&L3%eke>~;m|DC}9 z>&n3KuLAadR&|EA=PLBd*%P3QE~DGu<)zn~u@_|@Tr*Tk|IE)tHu~uk29{x!StFl5 z(6EB}TFc3^Hb2~BP;JIIq?;mF(4*D$B zm;Q=3E76e>DDa@aq8X~*Tj^Qz?znMnV|t9zZ6<&X3}T6z8Cl7?}b3BgF3p| zjouA{@0)hYVkprL6Cn!lf|$XI7Q*kM-~as<{H39q(NMzmCs*0Y`!WH3mrVbd*1OQj zP}q@Tz@w?lUj;t39*ukz7~}Bu2lB&<^7X^@N5S{1jwS|O9d7IY@|U^)Okpo@fk#10 z#3P7Guq4P%64(FDAk_YL#0lEqLpB1jMsnG>&tf@j_cqP*d0EL&v+I)h?(FVJY-m#1 z;dz*@TGGjFWG9rM_{4Fgl#rN^QUmC`y_$CVZ61A?< zofA5)Q-&TR>N9Voy@*rNn3=kIL4P6}awz8NNF#>VuMU2p(TOFPN#9RJNq#WlLf@z6 zKIuS3yG+#3$Q+IiCeT~ElJ#xqwl6xjKe-Q_jU3M{14_KhRK;)6`roktCJ$pxFSYh5 zeL-jKg5L5`qCw`d&!I7M8PToVYPkd4`n+Ck;u&1mlbBlOIl)9A^pX)kCNAqf>5O0< zRy(AU6;u&{zPUwNxy=Y-gMbXR%WEub&=QkeQgi_X@GuOTPrX9X8z2l=Fh_}V?<*}C zreJd!T)ODHLO%UnAeyi23j!@e!0Q^8Ywx!iPshqhMkhFt^^coZQpFa>m#cS9i|7Oi z34xP9s2qoam^u7e6zS~?Mtga&v%O9=$L!6bWa*;?wK_4L={fo)^mfA2nzlFSF^W&j zJc@puj7%mjCtqjM-o?|Qm*-7P)|=3m*E$S?I_+o%A2M}==VYwvT8rKfb96JD`nCO{ zIVoX9DVYwfZy()*)CwX(<}g9Jip9g45X1O7wGx9fl6gmf3skY!qk^-9WksWLs_T94RW% zKz8&|t;SnXs{RbIF`-z^w!)jWK}!jv1Ig}4p^M{hNJ^vf!8sN!F`an`rHocd@zhv~ zn{?bWb%|$!na@5O2G5sjihLT&T#w(~qeh9J%iA~3=|A_wYa5^RQe@+kVpx|c$}j8^ zt?Z*=On(CAfgm-ZSNX~PN*~>@PN)I0F7DpQg!*gikB4_lkf7S#Us%F!aH47lwN}$M zlNF%q`>jmoCc;Qnp&cqzqZqL6%&D>37WVZsF<5K9yv}!v&>*1M1+IpIn5YD>l9r=^FeSKXp3n3L{ z)pSqn&s31<^>R$+nG~h7uxU5>3oB!Nw*duQfEPAiq+Um<9c? zt*Dv+o_tc*I!RB{bL;*`es_3T8Bg=fZDwj9o2lPr|G+M0UOMP%ak-Gg?0ix{avP~r zQ;snl$06cwv-y%*?Q3Q>O|-5XZh-(mxF}XD?pasIe4Z)5RLG>vFKNBr;@J4*;)jjM znGo1(0K;Ju!heA`)X71IK!j>rdtIOGP4EN%xMdauZPJiuk)!@E^Ka%mjh9C+Z*R=z z;TN8Xwl2Tx3Z!kA#}+^S-}*+!zSKFYXf;#JSro$1r(z2o6B~(FD&p;0c(ZioQgiZ zl3I!wB5;RK?sxHxk5U7QwQR;SIJR|CJ%QtPENW7%1}WQCpt5aJ8_;J>aC`fDOqLJZ zAF4cH8HDiHz6b8f{e8;($H#wNSp09-svg6)3o2Bkd+bKROIt2ggU(m9tFv^)Y3!8y zGce5}%+X5-Yb;Toe!vPjs`rP`E^8-UwNx(YL&qs7v$BBj34J5{eZ~5&bB!o_dv$LFgFeYvReN#`NZgEZ9U`F~k#GH?))tn82Mmlr@r8yzc8FCRv%)%Q?64>|N7~$6~vfg-G>)&xG|9 zH%$^$*OuZ_5S$C?E+<%Ck*=Tvt%$UEGfFUgkuvCQn}xwEHU|8~#-)v`(dx-+M2|kS ztiO8CRK~8vulIM}QkGZ_7@LAypEb)x=+=k+!wLU;@UFmLrE*8>d$^Xh{a^aVW*gNJ zrwP}U)T-A@PUkZXdCoJ@3oMMQ5uhciS!svQC1_pxvMvf&ol=mF!``8?vXu|??wI+G zP%6_2Z>F`zeE*zL_dMk%I|M%G@mGO^q}{IfSHJaHHF_MjHl$i=lh-m`GFaPpeBy#i zh$pseDU}v1DKB|_MU>uFvyETWJLdhAk7Y5W;6f{29BoafXbNlH$2qC@64OKaQjkM; zZad{yrnMWU6Ng1-`yYEXZa7<;o%zYRmgCPV3}h5Zf5^xF>Rtxq-Ri%eW!aQ)ZL;1F z^E!<-le#)r`VtmAVnJQBO7IbutXDsn7_@yjA~&gQ?niZv*~7q^hJ<2RPgFrqidazg z=LgNY_X!Wl6ZNK5qzVW#$z%;Gy0FGl7d5k^JwuWEDl6&Q9yAj}^u=ZqR`!)=*rM0^ zGA2J!Z90b(sP}w_{iX7D$4l~=lF+afX`1nmdk;-~(uXrt#1mlA_LpQVh)kq?+Yu5z zFQ59G*C`R&m)$GQAF9^e`aO$9vcQ4mjoyBj*ZPVjic)S6q(*QuQ1D9w6kz-Yx)RZD zwlpQD&`VMvN(T~|d5xK@B==UVO%4h5%mU!imub-Ptf{7Q{mn)u4b>%A_QK>sNq41MlUENNKbI%F8( zi!ZZqxt-MZ8DEfMhK-h9M5&^5!LQdzm*Y@s7Qk%)zXLo>xO5N%Bl}l(+UtU@1s!}ZYHV4=mLSjf5=7)!P>zZ&G)to<&l zwXsjAqlbvqebz481n135*tloFek!+Eia1j?p%NU1^>!Ekh>#r6V!qq(>MU@vY(0=r zC2-+U+kWaVt#HJmn0OG#ZpAJ5nDZxqqeZbUm_7niEU_V}lv>MHs6adod3gyH_vZp) z3a7XT^*pK1nMLNoLMzKh=f~5RN7G1#>g|d-T3yOBT7yy|oq7s|%W{e=KDEI`GjvMO zXBN;sX_2Y_Z5#aBxnF+wCwupwnQ-)b&uoWYNt^0=;%7s3J^tILNAqezqCz?oG4t!Q zAOu~D<0C;Di9JB143Kx4-rXqkG$g@!g5Tv4y(ByHv2p#-E4y}c)T~_9kknV`q1ZNR z>xfz~l+>S6OKtEeb~j!zvuM17rbxRh z`ga|^EkHz)39w>4_^^3SsaQ^v%<(ClaG6D_-#AjAxDnbny;XCeYIN7R z;p%$wD@Ike_7o9MLauS8*}m!zBve*k`P`v)Ai-qY zejZ9q5V>t${(4!O@y2R~Htryp{-q+)QLXSfHjS!x=252Kt^0PfMomX4sLWmKiQtU> zLGv}!oJBJjX~>_v{MwO?&JG!NB{e@uc@wVWr3_63h*2-mNla<{J&Cv(8pBLTyxs0Q zZVWdAM0M62lM5kgndYbzz5uIgAheCkR0xrnYsoI5Z=zd2IZC%h53&vtpAsfJUjM*A zF)BQ;tDCmQMZ#iFe1zJ$SN4y0q;>gGuxw=pDH15$%C!qwSW2?FfRzt{|<$^e7Ne&l3;kDqF9C^8OCu#RK3S9$V;C2Bo4nXyt_*@c&{p?ueDLr!QaQHA5n8kz4z>N z*p1H3hP3Ny8BC$$ehK$}8r};3R{4_RwS*k)^nTb=KFpCE419Fqd<9ZlC3kP~8B_9R z3t0;gHh8*-I`DX)h0P{VdUCD>yt;LgMr0zWnIsYNL8@*W1==&(Bpy9}7_BSc=KXHG zin!*}#=_+mrKe#Eo@0^Yj$VRS3H<~5dG!0SdVt@<^$z)CGFx%=xUo8n5ZWj59Y!SRqIou@ad8N1lsST5g4unz5@~Zo|XlHy} zJnQ=qOIHJ{)mbNlC_=AS_JEtak)4AqcBkEyM`Bia~g&^*};g-Fm zy`8T<33JC$;Ro82c-T#oJ~cWQiH3@~$Gh`N?20tR-k{E8LYO7!k$wyM3ZjA3g@#8r ze>xOz#{=J^D`l|C=ba$A*RaCMFxR<1T3uI*xk^Y=KyxAxZn z87%E&VGop)bHL@-cW-8?^_hZb&S?(Wvky{6)>{cSd>$}YwEeZdyTqshVoQ~UaO0Bm ze9>!}n!@d$wO2^q%^P9n`AZ{W-|xtgY|Ep(2M7%j(gScym8)9F{lf=K>kR1!f=;MfgM>9*GK9aPG4`}@3VK=2wqiJPWV6|ASoYI} z-<8YHY<=qyGlgg+JihOZDg3pA9hz)1{XkNw#zBG@RRl8NgMv~y4nXrN6^Eh23ae2I zo2%|Gp<^p#7t$G0a`_M^&qz5`$>vs5!7KtFD~-QyjVxEF!KVDg=9H9aO8We_-=uYQu*9mnfp>@3f#Ssq3uN)^FbS3h%y;`Hp1Eh^hF zN(SGWn!+S5`=Eu^)FX*JT_UMjvA7tPj1b>6q^f#P>}0&`jSJZRnHxcmy+Ph0jT{Y* zN}YRAawJamaqeLqH1mRVYVwl!=A+P)m-F}Q0$k<_Wo#ca4Ll^ZX2husFX2yXfFaUadDX5IJT>ilT+>nUNk!qWETrXWNdx(I^2 zhiC*?;H^S~5O221ti`oEPJKJ!HdCVM=?AhBzX$X1<5-QU^w8|Bnn4nT;YL+sOQZYo zFh9k0ii7amg;-bXWze~et9@}1A6-QUbkDE~o2Nhcs)W2Nh{pg2K%A-eK4wo}KiS9^ z-74X2COzk89YxHXlSW7Nwx`RXvCUV{*~1qGud2XLknV2{94ua_;&{KG_tiQnj>z&z zVc9=qvkC}iK+JUu2JBha>4F+wV8NiG4*p<3x4ab}n4DqxG<10~Ybuo(|JO)1$n4_- zAz0jJ%exd5UiZ9#Ll6gKBm=c&o?`A~Ek^Y0)7+ayS&dkm`P63R%z%t^?I6Tgfy_*g z;;rssRhTxsZQl!5PD!8moLJ(aFe#%jRI|#K=!ZC|o|&i#x;#wuN_EmW(Ok^19UQfi zO?O#q+S3tK!H}%2j1<*MS`q>L%BgKzj_m-(kamEo%NNZFF3x|qHTCqJdb*N{7892| znC?Gn0~uu~eIX>?=!7XMOEghd44`vn!mm8tvRXfbAwFd+!R*VQJ50a;S2ZlzqCJVV z);}+Tm=50zM7s^7pEXygvRS+(?gsE9QEm5$i|=z19|lKAA6XjWs94B4G3e1QWx$y6 zyy$n;@|aP-hsD>H5bVjbS!ZSgj1z=k?IcZPndUWpH2uwas8*5!X+@H}BHZs-xmS!U z7OvAbTQE>x$r~sf4OaKzPE?J^l?o5JkDUB@a+OaIW1&Rn^T0Ps2vxlSjmXp5S85HQ zp%x?>e~MStQ_n>N5+>d{XkoBUgNJI);I zNX6(RV_f6aD+jd>T(yzk`f$d?D#x8^M}9UkZa&h~32i@{mD6*`fS4trp=0uvsMoR4 zUh&_>n=Wam7LG9Q{o3nlo}kys9#`EOV>{7xsW&%!ls#DY2OP?GIP;}>42L7= zB_dagkT>BEGRMIykRKRHqQ7%ox{j^w7s8jr3n;ZkXId=wkE>n9uFe*ahn&p!6N zDnE{=4l|3%GKrL<5ogUsfe2aP7DBxWyy}%7xs^oD%k|5v_O#cL%qc z>c@SOjka4(T7zmQ^Fw3{27(k!2y={@sNhOfr-VMk+U>ey9VJRYH86hNq-eLbDdw2h zIvw-4$}c#N%F&y9Vs&NQO2hUN@@`=tZ7e5qXW#dJ4zkj$$BxWD`CKWxP1ODe_-or= zCXqjot({#>WnEOPN{DF(n-6+xNHG3gtSLH=SS4mE&I{5i3uV=z98^>$-p&lX*5R^nlz3ldRuIFs!_y81%ODA5Rm@6(^FU@P25Md!?_WA~z zP`YNHwmwyg=q&slvc+&Kh!pGo{F6yAXuRJ3f_b)qB}nx#_5PdCDpYM>5c7{l^} zBItfWy&n$${YN$!P-=8b{I)MuE5jA{JOor96IDW$bE@*!6~qb?fFZO6wvSa6*yChG zv?pc}uyUzIE+-f*~J3MI{@46*wawlPQyJAwJfy zsqZHiN43?P;cUMmTn_%F!?j{xg_uH>DbvGV5B?IFf81x+prlz`Xk9=1DhP_)XNEE! zPS!eRF1Sr{ld9tHoVVDr!_92q zfh)$ zjpdxoVAuZYSY|lx-oA0}EH|;X)mBDv1o|>!K zH`&})b=<6N%?)X5q1K)2^09EH31!Gvsx+01su;Y%h_%S0tqT!)W>CT!z#=%gg^aUN z@UsmQf6lD-ty;|D6BKxwvY#RCPl`UtsIQ-e|Iz^9 zuxcb}OGTC*>Rhubh+Xj#B{KVb2Z0iC1fi6+LI!XUUD80}Q>>=r4Tl~up`{dXV{k;#9He!lqfmTWH>sz_&-bX5@zLwG|E~Y5;eZqI-lLZ8 z1IDb{x7YGZ%mbc?tO!Y}2MQK2=^2612LVUseTY~c;s0t zIj3!RNWG3*dZK7%V%7DD61C#4A!5!*BMRNO*C$#r5F!)Tqog;e94ux2#*qt2diPbJ zHZ;gfoh?(*N3tF%m^QGfhJnNYp+#%S)52R%xlbFbAtPsXCWdLH&B|T{(3u9Q-Sg0&K~9B-ZCSeC-}jG>nym^ew`cOf$5tD@Ma@d;wg5@N z7JG~SI9pX3C%dB9AujKU zihPdEE=zCrO&j`tDT(;6<^?JHS4Qb{rj&oQ*) zM<5t%dTc#&+(Kz+qOUB0ffS-36M#li4-@w0{!7<)oPSUh4E25Gq}0o=~e&V5;=q_XxZaNfOMcX~6jtFGlzYJYOH z528^!d{qqZMt3*q$)WqBVwxW`(Cp&8bbQ403o380D>lAK5p2sc+KDv4Mh6TsFFyqktnH&Ka)z0rz$|~M6W=w-p=$q7p zhew^BP-qtfDeVA-HNn;z6aktd198WDxP}cCK9yl+t;Lhan$QI0^B-Y>c9#O3z~K9> zb#l#x37fQ*>?CB+e07qB-5)iDKPMpr<8l+{;}OYQ_>D2$ScMw z*RI>sjT8PL{(-Hxb6*Nb2fkqURe;AcHmN&W*^SrveJV#ZT)Bg#jl+8gXeo;Hl*q zJ1AwArC%+G1s^!cf%{(d=0|s}nKdO3jxKVcZ*3__fXjZq%L^%|qp~Cts`+J40|>v? zx2geG5idoISA0JP#`(E2I2-v;uqkQR{85r$OJnK$46u!yV{R%VA$OuoD09jr-vMhW=j6iRFb6p!r=}1^B zwjbW2_=f8CQZHUySZ>E!K;e@V-FMR(+UJ`SRF;YN?RW>7D6>Q= z8BH@-F#tIPL)i^Q3S)0v0Sp>m0i#bhzftgJqaD}|dDgD}s#-8dZTAzLY^5~L<6RtD zVh##h{>ULl_JV6&W3H?*W%ewBtuy)LRMuS=+Goh zN>r#ex|YR20T>8s=ai6b*R^bjBaxwbJuV_xPR>d0b`Z`TnEev?6h8NksKq-nbv-d@ z>d)|`vvUCPR=m5he`!?YSfz|!OHwT)6oo)rmZRRyLd>jZ&9pP=7aWohGO6qRTnh8? z`qXxZyLJWZotu~Kx!TF!Ec!^7fD_9?iJ<=F)BydLM#LhwKW@^A2vV_{PgoB#$y~xc ziC^8HPugH5>Q2vLQXDsm&z;bL_?qr{Q7k=5T;eKe$-bAPQLAQ+!VS*RhxVzqd`|4Z z8B!g7dcOKj{xG8xZ-?Sux7)&`x4(RJ4^`trg&-xK*2~^OqldO)XXHJWSqXyqnlz}+ zZ;d+H(L@?fVNl4UvvOvT6hEcCLw%OuG}~z*L5sLj^?W~_n{hebWJQdSliq$03twx^ ziPK$+K+=OR2VTvLmDDe6KJZ*Py1}-h{Or5;FK&K0t*P$PyB=u&{axp(Cn= z7}W_$4T^+xc|*!guHHWz86>QA%s=RVICp1P!E;Z-D0EL~c_%x4@>L_9v0ZdjI%5nJ zkgOm2@toHOI1n*ZN6YOzH&<&_QC)K3BGcE(Y8h>)b z`yr!dgp6!;?;S2}nqCRhq_Vw=LVd>qmG2)#=JW`zXN7JD1<6%~VV3_oPE%2-UZmrg_;PU$oAo&kEzXkpoG#jD8M6B;CNd=P02grZQQM%HgsARS}oHxTV6c%%$rK;;vDN>&}#%Z zv6}JBU8!%`?L**Ec+<;+ik{m=sSk2OF;@9!3^qZIo5`?bzM}GK_JP=pf7^QO;fZo) zSnG`nMWx%uC#upZB@b{paTW!IuQ1U2BLz+J=M2n+^ev@W+X}7guX62DWvc8`o@bRM z#oF6kJGyWzLPKkh87z`52!44tQpVSlF6<<;)_8F|D!%I)U@~Tt`i!-!9lpp&j}1*8 zKtAu&DBs4b^>!;S&rm}U*)mfGJA3b%btBScZ=RE=b}viI>&$=cQR$yn_36Q*y|GBv z<$lPT;lw=kt;P*mkO7nxLuQ*%0%x*LRnLo(k9N)9I+mUpZ(DmXoTuABnNnun+yvTn zM%%H_!FEJK!?xmjAAlO%npj)dXsJ!tZZl(Gq-;k za8+2Sn2A!6k)HxnpWNA$*+IW02x57MKch0UhSr^Kv@FLuc^SRRBO|Y^8f0U1%$l*7 zTA@&HARyWM4OCrS!hcggUb|+Je`tJ=xm<_OTw_o{%TtL7J^{xKU5iLt59g{|vVKZL zZI0_wwZU5OfTm0jkY(G3zaHac`$OM5G{e8#-un##esd@5H>+0p>z{oUvz{x}MA3=G z2dc@%b-S&SlNRXFBlVvm9o3Z>4UI^&6v&%Um}srQd}F2l0RuJMEbc^F+=(JaHz=$P z-#RE2%dPBoP6JIajRRiSFMro#)y}VCJ)K=hD@0w3n_4lGYdf!pfXRb#L3KreL zsdoZ*6Tz`*Tj}fXu=lxeo@!u5LYez8^!X^Ew6D8+LW!U-?OGN8ZrWu93Fou;Ri{T~ zZgg#6!#j&AGBX0KllOn9V%kvvrFOCfL}GHUu@b$gUgN}5nnqgW zTU9eVVj00b+J!FgzEP*=kpn4gSd%JJ!zpr(M5%*2oQVEX>KM+C%8~d5a zD!%MhM!Q`>jcTwWzR42rOJPRic%1x#`~s3f8djmp$^&-@Mkx{9oa8lZiuCa+pk14Q zJ(v8`;XEF15YEZS>n#s%Yio71;J>6>m3!&Xu8;{9l;4y6$J_~p>i;!)WV<~XCQ*7T zlF*x$>bWVu`2#*%Rz?3_)IQJLQjPI_UuG=0WZ0qI5a5$CWto6ePLvUBjEmw|SVF3- z`=JIfpicMB?SKBPL6epblq=@KEPOXEJbxI=Y#3@?Aj~*OfmLp=L2_02+dOc^QvGH>8C2Rg`iyk@?bgk3 z)2LENzy6^}j!`ibXch!z6$}E^&TN+)%L(AVwJRes&4aTc^Yt9H)0rAdDwa%3t6Q)7 znYZfJ!_t2ew7u2|4Y=NsUhX24?h`kZ*pu4joF2#_`|`e- zh{^SpN^%x#=Aab$+`&4`g;;yf3afLS%SI3UUVPg-KJi#fMWxOXk>%CAZgPW?=lOFb zY9i)g6bI_q&kBKK%mh>AznSG&9oe|eSI83gX3{)ryFS)j3AWb^^`+e~Ph)_;cvAxO zXMZy?DcD5YwTe(60ZQWg@1h3vjzu|F>-T5Xv-8!<3j=hRLF9la)rt_Fx4FM-g$U+U zxiz0tr`YlVUwPMPIw$#J7GJFJ7DH;lPTn~LGdL!X0x-22D|A~~9c#!%E){UoUSU48 z_kpmT8XdZpn^4i(41bu3+st_(Iqp_FA3Xfg%c_*qnVm0_^_VZS!lyLHKf#`Ov^5Co zvoK);q0w!FxWGN2rkAr@P!zYb;e#go1w{cj=z+DrH_m{GwjDf z1qw9jTf8K>S5Esw5enRE*=I>jD3)ySlcpC8D!qNV%-JrRF1hn|=$C$mN+}4eXA@}! z^eIoyPe{J3e`JHn3m%!nCyL~v*19CmgQmd0Xh@Ev6^P_DdsYsVdWNS>+)}2nz(z*T z^6=OX0|;w2+e(xmrTB;3@YRXFwh4G<(AgZtv8Gu+NBD+{#K=kE=ZpvV3$AhxlHAZt zS#iqw`E>0-cCyp}(!g< zDba5Y$O&WzIA0nGh*)b=#0RlG=E@&e%Z{C__H3FV5sMMZGdD?$wb;#mA;I1;HX?Jr z>RO^4Fn9*!q#7U@mJ?B=ls!iqrmC8AMYf7O{1PdP_D`M%$y3LyM_^s% z7MFN_qDN4+7RVN;bW!TBCh^sxw_{oNL;CS!$#Oo8(k;CFjOS?tHz&t9F-#d{E z?JX{m`T19gVJJbG#%c1Chby9A!KEC@zWd$dJj$S>(F>Qo2z$&l6X1)&cwh| z)LLQ+=h9*@0TH*9LXt5Ehi7g%VbSaavVnP!`19=uT^#h-=79a$MB#`#E+9=BuXgkE33p&1dr91Q9Zt8D9_=H9&$++`cP=AnQ}Wk6y7AWO zA0_mK2AC7s>fyBBEJ9sA)x_$0`F@N0V_Z?@LBj(lrry0E__{{HN|1hgL_3zF2qy3B7F=pGp8;wyD zeEN4?yFYe{In6c3Qo6y6>xi)xy!znmSi0ug@OXe#^duE%&W=|CJG0*W$R6 zpUx-+qFwxyV};!)4=(BP)3=G*R}Qnvk7pdzFQU@&tCLO4o2)aaOi@!XwdI^cDci05 zanfZm`(mzHLx8aQ!cIYnbLlX7Yc$q1jwz_imT`Kb^f_j*>UJ=S2~(#xwIRc<;Msbd zt$ng4_fGr9Vpz_1gr-}kJKzI*yE&Dug6~RoqZ&uxY1~>4gYY(T1g8S@YY%5 zjd?&i?Kkgcq;^8#tqIa}hB<%oOECAK&DVz+UI8XM7>$0~)O$vohYrX2ax1xVwoJ4LAffdScGF4FE6jefgJm zFl3W#hysr+rP`i-(mrrZiQSOJIvqf*7z+WXjI_%y7cy)E3&kQEr+Xj6v z`uBg03|?mv*YxNQvt#(H#O}i$!QKnb`1`9J7_T4u13lI|67!335Z*Zgx{0s-o8?F6@uS8R`bApDj-n zBYaXQ$*9pfbYVj+JTX;PJ&aqvYcf+tzQ7}yJFaG-hDW&y&L2x-^P}=nJ(Tq7()6th zf+C(2H}&3pqJNWV($-HzIsc#YlPC%8XM@AM65hGS<)4+Uy=yCO@WESwrCey~s*sq2GGHKKHydjhb(H0RS zlA~k!4OV=)`y4P0=&-!8UFjawI5LH-9!D#2z5L=5jGhn+DjCC4 z`Vsgu6PaRN1Z2jQLblO(epSd?>g>>=mx%){z%ZN#G51IND*eQ*P!51^|MYV5;}*p6 z*07SQm6FPYY@|4Ut#=Ujbe^vlo8TTDGt1IK*U)dw%=Z?40u~RK+D&A5zH>|Lwq7dT z3G3yWf_>lxUj=mPXApPeQBdbJp`MM+ zOA`aOx06VFy8bLQfT5munH{bISG!1*c9PeMnwiG>5jFjpRZa@gaiS#EPel*i{5n2& zxT?1{OSCuT-{0Hod?iXIQnskZy$2))W1mGwP2Pf{ymZ^_WaRA&^pU7}#VQzCO1X8!$Ak0ODB>f4JDE z>e#p+yR&{e#c>ExYAd@@)GEIdog&?>4{9N<@iGPI0YFJQb}dpuH$BbcIBJF3R$1g} zLP-no1$0?{@j{cgM4@E}f0S=z*eC-_wR|V&6Wyb+bz<@M$IM;#D)WVk0My`KVy~W< z7KF4AyFm7(2j~DPNFIUM6YfJ%7A){eR9*)Gfi9dSTYCd=RATMSyxw`_Vbc=rY3(lY z3@HY2%A^GNKo^7fe*Mih{iTG~!leLV@5bC{lmhUVYWT;-&Q?ABH^Xld1f)!>br)2k z2;q}58Opk=+mS^^eCb^-t?(&dA=SZ4 z$kI}D&b#)>V5GMc1j;h0x?&ZX$j90(ivOa9Xqd5e?0Oth2K_5Q z-V`ug7$@}#_bmp;B{TixV)1K*tpECkTAFy;yR?l=&pM>uCR0m+gby_`H;?R1OVhSX zQ*p>j@F3Vr+*da5(&ZBAVN5fSY#MK|u{4lK@Sm2OkkY#4yAP44prD%bmd~1STf3}m z6m&m$ofpHnNst0Sx(XlSv4CO}YC$#&+P5IhNHdyj_FdgI<0hAWeeu1&(aQ!DMT-$L zj;|9C8unLP^n6!zx8A_o0UV<+80o_=?uVwR*kvUALRXPDhlMUV&52GHhn#B5o5(oT zzUUEP*gfi!ukjNx_4&ja0dJnyEWZo&WR{@nTeu99gkpRx1Zpm z=V2Q6h9>T2l6c`de9p!g<0fT1gi!q|@8Rt)#}#Twpe8GFJ0e4Jr<(HpO6h^|yZgkq z=_N4-DPF|hA>ZMcyFPu&drsXH1D7!*^qPfJ%(!X5op}<$j5+P?&Vi5%_9+e7H6Zfn z^$Wfggz3BmhX?|?&?ioq*7dV7n7IBE-C1_F`YRvB%Z}aNNl$q>RN|Z{w^909RTJYK z=P_ugHBch2VNvI;I861^g_UppLKnDMcJh?7hGJtWHbDS{Lu`ZNoH-cdNiv7`2koGml;MJjxHI zmjiB(9OJ!{(<4x5XqoSuFPcewk@g0%FqadZ1N}%)1#SAJx%Z9_6P`HdGT<+YW;gg| z9Bs~96@MdIG$5**3pLCkKVU0-egILh-z>}6%+N)oTBAH8`e&%^TM6wpB?W~>FsOX) zWz*R#2J_mESt;c{oQ!lv(#q`6h=8dQ_yhEWpA589O>&9?yxgBN9CQe1GLpepmv5Jzea)9OXNY8%pgT z=C<%iuU#4Xp`JwBT~^dCuTc-B=`Olxzmu}KBpKUFc-6l_WZ)c`1pN9rv~)^5vJ9KsWE z%Q+a=>--0rNG%%^iR|QaJRkKWiOc`du<%-+*=$guDXUGi1|n%j$Oal4t*RPRVkwV- z<^gP8w1Shhw%j_N$E>AOPWLT5qe)+|YfRogWlK`kWdP->M$2N9yPYG)Sz2gPO02oL zDRO9ks|y8SZjMM~NgGn^avpvZ9kKR!YJ_XNyK9*TaZKy&h@zt9#p+rPkB>6%YJo~u z*Rw3v?F>v#28Mc^jE~zqbpwav*CwvPmoKPQP56)3_?Vg_75Bziqx~*Oy?1Js!sZuhja?@_@-82iAh&Z`w^Z(VLJh>uQ4f=9k)th$VWh2R}%?Y{K8k1<+U>xCjVK}KjtpoB=c8C-;^O*HvkJD;-bd2dH z$jrzLiLK1zvVSSg2X%@tm`K$`jI!F7TP!8pGS8Z= zUU;Tt%67S1T5USco~I;A6_GOy1*>l(ZT+If-RssydMA8cR0!>hB;%1Em}JlxWc9k= zC7X0MVs>nZ0PS@idBup}p5_khRRPhXjTKubQR#7JE;mM#=ABlq7Cb7$KyU0=+Nc7@ z3(;Vx_@dA4L{mZ6V(GNpRaKoJ2M4c**b3tT%Q5zbbP|#eKUqs1KJctHjqR8p$5+du zFQ4nd&ioVQPm>Af+1O6HMkw&v@XW;C8kbZ?-H(_2a1vW14o@y+{YL^0PiHK@0 zGQYgMuEC-2<8=IbRyew_^1+1C+($cPCefQkq%X>}Qv~v+NJO=EWVy?0O$%zi{c_qZ zz)YLQF*!Agd_$c~y;Q0wJ$K7dVP( zaW9B|G5$Um4Vw69@VLW&wgKG3R^rgq(!fH35R$MXCc82QNap;wRDGXXWUWnaUq57I zxi^u2=!wzL9KetrWrURx5J4Ce#XqgKN@ZJX;lVykpX^^$E~LkrlS|=)n(`!cCj4ah z6HgvO)cJ6ZIV`?=Lv_UxW647Gvz)v}ED^XV>bK7<=+Q1FWfb9U724I+ZpJ%_%NrlQ z@e;abp6)go!$WPIhAM)pUHaq}bEH;qhU-n{j`Qj2M@=mSoV%V+!>hwKkn*8IrsUOC zBb>s!2l$an#(?1084Wt-X^-dH_{P1Qoa_`lpDJKK#@Z5F=3~yIjl6E46&@{1js}WmIYVXIQGsIHgUKG-2~v{fur!a69H%C#T(6p==VY|I<%-Pah>t=)zyQ*1qJ zEksV%KpPwZRJSC&6ot2?FtYA#qH`r*h2>%@`)$qCC|k_cY)3*~2bBqy1K@egMsF$) z#|X7}vTa#hT}oICBt`Q-Z%M@fA1md98d@s>h*6o;mheu_#l2T+W?4G>0H#b(j$vEi z)z0?D=^ct5Y$E9+7Sb2QHZ=O1#m2p3l@`UydW#662hmPdM@LOUm9MB}&v&l z3vMA0h`=9w^S$Cd#=UbropA{nPha|cqI*)dGEhH}OEb`|3^Yi*^zuWZg`suL()6}N zW8w=SxRddOQ)biX-b&~TqHFLSuQ8hG*$P3rmEk|4pfc8f21~#7!NYOTl1aDJz}H%R zcb!NRYnd011_cHGY>x*9)tHx);-8_)n86q01)l|XK%qziaN&WRhSJ%&<2w7$Cm)`c zQe;Ggb{TEG?HB9>rsf#EyeafHUo)3;~|Ow zlbeCK@vPcxNxM3a7?KDD?>ugPK}=3go3@CWFFoPdy{yz&Jj9)spI2(#M=(?5D2YML z#$DubcJ_+4F{J@@Y)}YE*MFSxmF=C2bo7jUE;Dv-xITJ_NMts8gR;(L7t;(ZNX#F- zi$1s+ZB<(nb5<8qe%wp$=Y=vi$M>H{Wrp%tSv zo`&VLzBgQ9q#(WMmkuIEmC>8yZP0NJbh-VLm6#*L(yg1sE8T-b)8xr$n|@6pOwF|R z0(*LHLGcRms#;cJPV-oO(yV|8(z6wMPWmm|(af4==D1sfjJU@pXSfNzm39&AMW%(q z9WfknnVqWcF2cge@leHO&ru*_a2jDws7>u}VNICxK9V@%G03@nv}Gohs|9IFNNBxo zxb?z4C-6dNlzCWQ3_Odfg7o#A`X2d$uCIDw-ZEllse5a3AlEl#2Lv;;d1I06>RtS} zwHq(ozG!2Nj#iz-ThwI|c)$ee!@DaoT4mhP{Z<>JvxbF(poE9Z@bVrJsk(ui=-T+a z2O~?+dEb+0l4T-~m(!uMyu zuc+31UblDbEv-!X7df{D((#eA_l$=3>E>$*#oS){bcf@DaLY#loO0?9Z9U<~vg*|n zY%x+X<@_EwcT2RtrCmRVw2p6G)p-Q}pqwh}?*7Ols)jz#jxz3)Et_IhH zGZ9II89aJY)bT?JJZvK7ZI|oxhr~5$0u{VKX$*a5y!BhkhX=#D>>hEj!jy5dW!3AZ zRlGxnvSw#LnVE5!pbCwthklj=ym2x@mQ9)K(Qq6J1VW-ilWwo- za&5}sCv&ZRq>5pZP$qR=PnoF?MoAMpMq$<^Cpb=1&DW`uaIcz6DY;PGxWTKaWrA@= zJ9`M^7LB8#Q?K+R4te4HuR}GNx1}RE3RLpa)3rt<^@&!~Fqyivh`lP-Ge}#iD>QkS z-KXs;qGXF2%SVr=8Z|?O0FOqEcM56<7fP%0Yy#Eh9}pxsDk$u^_3*;fmv8nj5EZ2e zn)4Rwr_p3+z|Sx*so__f(~MZl)xO-t#qx+UVs2z60hucYR*Teo7oJWG6kCOgv*k(! zO4$wzv*@iY9e0&A$}}#%N-+_m^2PhSel<^+TZU6Ykow{jH)PRMi>^+6WTB`$bvY33udZeBe>!jw2!L3BhK zVTGEH6QNfvvRXgcCr zwDg|4Bdhun-{WMJ-k8{Up2kLRJ$V}=)z>7WoetfLeU#XnvvwbNUR@<-m$hL(0Ff^T zwd@kird}Ra1py(cD=v^fGk&#f^YE}fxaTf65MhHy+YCO9y*ZfD(E{=#T84iwJI>Bn zE5~1a!G#rw-)r=aK0f-97=-1x5ZBEMKig+gawZ*;4>f6>r7`Z30P`?!o zwijmn;(wke}g|e0D_CYOjlgB{0f>;qw6GXIy2Z#Cn3Bi6t_0go( z@#d-FWsld2dTnLYYmZC|PGQs(-N{A$HOm}AZy)u%;1EtFyUMX`ELr9?SmsPu@ofJ5 zXk>_J7*Nv}n0SLMErf4 z;j~jypj=jbVJAELDM5Bm4BMO7YC$$Jm>?Su4=;Frazdd(N2^y;xWseNdFJDA?5nU3 zMdb4pK(Rm;0|jGF_C%TXy(8ee!?3y&s4_Eprgoos0zYA6)*MbVwBw8iFHTM*3ceib zlnw6(@9dTWvBA14BBos&pXhF0t)}+Q&0Is@%u(e8Xtp_}8Z9~SY`@M;*kC&0YE=a- z5kj&dpuC%#i~M$j_l|d5X)hSqwC@ZoR2c*^*y-ZPC_Ysf-x&livLNH}%4{@89M8Kv z$7o-&92H;eF;rA_ud#yZ%>nitx<2K-D&Kzq4IxzI>5PZDVN7LLwz zUB620$hrG8-~w{jyiY!%q_qw?rDC}%*dYUdsbkn6!C6H%l6%!w?3G4@CcCUiNZ_~n(x--c-_DSMsU~ zB)EfBt{5!XK0wuuh+-aWUGP!ALnpQPrG?+`jsUUO(=W9WAMf zIJP1)bEhS87u-%8=alu7kmg|oDi;AAmM+vn40bv9(A0(bx!|mI;f;a-11_2_6It^{ z7exEb_D7cw-j-Ab*Q9>AgKg#Z#HpnnP}bd{sEZ%PJKMQgTA9cLN4?5qMS2VRbbFmk zPCvj4N9pl^U!@TQ-s3kEBV(hZ)v{8i3_YP>RlQ!^20hBR*`?Uj`E>=h3z7Xad<8~* z{92m-^F9u6cPZ~PMqFy{P68l_H+yJm{k((CnTRe9ETCxi4i_U~V)3~)-k$NZ-3Ovs8NYThlqyVPj z6+NciGGH1R_q0IjQh>oL^a0rLz*VnL4(?|q9Ba_n)V6}>=;IOUj|L+@BAOP(&956v zCf;<#_-LOp6c>)0`~|&0&{ADUDRg9DVt_7%uK+cj5U}Ao<@jd$!ph@$q=9G-+)@PX z=b&^tkyx#GzP%~&>7@YZaA2V4b5`wh*L2Qb*E#K>HpY9g7h!PlV=xQ54q@$-)5=zh z<{SXKZ(?xD4h~j8hfM)AK+U7Xg?6S&*W{UJ^Y&Wy)d5=JBNXY>2b?P2#YjCp4ZZ@3 zp)2rvbd@WU8Gb%;^#oa zrSIS8<>H9HZP47+C9eu-O~&TUP?hyFw*}vuF7*X)oYJx@?iw10E*Q_>a@K+F2TC!V zEj}XI=+!u%D?V$YCUA4ONVJ_&GeT4PL}&T<9F?Kq8vRu*Jv~sO?jrmnpqYJzX)K z?J@ucJr=z&*1z|O?nUUK#sRmVc`wDMe?fA7u4#5A^+Qm3rz*;AaX;j3{m^nFN~kBq z3ecCwfXttWART$cCY#rW&HMK{`(Fli`*#fcKgV$4&YuH}l0%8_?&bnG_!3=~sX(_@ zJ68@50!WwO88grw+*eCiy!i2BPspLc2YeYs!%t@z-0(P;;4C1N865m=!5sgwthcAM z7J}1LQ&yH7J3Mx-Lt_xX@%??X1*ajay#Fh}uV>c(72u&6n6e!Ao^o!vO!Magr<$WC zF7{`wT{u-OT}*ToUSIk_F?A}u6wl61s{$49p`?DNfUt-=OtkiuFlB}guaN(Al}242 zd`NKPs?-s*7o>oN6o zbl^K*`z+iGJX8pSd_R?LMfXd=8Efu%D ze+Shad}sRX^J(rKI+*F_M(O3ZpiV><1Z31{&LJM!8xD*ES>s0VmcAqy03sh(v>2?5V15?>XRLSI+Z zOtQ})Zsj4>homKq$8|B*2LU5>9(~OZldMXcep~I=kRUM^Pn9mqQG3jtUE0K)saj{Q zp;AuVM*I{66E!O7F=*(GvIdTSaVL7K9SJ3-i+THGQfYUuzHjia#-=+Ts<0s3@wq)s z4b}@t{g+$6&Q$PI!}6L0Vofv7;~JiGv<)(^ZG^Z|r7Ld_(vXzKp3iz7@Fs>BR zC;p5^RN{*jI0)X7e_%M?vCv?5l)mu-t{n0LdLGObnIaj0iuG3=51^{93x4pIe{{yo zm8k1%6r?_sPz$Fi-AK_{IT_0QYQ;wmos?75^61qLe*ge}dbv??Q(JWsn;pJ9iGA!_ zl9fQ8x4^vUE+0I&<~#(!ugU13D(!t0Qf8Nf6}C#4`Nc6JmLuz661+eT;_ns^OPQN@ ze%1hCe2eAR;0Pmma`hTfSz3VK==!@dQ&IxTHmleS@95M8ZDx`b2?x@!P^Mvbf`0jP zN*(_Zcfh5$)qgPSt9!oxnuwH(s=^wP4-FGvMgp@(>?9iCU>N=S%#=IqpD-}ceO>&h zGVOQ0#PsLW#e*Vu3_2QYW39Jx6$xoV=8t1DGqLynLQsiFO zOWS3PhBkK;&F2vI9iH#UptPgnN(tK0o6z$&(!}nz-;C=K+eq#2F}vlr&$SBb}sUg|4EjRZ*P-#bZzpZ5cl8 zrzPI!#tJse4f_WBOg_@Trdsw(OaD6OuQIJH#CDKbR`^jfbF5+n+3Z>|Yu$kipC=V3 z+g%Ff#@>CHP!isAs!|pDVBM=p!aNd+RJ5Iau<+|FX-INt^zCXd)irZmFZi0q*?Wbn zE@bRo(mQ~4hj-jFKt*Lmw;1peRSc)Ko79RWG=XSAI6q@{(gTsZz4Jzy_Kn-kA}TFm z5qyQO$br%03}7VX$FT4^o}XCX{<)6620j4L*GgV%>6k(E6yVJ~n6?0OVCF~EWu{xr z`<5HLZ~6dt^tBoqTmmAr6LbnAe=Wv;wDt97n*nTjZrLd8x`=edtqbo9O!$ne@iD-J z>c7P2n1_3^e{wreuidR~VrJ$85c)D%%SomCKhJbAle<}36mQL%-edTzQj)e)G6Cy1 z%8_7NDeVQLvKQh0JTMT^91HU7u5uqGX?dDA30czMIAkX7WT<@I3UAcc-TN zLPau+pn)sUf3;0ngn`inM_;YEQAV#-U0z+6eg%IOD5JuzcF*HZ;aRdjn|vk4LQ4Bh zQWsW(mT23EqGpMhuU!7V_+U-$=Q+1yo2ZzTrYhYq6#I*6%d8JYW?MpMKj>Js#w_sc zl`(y&bm*RVF0Z%Bn923-u`3VI zz>b$2^!fBDH@M+8!018T_1ITueQs@?hg(_fOz^+DKNb=Fc3JsLj|GR?ZhDiiyet(W zs+>2y=_<7C)0xw7$0uV{Kt+-M?I;DZ|7JV9>+E$u8DejUkJ3NdzrHXGTUpM~ilF;e zyFuvsgC5xW6Yt{p=H6 zG3{gdL005jadAU~ZSUDuh2-GXhNfHJdMTSFBkrw~+C=VNFVjkOk z=^{D9iPRV^->zC0jlT?9Jf9#`?4i-OAQcN`U}}j%BJ$hD$=u{V0r~!(Ax!s#vS4*i7a9fG&!!VHBL0xZhSZ9Iw5;YRi80 zCEOvmvin+uL66}tRT|&*s*A|ySOb|dGtw|HNBSITTH(R!ThDS%{gx|x>D{iTF_I0> zBB~YlqMMu=ZG2e+LErq!BDcf|^{N6@T(+nE+zPM5sqaMXO^L;nw_w#D&6)(Mbq&=4* z0(zlV_%g=r3|uj629%lkZd$?OTIi`5N2$_5Zd-i{Ur%;HbrL!KQt4gx4UD1!#B5ZlvcklRajg6TU^tG^1~)Ze>dOLa3HS; zTced(k%3RO8MH^-y;T~eS$Zo$t>04eVA8`*NbGdN#n`wkTSMCjHgz8Nl^orgnQD$L zQtOc|B}#>RMZI<5;%3KW)FQt)3{lyHDprTNYgN6|I6rKqA17`%-qWjSt>OT43?r{W znsVZubvN3C)GcyRozh}?gCZ_wP@I64JpbK_^tEhclOpdFlGi-lT)?bcy_$)$1@yxZ zf>mjZvog3NRHZ1YX5m5S#e|32q5(mQoDbjYHszDC%!T~KX}Ag@2Cmj5eQ6Sp+MPQ= z+=CSF>)bPU844Q?F1?;HExTNiIS>sQT8cGubkR;HJ9nyBzZV*AdNum_gxV51EQ53W zhXwvmZ@vxM@f`tZr7!uh9Fq375@-@1pxVTHcpnd>E zZ-c@iV3bxP^K#lY(h~@sX2n0aesD+oke$5pKkTG$b=w}oh^;}|!)T+}=5kWHe_-H< zfR|F3TYv5fb9t_Sr2&UUJV(aq63=qeGt&Vt=R%)WvC|fmE4jWH%l5>fDrEzsH#a}9 zqZb7~eoT`(j;x;Wy8e2Ueqob)B<7G=Ssvxa6P>wjJS^;#GvXgUS%Lj?vlmoZzbWN% zZ^>0CANPLUy_d7)keyRJ)OML)a4zXtP*j8W8`#jaRWJ3KK^^UrPpL4#Z8-Fvv}ssX`Tb}~^};PM^|I>nx} zp3&Ld^oy_1AxnHn2I^a@XM1U-9Knqf6)hpk0`##=t@RLSh(0?@@iNYytv|_Z)wfa+ zdW`AX&A5J;X1^Nd$0pwwCwI*^4acGKN$HDgycPG(gwB;Hkgypyt|Vn!ulE;mXCqQ- zNld&e60(`-ACrGzD3qOqi$_}XNRd>=85k789tivPpveQNer6~sJ>gCkTXoRr**WJP zB&fkWJQvI(`@!B{IrLxHLjMod|9o8>my#isq@|u~TS>`zFpx`Wpq#I%C=pDec$YqH zr3siBG@qwJO{dlju$ak*n_l_nte=&7^nvOpc;y^+w6#67^%Q(`@k!GLjkhLQwAK8f z90s$UjBVrJr_6v&w}?=A43n&(a(&6>phVWTCSHh)G6;qCwp8ouD54Y8t3ynwZBT>R zLlXA(-(z~1ObaI{f1=~io2^m52ioXc1^1{kG=f%#PwI z7S1e7LTKj3wolOhW%RUO6kDd!{qY&(`0t+FxbM-hB9&o^`sMy6rNp0qqg8)jw_zq< ze_n_jcl-RvvZy8sr_7bLfQe{n0v+g0su<2r8i9kaCLi((^2f)UGJbYRqgmXIBP4ZNHjq()p7Y3yoMx{T#8iu_#Ca;_`58n; zyQgpj&$R_5ym3`Nk}`E5sj3?+Ws^85i2b6IUhbc$e>pAtyW{9yKQ1=mV&D_Sftv&z z-R}VR@hcgHxX(R|Fwh*B-v~W{RudBm5Z_ay68F0FmBzP(=>Ks2`Tvx|OhUgjHDOWL z?3#DQAUy9`i(t3egF2&pr<;+MJ3m`(U;$KEoF`*-FrTk65Bf5X?K!nqlTmq%;$dNZ zC5-n~RMvTZ{O3z6bj!z_`DEj)aikKLlt)_!H5qI2E-VVd%`xNSCw$>HkG+E&F50iW zJd-!ojq5pGaTOh1>N2stRr5gQ&B1RcZhRH^I0Zm;qblD+Ck4dBN-lXdt1 z*+qAF+w*0IphRj2UK!XZe|Dzl!#}lDUv^Xf+biI?^lnzlb<}GesVYlJ%2^79@=};4 z1%*n>nE=J0T`IH9yu%HLia`^U?vBs&j*J6ZUNH>`R9SvdIs>8l;d9}ica&4*U+pLl zEiaybtXhuX|Ff^B0$sU&cn{pU!g;O>?qsH@^k`iCM#D74Uin79REQ}^eb`~ii2aXE z*`Fe(=9ILP?J9Z_UR$`9rVxa$qP-Hv-7!QqLtd7eA7T3f1l&pd@XJ-JaL&GO%>Qrh zpVAYL-YuZ^@tzHhGWV1q+dCuxrErGoP2hCwsiPNfBqw*^C$XZUm&0a;nx4^#h#j8i zhhzRH@t{H9l*Xu!W0PaBU!cDL%%+F31dbYFT;$tr)DGO%R*6r3_q+}_^wqr$3b7~G z5c2eLNcru!i=!zA(FIm>n%pZF9b)M%2eHj-4{y+2N&4d};?+|7oYu9kA1e=EX+G_y z6QXWR*|>Ce`?SQXhZGk*+nstox{KO>HP1bf`3G&>I3!qNpH7D)?=(~$aap^s{b>>> z({7QUmgp6m-h3>$qN37Bk+qe(GsM8pGWcrTUk&`1|NiG$6JJrA>VK7Nafj~PLDz)2 zZPNpIppXVvM}W2U(Ux1tx$r2VXMqkqF2{fX{Z zpd!P)o=-x-@mUvxeHu0E`JeLUR@A8&Gm}zOwWC*9?^Z6x1r|tkJoxC*+h90NZ1TMv zL?#qHh=&5?=O3zX0U3wm@=gkGk5OsUAM!D$7M0w#9ArKt8v@K#L{1mKra4E>Ck<} zGtU@Q;!kz5dX>uk`e%`@m6DIWJ4SJeK#9vjHr>gvKf3;VbKjow|4$JDfA8VHndOHU zjO|02+}f;s*xvcj4-Z+VuER=kg@L!@=uZC+qQk$x$iIL77u>u@pkICc$XAL%!>FgK zPttAX6CKxH#qWyXn`YK5YXq^2e@EgA058YTZhXVa9`5U#g8DphLeDNaF2&H%-Tqv< z2JHOUd#t+pg!WHd->*OY=zq><_k+ghSMTVKG5*oPSN8wwDL1M-O8!XmYtb6*CJ+4k zH7GL#OHIIh3@_OK?);;}Q?5+CqW`_Yxao~8&mnHYBRUZ8A6@_b?|-c8ieeYltZ_WnP9n}3tP_LW*VJmXwryeTudy5iWS z*-~ZbPjrTA|89u?LQu`8JJ~pt3$hBoXs55$*H?3{ZS86O2R3=$zf|V`zQ_4x=-=i< zAK_ZGYS(+<#5>UG98CCyE-&)Sw+`L?yH$JGo`bT9PNN7mnfDJ-A@TfJL)kyn5DOSK<~ny1VyG9BE1dNBU*#^E`KRgnsS2M9E>{zO-I>+hZX_s{?F z+x#01|4ma=q1acOl5w(Iy$Jhe-|)`AHAVledOEyZzjB2BiRSz6n~ULJvfBO=sUEhG zf`_M^mRA5NL`sP%JH|n=U=L6CUFIK3_wQ}|n^pUjBNTVYpZs>#>E|B4z2??`CJq@4 zC|zm(hh9H+*hKz(c)t0cqb=i?GA`QQ`ToS6zYqM6XLv&O;;0sI)OnHls9yp=`*veN z3)2$2&jgjySpgu`bazbHcF3N7sA}NgUyV>{MetbU^y(y(o8l1;vHpQHNcK87#I*V& zHDn@3!E$cg9l8p$wmahkHf(l`YYT2fE7dxGith2H2uvJ{VMtxKx**EF_Lg9DbdE_=Z}0 zlGVD$C%QX(?~i^M;_VF?Oz&HCStfSRCxMd>^?LXf`;){*2e`5hdRNNK+*~XHgygo) zFP(CI5uH-ii{PzSo7`JC?~0)S_(p~O83*-98~19yyY+4l)hHr?hHW;3wIq&SRlOZ% zdcOYQ4BgcWK2_vh1Min0K4+=3l;rMCgu2)XiAzXgI%7aZ7LuYBFwmq~(&t{8bHC9% zLVCs;KheR%KYQCkk_+3z1V7cm|zc7{pVBg+s?q}yzN8Rzi`+-YwW|TSM%CoALTzZ7+<>jw$_eg#Y)PC*r?n3(fzfi zzU{C6oIH6wbW8GcQuv?Sy(5Q*^_A-5(kzjojb>%;$0 zQGa`D_u0$(7siwB^G@KK*MFmp{yS6p_b$&kPSPY`#&fPr`oi&j&s*?VVoQYvBWcBI zliGrN;%}UBkWdt&4gk&h^w8v#=5_ssdK5ubcAFVpb7)`QQw$B&L!aoJ>As71r-S;e zMH?5Ir)+A3lo<5a(z?(g+dJoL z+7~+BhU4rz$PcNns=U1e&HerO6CzJtsi6%6WPL}qX+D1GA}(_8nynGA2fCpkutle@ zCJ!~34?I#gT4H&>M}Z1Y_xA+7^$qY`+wpq|K_$_&X>5kGx(Oz#rkeoUZ;gc>9jmu} z{KC;=*HzJmHiaJ$?)U0$<=Pfh8!18M(q^cpz0<@_ecbWYxVet(3F)#?xAL}Fh-#CQ zq-Vob_0EGS8w>=zvopEdp}@6eAje3IFZt*RJX@npU4AAuAIFGub~E(xN@OX+2=iY2e7c_xW(`i@a);;eIx8LnjB;Syl&Z zK2FIQmmKr`Aa#7;61Lv8ne5YmD;AEf)$0pIt3#y>z))5Z z(`xv>oDl(?1&%VnmZ#-PAzv984_#9b&U>ioZ;+r#vx(mX@=QW*wM*$pFsZXg zc^M#+GxItGqN*#Ttf1cAr`cvLgmUotjmzCk z>Dd`EF?^xj7~!dS@g3b!??->1?4O_iuZ#CbAX{W|e_^#97MWeW3|fBlZ}&U@KXCDm z*V`2L7z>wvU}B#NQmjY--AD&zR=0gdQN=JY!0zk%sqnEU57W3t=hw`naL1_jyQRMF zK}D>Mc>*r-i*`{Y6U$vJ`c0ODx#O%?Wpo#@>BnhT#vHTecJkhs)6i(`^2B^jvc1N2 zh}CW1vf^!&{Jo!T#&`o9P5TPwUQJmtSnO8sE9y)&La;6gWtREdzBE;*N=RSLLtlNG zG}h}z@vh+dNBaWyOWsGd z{MFPt+ZUI)`qdhc5{V_R@xR zL&a)~`&ts5LyEFUkibbaZ5%ipdPuuxCFzS|3&5xRoUo{-<4`^hnO}z59fKjt*Z8&; z2=-FzYBab2qElb0M#y}2eH43Rc=Xj)wrPQ!qHA-h?_<+q(~3-H^#qOJ+#nmLoLE*S zEz(>^u??+FWo?fIFK4-uyUyNm#?M}EpVa+(x#fiG@pty9n`gNK%-v zev5@oV^7K|GA}bG&*WwYx(2qvkyG~D zqpD+{lbaWSs{Ap*UcMCN4)EJB0dS^3CfL?Sf1q4IstbV4(;pbmUNwQoL7_%V*e1iM z1ae%(4-Qw<@ZE7j>AV+dh7OSgbkw*Z{i9>?WdkRA^DSF%(KxLKrLToLDQPJR30{4* zu4%gK^cFvU3!51p=^QKmYKH1>Xs9|aH&Q2Z%B0K}Gf~m-F64F8$#QtEr-qZ=%Cc_j zh+=Ns$c=3taVrJj~)0oFm_>jzpnJ@iIh+@{8B$;O+GqhtT?uHrK8;| zy@ad306-y50B5OaByBYaXaYzOX2WQ7zno>wtKcUREIRfX4&aw4$!QI<1d+bfdIfsh zdCij2jm>NTKfiy_Yi*3yGc@XsbAha1GcujjI@u+g5!Tm))M>KfBQr?;a+=Cp*%!Kmpk+z6_K%5v%h~tdAooiUa+TKrP_%!n)%))`)OWE zZgOvoi>+IL98)`zz-vyMO%Q0>YrUvdJW#9Sy>?w|BlKv1m+#drmb0w=hIXtA)6qu4 z&X-a*bh534Cil!6h2BNK`b2m88D%6cXg=!0(v*h%vo}N6oL!{ly|+f=a|N=}W#GGV zR+I1Yrx$=yws+xUYYD>rHfN=@p;(VZX7d8&EJ%f)OV0>eqzC!Z>@`Jet-+-6L5qJ@ z0)YPcsMR}*zy0!Nqiw0VkQwBfqL9d=#%(X0p$9>Vv z0?>Sc@xs)Ks!Dnk)J^c9)rL=Zn0(#9C=r2WLK|5)eWGhyw9WK&(oQ41Lz7`1qgC!x zJG)aaMN)_uGvc~XHaV9}Y!S50CMVzldJaWdsI^qP8bJW*3*zAsI7()Pk9b0*wCAB2 zEX?@#1N59$YGv119+X*6r#Ox-t5!o*Rx?llqev8lLA#?G1r1@g%j}*3)A#VTz>EAH z1sz4utvMYz(S$tPvoPhbio^uU)aZ%yuQ%$&OnHPd>Tm|-x|o%52<-7X$i3b=ze`ollVTa@ z+0;%ErtTWaxVe{UF`+A8kQ%ooT%B5+a<66y0%SQ}x%m@b-VNf6gIi>OrbX@{E>MCN zM)lO9sQ0;czVkv{bKRz)UYi0a9->(%H!+3>zi-nkRq-P8bmQAthZ-9hzqm`Dm`*Ro z+WVfEfG+&tjoO6=C!&UKQdj~-$9`*9y~b2A0J~&+1}&3at>+aDAOd2l1qbEtt7UEr zge>A6k1~xNDYBF@+U9e&K@RcVFd32|kbQKz`?CC3kl+|NfLXCIi9L|8Ua}TbWt)lm zF?`34ZFWa1df}GPaC!$7-IC(L!Q*N+(SavWTd@8qdC8GgNh_0Ll9ZOYE2;VfvjVvv z^Q;{dGH;OJR7l9cjltTE2EJLE7Zp0{>g|i#m0LhK#AP~oG>HXZI;;+$dXM`iL|3=r z)Xwo&E0wW#qS~Gh);Xm0u+3u0a=4u~01WdS-LC_5bTWxwSZyPxUKD?!^XSmiX$)xS zObN7Nx)szn*2;B`?&RVx|HSY8FSerJjj z!kY!(nq(uaczNBl7^?#vihEA#)FVb`J(p&18Zw;s9LXo{Th25slPk>fh$}1$d9o&U zu^3U^mZJ;slD2U_q`=9%l`G3C!?_mZq2t3!-1zo_T5t~_UZ&B~CNYbnEmD*RKj()| zsKi=hWOb+K)OloxPoH*uIJ$7}Qh`~aycu>uh{PvV+!25>FVK7$z+^CC$&ubP>Ufav zs-;}-f?_G%zgTNyJY$t+T?_*aC-NAHa7GU>N%&*(Q5zaUeS#2@uV5>XNS2kl>$Eby ziBtDwzc=Soi16Xg_Z!V=f*!^36+;Ye_6;G%-C%YK7YGF#idO7w#8JY5ziuec!}WU^ zY`60&SB7&#NX8G3=9l*|-0E2xop&r71$k7U2B~p!p`|C83k;s}+VH3bb|SJr55j}{2GFw2Au*wK~)XGp<#v}y7QZ`|S9YCrT zWhEFeK@ft15J(uZArPn{dkG=zAws|e!d`;l6K#8{=hvR6=lPxUeLb)9`sN?*z|D1C z_qFcp^ZC5r?~lnWX<8^J=Bn6~j`9S{-TyTrr%je=RoXF9(7Fj$$ysTR7YeBntCR5i z>f+NZnD@S`N12%nU05`?m6A#plxkvk6@)l>=M=k`-lJKX^e+iW1zuR>=Oo~m2=jz2 zE2A41RS<*e+A4IOPUd3Slr_&Pp$BWj9$;x59+fbUtLHT>ZzrqzuT!DU<}i+kB>$e* z(c1?M*W}?70uPsLE^qc`4KL~@Ojp_%7R}CgwRiD5SB7SqaX+?_gqTlQyQFG(kqSNG z`x^Gg8qQZp28Co857=cR1jxgzfCQt_^BihOtN&|Wfy1}ZV;u$=O8U23pHJ7`2~Mwh zjlQfleXw6n5?sL39=Ih_Iiq%`>$J9~_uAtZ1qt?I6OR`ef;FbMUSv8RZp?#F4uT_V z=bpeEaUoi-;d!Hjk3{aji*ULpg=z zSOJ9`V@=*VN!z;GTeCHFW-kz8^7$xG_O@Q`(E9D+JWJ+c#T)wSB)>Dn%rneITUdPt z)SeeJrwh`T6+i0R%sJsedu_{th737b+DHxsl$IMKD>c4D13}KWeRqAzj^ig>@v@#ej5{C*e=EpbYwlWLPc`cwE~5g zVX!3$YQ+kkcm=+--mYcUEx#RFb}jnpy0$g2_Sk@q@0DrNOq5>YzD^VsuY=ep&5{cJE}*NH6MVxI9z!EEUEbweAcCoe;UdHBujddnA? zUNjR3m55oiT5J>Vn=Ou+F>pKN|L44<8x)E=AAK~E>2lV zMp+l0d+wl8a%}TgKKtRrp8UTq(SPAR^yypdUvY^FnbmuH^eA=t_lX`WK}42aT+nXt5;tXIIDcQ9vsx(c+#9;<&&1fboQO*Gd)S_`t7A$Cn;lT-R z>N~D)>YqY=v-0pabME$CX>YDPqiMU&a)IM11BCvg$ zJ#~|5(0;o~S|q3}pWkYcABT*7blW~dFyzjz5pXH0KrbQ2*=u313}l@_d|)5xOvCABKKX!5c$ogqdsDLyp2{!$d|Q zy`y?$wsz!FyV3^yL?yGx416(|kafrzO*Z2eTCBE|ib@ogM8i3P)UHF9wh$sgE;YpojKt?u z3Zbx8&GaQfo*Nc_q-LJcKa94l`33CYX!;^Y35=DC$=%|dH>9(f0AyR;8M z4{anZ6`|1NQpCjS@WWsoap{6Gn&ak0_d<1{xKL-y)3!KpfLu?=*WE&xmEKUJ4WM9F zrJTyKrum{l9k&x@a9KsViA_-6!$)xh_)hd(DltGPUUqk|8AaN9V`_4G6!YV(HOg(+ zC*fL3dVCYi*0Z2|t#bn*0qlWQpvL+Qrn(v6TT_>h!kFF%)gCT@gHO8NcUTl0VRTYo z^nu3^S4^6M2!~158BlGguq5GiR(Sg2Efz{s!_c0m@j;}pYg2Gk?96xl({D2D43lUc z@fJ)^nYn5cXzvl<$B`#rT@xu5Ym7|Fkf?Vps+>}V$xCcf2!~nsnM~%qI21%PXcNqd+azTR z^-trN2IkPejqy0OELpo^-A-1jZMclAp~u+kM-2^LsUjrG8?`Dnv`yzXL|8?3f+6s#-p7ba>R+l@P(Fc0rhWf4^l& zZV{C&pl?8UO+en(LTIeVOaSx+Ic*@D!mnwRrKs~+cdb~d-9`_nBG}Ak!bbII%TF^K zc$AlYn>>H+G|1ve+;egg$;Tyiaq3hfXhKWz>xtZ~sZpcuKucPM_lq*Q$E^ViCgXN? zLC`|P{kJzM9mMpq5)A?=z^hOZ_>T1LxLJd+`P zcEr4!){+R?56!hj{ITNG&8^dx*>=;w))-cO*+{vxWynS7MNXR8L0_$2w`O^|(u}{| z)kj%Wuo<6}mCc}p+&mx7DIg4OH>@dGcxt@znNYDjI155Hye>k+;uv2Y5e}|apGx)M0XiPWTPXpMF$M?< zF)ET)QPSU&cim4U?z4%ce+YLfFvA&3X~m}^Bdf*trMcg6&1dgD5vQGGiVcl2kXh0@ zJu`bAQQeQ;afMFq-kYi7^~<%cGC=_r3Dj;bO5)Z{Kmzdtf2+Oox8&6%CVMQkvr!gJ8`x)>pI89fs(6Egm6 zjfSbM2SM7Tyi7}GCcl%-j1wL@#UGx0YsnlGhLm{36P{s9x4a_|z{|liY`RpPY2jIK z;V}~Hf92>}$Q@)$l2G+XW5y0wMqb8tv-E_4@r8{j z7))khV7UkaU6pQ5m;B5Ub8pZT5zC^X~gDabsRBHl-3^*d7A2iBeewxmzD9HZIk zR$QwIngivL5K>J`7FmJ)rBn>Iz-k0rQI{PWp3x#Z5wipc1J6}Y?|_p$a*Q5NTj8KN zUV>-8EqWLfm~(pik|Lv?~++ii!WXaB~)8cin8+YJ8dRBV}9Hn#|!G( z_uknwt8~{QJaiL@t!$ipHP{%@udX|1B0Rg#y4593^9kz2VN}1|& z&$DmsIGF{@ckS{o;h5cME&bbZ$bi(|!@Db+V!com#(y`Jo`0v`>Zqh`jGogm>J#xoi7QoYi zHNAdV;dWYkH(Ky=Pfq^6hCVqv9MIIzElTjZt^Uy}+@W#S zydjw1MU40A%`8qj=A5`uZU^C!I*yE%`aMqA(eV7_0Zmsqc;Z_pXU&W8?)z!pPFnr8 zlE`rFHlXroU@JgTBN*(|d}VPYP6n&xA+}h)K$y5^A8iln#zq0*bFLdBnt3VmvGcgd zDz9LwKE(}sB0kaaAPGMW9!EA5WOI!8grt75C5SiULaoL^dr@V*6qO+F`|b(E-ueGvmmQqRfTzx5;V zyyHoGr#qAC+-f$l6J7~a1Y?om9n^di?p&CSW%hy&xAwCoLY{A~(zov|ZwlXV)3{Ds zs|%2CRID_qa6OOhu{h^nWo8CaMK<@N7dT?4>4T(DPI~&cwh!=J4B<*L`IL0Yn@1sE zd7SQ^OJ-V{A*puX#aDcBkDemzm2z<=?dUUzF^QTG+uBWV5KbZDEVE11tW+OZuhv-{ z8ci&jV;?ja)NpQJO5H!f(&9G!oOAljP$qhCK&2I04ZTymYha=rRhhRraQ%?y!8kciwpcSpIt#ODl zcMM2|6%|BwPkRQcQMQR0C>?=E?HS}+9F(^%kjzP%9cmF0wFAw!{@lZ|mZ<;)Cp(k} zob_JyffRb%|V&<0@u->WXB9n8 zlUn7@_xd3?!A{IOF7#t4q>zY9OaoksO@G58iETTz0)7%G zix@Or`(f$+oJ&Ym|I`wxwPg1>VpFQ`hq-+tX{D1f9LZ#@lwzEx9rfi=gtwcyvX=ML zxsk+jc|fNs&HVIJRvyzmAQbRTR?SR1iRB?lOoHiNHC&+E(K|p=2wAP($8(U(oHS}~ zi13-PC+r_e7WJ&$h%V+bu|4OFsxY=#%gvJ3grtK}Ch5hV^e|5P6z0+DA2qRswI2Nm z$Od23R)G-6q2S&&Ui3@ZyrDfgv0>OU8rN$+L?7#~SEuXezosrm^V{`p1R&Ww&3+js zW3Dn0FT9g4GxsxJvGMgAI7W3@o&ukxWK`R$DxlPqNaA$D1!D7y=}Gtlyj$#4qxEX#6Ml zeGfD{M5uXVR|p=T0krelBnR!EfkH1Qo^3L2Bf9q=$1**!$olHx>r~!or zfbSXBiv|YUi7$Rb?{abdFMju9clE#Gtp51_KD`#{eEyDWz2d=+UgmBkA%E71w_e0& z@C&qM8;^*RE}7vu^4t>})t{G#ax)%RjHGgi=!%7UiQVDY==-eK98~UC^QL(tG3g8g zgK#MHy29G(!80RH8f_&zwYOghVez@f=gHgABG;gFw9k9wip%yM!FIKbfHeC`KZ0{VeG7ialQB;~RwvnoFlNAMjJM z5(>X?28$@}I zX{9F>&M`q{RH? z(>omSh6W=Q9nhgUk8!wpXDD442+p=I6b__koapS{G6f3(P2J4>dHL{BM{=NTOO_}! zb!yW}p&w~0;{#Q;xX?CIWf8MwW9?a1(H38Dgi@P%x(R7%M{PdcE21gLyf;Ky3XiG(MPwE z&S*=Tz?__2`xl&qI#m~0RdJWn&ic=eE-K{U%H)-63g50HNLdwK2vS(6;o@BN2Hq5N za~F)A+?bshQz^$I0<#O8SRA#Gf>^#sAgFc?69!o4z!-uHKJWC&K&@eHr)^uLjOwbV z!6pH(&0^z1YE#Vi0CKSF{d zDEHqgyW_3+MG6cJk=dXyOQINHKfAMONevZQKWk~dSnh8NC{pdYiCwEGyVRd_5bDVZ zIL4quP}0vE@^GKmO#@Q9o!)VsBKmMrys3?3W>>mrkpl-c%|;Y9&4f;YhqojVOQ~hY z+Lp&Ps4(Y&IUBit$iRGs6x1D8z>sjFV>xNuEKG3kk%WfkVJZdQ$_1|bqxVoPj@2*a z!!w(nQOkOU$gtZ%>Y#9(E6N+p`qnshG1JZchuIM;@D8UWuMu z%U)uU;t=h!WE0B>s6i(K;?=(ypw(g6s8Ba(^{toXNE~w}$H}HI_Ba(TZ-8?E9P4*fBXlA7(uO`DX` zs~&ue#duc!!y%7y2d>9P)aZV z|Ax)@bi4VJZ-2g*U2qM3F|~&l#lHMImH1;G>*G(LA_wcDsCFEL*}W8Mj$P@WQm21w z#GjMX{wh=RPl4Vac*%d6FY{Z2e);+50o;FuiTGuT=VFq*>XLMgOK`1M#mVRa57|i& zHP%+k&%QF)f7q6pAV@pdTUWD>2j&8ps5sddI-`%xd?(c<31Zzyy< z%3O{{kc%m~|IG(sM#T@pjF+2zEQLjpK6FSgWTn%{Utc8GNrqtEKua?RN2y z%zofIF2n5aCmcQ!c>3sHf4#lnfA9WXO!5!=L=lSxI!KN*6LGe65~u9(9xiiMOW%Qd z`%F8bNh`s%(sHrAzz9^R_tDZMx=6J1-oR2n?6~t5VhksSo znO2TF`!M$IIblf*Clx@mge07E+~nnJjj?{_VN{zNIHrYLop_I&6*lRu9`P$+nxSumjI zYr^?a=_cFUjU7(HY!#JC+eIip3}`I(j`+PF`9L3PmPTH3|r(RoGO z3dlI1vU?}i$tqJet?4z!NIyrAaN3?1CECK_Fi$O0t66Hr?q8<7u*w(DpuO_y1h9J{ zjs9*70TWWw@O6+dP1ve5n4rpRN5;K43k~0)7kuvJDKW?XvYnhGGAD^ELI6QRj444@L)4D7e^090p2roB?k(Y;Mgn_IB~91YCBu=V zS~`zI1*9s@csM^l8JAQFhX;l`PUoZ1b`pxpieKl`n_*$B}Eel%gG(s8#g2D_9r@r6SjmuO6Ea6icmf(;oCCbV5!)1SKEGg8fajRL3 zg6S$~V|t;=Sb+AI6|{@;=X<-N(Z*F&c-<;_3>}bUvjBNh0*ff;K#fqe)ye2H6Q$I1 zeF+C_6l&~wLaNOiKye7sta`xLa&%KqQ7IM3g(bmq%cm{zW26bOo>Skqm2(DeBs#pK zR9CDYT`}%A4y~M4nc39wALfyFQ9E}eqC(55BJ z1)fbFDx6K>ZCQ=D&B;!3Z>*SI=#pzC`8cpL@J>DSLKge<#Zzze0TM{!)XyMCWwbAtc%=;9jAcOyiKijYF3b9{=<#CzoYR$w-o<4A$rvB1nK67c+->>D$YOgQ3CD zq_*tI#ww{`iwh%+Y_^t;^vHfRNRUHa%IqK&;-a!# zfSh~|g&7buW;p3y`}4>Tf;e&`fN72 zV!g7KT$qt!x`ZGZ%+?!`v15Uck3pw%LU}koo0(Zymq+F6FJA`lA^Xy+B&)iREtI9p z;~om2=Yx6|`rNJhonxAHQ4zkK5POb~^Wm=A7~xD!Dxz$ zUTN&PQt`IlT5M)YXt3sW253V=TQWEG=r#N`fr3Qsr^(0a#=d3GmC8SrbkbH%bo^5T(zCZic z+%x%=^3Q*?@&59=|7!yJKS3CN&>8y6`}?PD{J*1Fe_GaG{q|2D#zA-aAfRb^ej7;U@1puoBP7`z_5JrW^KYQzr>ZWDr2cMvL zRqNgvOQMAe4JC~qw%I-Q>a94jj5*i93H-GF$Y&xjT)C1kJ!os*n5ALJpY=w_FyJw! z#iAG9T$^9`0KX;y9A_JI@{&cSx_G*cgjH`PjYSES0eU?A73klsH~Et&tgvIJ^# z@kHK4<@a%nU4_x3I?Y8F<}1lCZj>7a<~v`EIL*Vx?V+UO^(`jHPX`_~2((}iw|59-W4r8ge7W1hEX)TV3xSSa7w02!~qPV92~M5@GGb`zQnHCEC<5OF6q z+}FXzdEZ?OtWP#6v08pJ6IeQQh4%Ri-9?UY>s8Bjz=mJl3d6u5_DKKVs-KK&^-`t# zv`}ewinN3P4vHtMzc6>4Uxkx)JQ(8ya%gF4FBa!zO%I73i*@RG?r*Bx@c?GZMAH{VjOF6i4iul^}U#w_)pig!dy*5xEdGkcjcE-oFA2qPGu1*#uZjp5ACMx_BUax^zo(b5^X>Y1&Cq5SS>OQ!NEkt5w)_U&vr`#oOH4z z73AhLQ&Vt%EW~mQA~ac0LJhKGt_3INsY`F#M7Bo|V1KLyqkCDew0VObLhRi62^r;5 zHAZY>e60WSk=o1w`hj^lUpp8oqUXQ7)Y*TN8VyZyn;-x=e_AKM<20hAZKoF;Eq_hj zjo)#>Y-EFDYPYt)mOB^W&jxgPCfK7Vz-%%@3U(M1bLGX*Qb&Q!;Ar*AVez~Uk~ zeSf<)^3PQpqyuVwykStjHWgv<@2qPC3u#DAM`?F1$qRq9qW|0v@DIYF|1Tmef2tPq zSB3WesBs^QkbR;~>U`S`eN=p?cUX+;H%YQTKhoT_Y1ySuau9|W!$+W_-~5>f+us}T z-?6)WwqjFk8D7iEDj(0AcQ~(|k9c6AEoF7acg|=XQEWn+Ml9z=KK%Pb>uHgja&MO= zjoSr2CX$O`YDtIOJf-q1vt*OhNUQt2U=DTluHMgozn_ci9|C6#$EY26*Pgh=-lzrS z^=QsgNLdmBwIAdxuMahpfygiFz4LOX>I-^F?}G9NJ`9VOD`E8+e)(ge&AAPdy7RJT&ev?aMKqV zrM;jqsVEfjN)}Lq5jG{1u{YlnB0Of-VL3|y+|Ph#8{3+Ligg-bxIM9FPAiaWC2I16 zrp!6JwptZ4h#@%L-NQlzkyv}mylz;b#3O<}^5CcnQKO#+X`NM=l=hYKndQWA+jm@| zAkDY^tE(pd5yszkE-F?ysWA#k7(s}ZDmLMj8cCv95n>^mTuTV=D)LQ75u2;;9O58O z8DHE%l&|SuRsdJ32m4#+8rNcGpd9K|=0F{%7Z3YAzseqr&DAI;-KQ^i#3Lfxc8ud2 zedI@zabVXjN*1Eq)s-r@PSlM6;jN{uFa+1I(Ogr@Mqq%)HrsjL*}ozRWw$ecIAnNgQT)FB=``o_WT+NdP}e~OWV znMdX=zj+8nyCC(Pjda1(@cXfEnL^?d7yYPXn=P*S^$;`dq&LH~4iyfKSl+930vbLT z%`(_`HjwqR0U11>%Q?YBx)dkJPj`>)MN;@3Ws2@+$-Dzr#mK{z2J1OIcb(y$W7blH597mryT^gqqW-fT|yb}l&a;9j{DuttfUzg(DaJE%(B*#B(Ere8H zgRTz)9Jhvcg<}_{P!X{$fY|Y|xV-dl5wk}-$Kw#G-K1QgOIykr2Z8v5>&bzy$99T` za?#vsg@a030V+8;=>}a9{jAiU?bRQC{1VIhhOo2iDOE`)4hrh4%mr~?hEIsnF%+Q&e{Sz*DiYZ zcQ2nt^G_T*ko!u5f05~#9v4s7@obj>XdUvPcwARpz__PWjOH}3%JLr8J`HJ@5gY;( zu0xN%fRqYdvbGv{-XcrLF!jusz9f+ zuDxftaDf0tNC*biQw!>E#~9)klbxOg6@t*E)%A#p_8uKDAsqJX->m&!%z|FU|Ff@EIWa528exlz2OV8rBlQAJ~H zo1ukEqRef8C+;x46GIJDoEa%(bS+2N&*6)1yy`&X8x0@uq z8`PX`)H+8wOPJGsq(#7(^TK}eo1HWoF0spe6?O!uvF`>0IhT(((stnOVT;G5F8o2G^T$BpO7CM16p-}r71B--Sofg@aCzH;^ z3&pAA!fG@AjtkTx;!R4f77B%Gp+f?Dl?|DWR8n4Zg$4r!;=>uJAFx{49k70E-7Jr$ zS_junhiFG0z=AaL)9^+Hb;TibHT9Q)=KpE=Cq29WI6Lx(jt9OfS3H4W`95kjJ87PT zJ9z{Po=FjOh72I!h&xr}C$X+hwQfWX&vOa{uLFXk9em9~8i_TPlWV#hu1IY+AT0_*goYZ0w&&$d@S9yLnLj;gyCDp7rc)VZ-!FvfSy;Q} zHZ3Ie!hL`zmRk!h)c|s5tqF^~=|IuxtYtI{p&(lBHD~CpZ8^@Z+-`bD?>UuDAB4gO z@)KKS3(Dk_lY#5#Mwxs6W*;KY`SwLHu(?~Q*&zD6uQD~uVHwrRjEGs7n z<*^_XW!Idby;HsPjr#uti}FCg#)Gf{FR@H>Z}_>JFa+M3e4?oO6&`iC`Em=`VCaDg z=`_KT^ut8gSe9(qibIdZrTiUty#?QqSQ5@88fI|TsJDE5lNW)>(~YN06kix{ zM?5mBXip3|+;3<;=f|+D;e)M32zr0_>Va=>p-COW=l;Z?aN5+ZIXbX>fD&&*ppx@E zrHt2&)wvG`W=T}oH)oF&Ar-Dw*;&wa!h;(Q?iNk4g>O79I$3Deoy&Y#zS=*WKB!5J zHtp49O2cAW)QoFjm5%FWtuH5^aFDzsA2>VnKP_Y~Q7eBVMxF`!wy(AqT{hF&`Ikh& zj#>Q9L`pvVT#X$wT%_2ltad)Q=Av@Hlxg%gSvT4jLootde(B3G49FB;(|M(Ad__3j zNxfa2A#{bK~Fd1gRB^sJnse`-pJG%+HC@!kVQPcq!Do{(HG1&9Rkj1f5%0>weKXToAA$A zk4Ww^J81WtmiFPR@>7LVc?lv$TS^(4{w`W;n6b6XvO!f!1>LVJ4wcyCFG3(~7qE?d zyN4vqi{P6zEOHNg?HRGD<#2lH7dH4ddD=w<{X34EJ%^!5h2Lf)LruwyaC#Afv_;yl z-(WxzZzBAw;{xuJg62Ja_JqbBteC0Gft5_%Tf|Rz#!L_1n@`y0xW&%obj{LaXvZSs zWp7@hd%FUIay^q$!x&PY8Im9niX$qau}TVUt=rRLU#HNR=w!i;Ot0KllI$pa*M*vg z1zjmsFDWqR4_&f+>)E~`0m#0y`3Bry-Ic>(9OTPf@yQ#rJy;91%I!Dg2cPH+pq*lfV$<25G41?E85qLt zBDNO+FPwe|Z1jfjR@!L;NI=wsXp8;JYZr3Qq_*1#hn%f7&!~yTgbs2tb%^}TCEW3` zJnY4FllPpXQ$Leszl;B3gKt_O-vw{ur4W%AB!!sMY@dL>|CrJ~S{JmERKNI4)$RJz zPt7KHd>31$FxIn)KS_Q0F>7dlchuuI4j`<*>=%m!`;!RABKeJz9RB+q9E*eU-r_i^ z)D!Og8_~~VZDRBnTC-myHt&~p-1Zszw}Oj~y|-CDkoE?@8Wuv!QcsTRnch7)$65aS zPn{YlFW(zQ=I^+!mQ0R+D1rK6CwPkCR6MyLpuPJ`2}_&YqI_3=ZS6eu3U)ntOp=Pnok&xZ5 zek);-V_Kat`lN*9x14Tk7}5#fau#<+s1^r0dA(8o;bY~04kzz@abkPJ$A(Yua@cD} ze_^jhTM-En@7aCMRX==S_dx@2zpym(`nyBkTX`wpzu!DL^(S6mxbxo1)86~3r6KtI zrcthH(fa#}{`7|IOG`#-Jsifl`Y%towb**S^+QWdIW5)awDgk#4*g!ktzT;RhXU^Z zrwaIvO$;k=pX}P#-3UAgiGI(1yz~qEQP7bPwybmA+9hd{FH>^d_Xe~Z>I)!oJ~`(< z4B<7UrSZFa*!yPQ8RJ%58p_CiE9lA^vs8uY|q_wf%cT z(-`aRw*r3e$0%&~P~txO!x-u8-D=^ejyG;zO2d9^%&%?oiSLab8`hr;kJQb0~27>Ccva$dG9s{%Y zX8xJGeLlkWTiTg!K&^|_3&MterV?9f`rbi(mQejKk@$U^@Aoa)sE+R ziMKe-tiTN(f6K?hE$mFLjZf-9!?~mFUZL%FqaZ_NX*0?3fsEwQzW5j9cFjJ;S+ecI zM6EIKIHN=tSzO7+3=+3YSy@>Bh4aFtX6)zqAz7zDF=1h7Pg0;K!~UKVlvjj-2=cps zDGSj&Q}$ME@KLyLZ~P_@G8-VWr9&-u@O}p-IkK{;12hSvGK4P>#PEN4)^*eMQeFG9p&CX(8G1j{bNSmeeTbO9o79@;^}2%zhy4aHqR2 zw(wfFY>9T4o@PL!+LCJSg9gg_YXApWk?0qJx_8+;!)4!mE?Fv7>pOKtAy5 z*Z%22K0Gk+l{Sfr;ykRLUUZVGfjvBKpD2+HCF^V|(UfUy?N+rnc|tb#r&9`y*6gfy zGnxlpdk3vpXsw6JpT}v#LI5PmP^M*#NZm4Fk;C~SUn%{fuP~&~7C}7I;68hKbY=ix zzw;oPx)@785?u$Vw^$7weGyY+Np0sO#g5~6yyLI$NRq8YG`q9U7jEm>*|38R%0nx3 zD{Z}(ri8Byejig5%|AxY7^ev*=aBNIc}8+}b(-aDp4T(4pB+n)e@rik9qfUvkd%>ZZ>e=0%=6L!aJ4?R z+o+&3;=-Z;5Q3$e`2uDPkFEVr2pP7J;E#TsLM2wFbsq2}wA2T=x5?z?0~Aw5-*E|F zAm!Uw$cn2%aD19;bcpVP5m~~B)I1kjZ+WJD{tU_9N5D?L9$`r@N}Y|KRO)VD^389Y zgkqhxV(1GOA4m7RO)z&<;%$wo3sQ6d3{;<`$l`r!zb@>$MmO0=v0B!)SC`)v>Mpq3 z3o`Q~#pV@N>EQ{+q21;=p1pCgeRb6KbKZRt3&zL4Lfr1{!? zV5K7oFfpLXoAiA#GXTd%70dRK$G;JVRkM3p8ys9xj@F?YyAOT_%7VP*sSb;p{01r< zP0P;2)HFKFikMQ42_31cDYB}z=rLCRnKs@yZ;n}1|LO(Xd0;``YK3ZoA#s~ubkE9t zR9HFqY@(<=R0itw8da~x!Gb~Gu4WuH#LxST1WAe%k4{kMzq|*VKdpEA&bc_2n!d?b zmC(16E`i`mUbpEn{3h%>$8AzB1k+IxM+kOJ5OwMXvJwzIdbo%hZjVE7q`6kk61q8irK$^*8D0 zdSSb~3IeZO=)ZUp9c6K4os83y{9)t&8!Olo?fsq=ye69D`70~<4LYA(Ve=Rjthy>o zdmh5WVlFa`fh4r$`lGnAnB6+>{0}G9h9?8!<13L^&Y|_!%VaGq^AAEIQT3ZU;k(DK z?M(^}3*G}4`Gu#CD(rooBVS5yLIpkfu$eUr*d`KhEp;mdSkim>8FY z7vRY5d-*pvXTzJb{Lls#5)vVP*KeQh9v3=csPlsB!2J)gsy}B#{FkIg`#mD(NQupX zdy<1g7lbly4lBn;9N%1i`ipKCMr*h~uHb!AfKYq>%PXT*8DF|2^`cv{H6X#{gT9rP z6g4a61Acyovt%7JBfmC&_=Ii7{4*r^=?`4y%Kr&*$&DY6dwF_TaI^` zO@j~!MT8!1I}46u<9OhDbN-4fuZHs5j!WeoAX)Daxh;#5vACi(Wrz(z0Y8Lr&Q88( zpO?N#Dhcz1)lMT6pWlXXtrS?fipLMy6@_-oxRzTwknolBpmXQ>bt*QvdsNJ4fda6t z;)D(8(&~M@NtNhlou%tNrQ;_X6*UFpimC^#J?2tb{RWUJ(HwSad z#b;dv85yU^jbjcgGL-r1mTQd?Glcu{}w zg#9tUf`yz#Sm>DljD2`R|KlRlL)Au}v4IS{_T=sHZ{KmPxmb7(t(%C??H8eH8yqg} zXC;%XeZI{VkkYKQ@~yey$@BF7{GY7jMH4Dq)!``KJ2F9#D)TSs%8VE7ysHmS+b zvPJ9U&JG^t$C!$xJtJ*NpY>V6zw(9Jf;w7qR%XLeddFNKK9L3Tou+e-l&DK!p>;P) zylrv^p)&HWM^~-ppibXh)G~3nWCwMLl;^=~r+Xfc2RfS>EG-%7w@r@4qyttnzYy}h z#p1`Wm?U~Mz2iDoH<~{VHQ1>#-6ji7N{W;ge@z}smqsDuJFxu6u21HlY&ugsS2@5? zEe{+9%1Z^R-*~uzODs3F!E z)wny0fmkwK!$j@5+;Ztx>&eBuLes&gl3N+gXrx!usw(NI%+ z=~G5;Pz#13OJF7bLEaN!qUv)O{a}?`<@@c(^eklCqBBb78U=A()8)CSu4ueORp~5g zjy(Q_dt9;629nBtJ)IA0j$)Y~^ZDtszRo)mnO_q77P1DK*x%%~N(C94Ja+tl$a@c{ zrqX?FoEb-~=s^r9MIAtpP#lENi;naX3?u|X8>x~|q?d@;fgmuHfP|*Bkc1>s0tN_- zAiYTmy@>PxL6IiSe>~^jJDxc+b7syx-@4!beyqh>d+)sa_m=(k_xC){#n_peS17xl zk*c7TjP}{e^)!p3$EfdmDv4uKz#GpR)4X3)BwMzXw#<}&=;Cns^n-{54*07wbF$C+ zlG>3auzq-d8v15Ow>6vS;&bNj)POyL|=a5#6czq5%s`4!PWH z2BeW9XriYaP)_n6t+Z3M$vD(a=Y#p!ahNe4fHOjLwFAi(d|5KBN9tDl%{;BV>_U2x zKwOkOx@Rr}Btvz|Me!@;dU{_NJ2UIkvXQOck_r9DR@qCM!ns2TDt+f+?l${d4x$P~ z?8KvBe7P~iUNja~Ri-o16j@Nfo@QHYnv}Krb!A+R*(lgiTL|}r$%5=mZl6{(mN^`2 zDVj}(6jYHc;sD{08OMz@O|5Z1X_*a#3IzZcbbD#=acD3PY4|mfhGBqp^eP#AZykCq zQ)!%UW8(5mq5kwNRW`gMy`;CRtixEe6&I3Jdj_)A z=P0H%|HY2w=?l5l77$%8BBESXwzty?Vnv3%h0Xg)T2$`XhiE@eJKAjm{wQ%V-aUr> zsI3V?NXj$Si818Yf{e=Qx}{XcuFke}9G6ybJ)1aD;S)+}CU=xs7ZAw(NCRS*v~`P4 zBS}mLW}le?%+9`e5R<;*W;Ntu)xKMPVJ)`a=O@I5cJxEETUL=J_2`1-hh9uU)a3ix z5bZ8m7t`TH1ruDbR#zXL@0pHo)a~8)U&zBtKFyCCL4#sYcu#vbifqN)2(W57^lf}?dM++f_{6}YW(|vc?eV{N|#=f_aX2GBs8FX22B#1%U zk=dAoso(Gxt4t#0A3KVI$T}0eyc&@a>p_+M%EMUO+0+bbVxi5Lr-e68REg_r#izf> z+~?c>yFqh5C-{FqD&Xh5{`S?WfZH+d`}+uM{hCsBB%q5uzFiZOtWW14&e~uW^4}!0 z`;mU-&_?H}*y*&O9OkS@4UoebpM0Fj%8mvs}4G(lXm-5I_t);Bx%)W=L`N1pvo};65cuFJMUlRE*VU}TPH8#V&nWq#h#K8KlPIF*8l43F&@_1+0nS4 z-*ELkaP(CG)-#c_rC1TDpUC}1f;4}ABeh9bfwvD<2L2yR+Tr^;iuO3mPSac!s5xi( zJNQE`3Rgo0h_Mwe{8r05NU^5}4Z#$KRrAUnnOSZo`p(W=2fOe5>KFav;JDue;r?}K z`#W}wFIj|SyV$gy-c8E{&Ghv~R_;G#5&G3s{WZ^_mF zm)S3mK@Gkf2W@gjQ6CBK$l_?#r8uSm7l8NIOYBPk;b8)BCw^Ee^7!YW|8H%uJO{@DKNP1aSvcfY7zYLvCD$X+jIoRn zsM<62tfLpfoAJ>jvy#W)qS-*v;J%wL5bt4gJw&nCkeb<@-aa;kH82t_w7b_7Ihp#2 zE8Tbe=FNmjbk*pB_zOEZT0nq;s-1X`$tXa;P48M{c#`36 zz?uIDx|QGg+0a>U{JQtrC$9TdcixOY=>5cXA#sbPA%Xv>lhqGdGtDeU7qPU)%@)TO zK5-og`RZlOA;KO+a;-Pm)NCb6o07vy({$c&>J6*T8m#%fv=nTIX_tgkcSNQ{g?{Qr zu?aWUJT^fA0X0hXXUZ47itoAAL5B*SOx=PoFtNJHk_NAIpkSIK^~WjrFH&XR!M7iL zZ1+@jkffTMcAb#qvX9xxof9@3(lFQ%MH@*`YH7v^zsFiUxe?J6o59HEmgX;>D)z4IU0o&agLi0@S-uw&0;bl1Z% zbYDkgrtB%EaQsNeD*$ZZK^jNy>3@UY)LTKS{Iet#Dk zm#{cv1SPkDTga;oGPQt1#Cr^;r)@VlKKS8p@qryYoK~0Kx;I?I_Ewf0v|Ym2;xodu zQag{I<>2k=K5z*MWd6N9E-vjpdYi8%v0#RJf$&~x*z+`nSaDw!I~(eX^lSuw%&E0oo)hmpRC%`YjLa0*jWf7k#WtQQhbSreAL4ii8u&g%(H>#>m zIL9~jZtiJEe&X^Go;}=q#N6SzMs;g~4Q%v~wL2A4e2k(xNs&~odPf*-I`if`#8U9< z1(*FI-IIkcK(c^_XT3=Qe9nrGG1-BYd0h?Di4hC|Is!w)gq`Lty|I2i@agku1U15% z0=F8L?UfwX}ora<&)OY-;?L%~*#*p!0f zBYsJ2CmJi*Yt~14`DQ|mkgt~95~Vl`DSDh&8r^fP%!Z+f{J!e_>|hmr&ROHlT?KoxR`G8qfolL0m=m zsVn(Kk9t_P9LC^~o7C@Q0no)5+oluGD3$@5O?}y-#FZ%>UHdl|9`QZfT$(-J<+1NX zQ^C%OCFlAjOV-xyu7p6)U%K^$AF~`uc6GR^X<|WD5bzmh$>L^TSnJ$qqPe@njl7D! z?`Q2~R+af-)q|2KvD3m;H)o{N&YFwim{9x41!nYm-Vp7qiRXa5(}N+IAn6PfYXHwm zo*0#WIVP?oc7&DtrTJ1_us@k|X1$-VzFKj8{Di7$ z&biVKVmy3k!I6mPNI#!27$Mth_vyV||LX1_ZTYINOx{g2ck!DInJ968t=?|ulZlox zF|&lIBhGMA;=^f`X{}3kncmVoFM}*FOGDN3(fU_IN|}~+a%;*1&%!9=$Tdu|K|h_E zm{%p1-hUBsGkS!(;r@w^wICyZx>Sle?IM4@hC&v%F>@?4%5}2!bpnIP=Ijc*S(T;F z91pIy%Rned0|FJB&O#U3K@F#GnDdL0rmTmi%lbzagPID+ej&QkDwh`OS)FkRmUrs@q1Zvs>=;)< zVPVFPFOTrG%r>p*(X=z*ceGw#-#k;~E=SNJ$}09QT1Y26hzB~HcDJbrQ`Q47>)=cE1^Rc!l2tO`iDKtM9=M01DI-N(`PQi4+Q!95N<#4Ly+9>{yqKmLO-y&u?tceX12J5)tqM)B{s{%w8*uFtEK zFaCaeq41d;<;w-qpWtTsYLf};e%(_|Da!{2i-8?vsCx2*Ehe1Kqt&XcOb;^}(ein^ zZQbbKkm^4KbgAlhgTZcW&F8y0n93-&#OZ-J2o<2J>O9O(Ev;?VU#;@RE_5L9X*>4D z+A*GxBHQ!DuKxXztVv9MtduCUuv8Ut!c|MxQIu}mA-E^J41lTuP8M|vNj%bP7LL)E zU$TcZG3E*g(^t0@Cx!dM8r=CiO4*Dph?Z3xRt0ZiI7c^k;tYMzh-V0^kT6_#Pu~p zA#^-1A0ag5fi6#zOYJ?QX4$U3o(hVDc*5lbkh2rKY1&&OJLsd?(^mz~+#J?M0^-VBn!+Es2yujp9%V}h`=`?&?Jy|JvQ$}7@P|)a&X&pdks-nj%2k*<3l zClgB&s<`T&0THDp#On1lkvb0!0@UD{0!=k1vH(0h0UgCcVP&zQ6~u_#n=ijXi6>~@ zia~Mw&Z(@c`N1=)-o1<`lWJ<4TkOFz0Eh!pH^@khh%s;w3fZJ57|=g)E$QPJMMr(_ ziRjcUa9`m|?#%B~i%zHLf^SI}j5Q6`euOz0aWD=ur3A3F5r*}o|LlskvSZB)1#jL6 znrTQ+ps1_wTV{rhs3T%FsMx-U)oeh|3vSoW?>t(PKYDhF)LDPH zMLK);L#OL{QE%qSzKf5a8x^Zk!Rs{Pv3!n$Ae<(Uh*cpm5++Tk{Fns!TwFK=5fue0=#taA;koqD3=%FWE=xpF}OH20AfA^|j- z9hjg7i-{88nWfTO3Sxrd$!W;)c}kWQ&566WMR@W=HH^Fubv-*k>}^&A5oARTm-;Bh z3xg3cV*vFIpU8614L53(CAql);`YGwY>=#+N~hFxtH#RaRE*tXP~mOzg^PWhvN0+W zH$cvhAI&&26=WPQ@NhF}Gd6Bg&>JSVLf}JyjF?GNCr`CqvbixHdx_ijdOXb&4I%qI zsgJ-@2_vLR9i7SCzE=Bw*@_tAU<|hykw3RqK2SDnRx0yu@9L^un3t8!k<1LRBW=FZ z#->LoC5eq})B~pO*mh~qQF})QGJdM@mR+!Ihgt9{fWret{nCk9vA5!R(>pA9{J85} z(%=m&|FI8*p|gcag7>`}EGTPw!yZW>Xpv}ecg~qv>9ktS5h6&Jk0wBkx+}*_p`+i$NZwodDA=VFt-5i zBPN~!H+poyWSLb$tISHLvBrx%HQaM9N#q@_eYCBg53hVKvmOXhx@5UtXJ|*Owu&Xc zXB)kq^9W=EMLUIsY2OBmlw2%Y$OpG13A57T)q2Mx!s7} z(2d8ldKxz09ak5o_t_UM*v(A15lUh3u9p^?)p>{#bAxrUj3Z1&%M6eNk7YxGHTlRK zK#qb5+Heb?XrW5``T4$Vo3Nv6CQ*FY_^yUovGBKqm-AVz1I?%A zrjV)>U44*664W8;@{}C2fDoW;L{*C@NITU8Y837C!mcTM)FN2|(j&#H8Q6=+)r6F1 ze6iNu>|4>@k9D?7+R*TKHI7uRmjPaN{-xVl?NU7sG8=6Y$?QtkWypzmwS~@xs(63{x(2Z&Ehf@P(nqu^?3dd4g9k6G#)p zQ2Y|fzA|Y8dv(P12srJivJ$zZ-si>DKxz}IAfYjn zwd(0<-lvpu-=fFLU4!}imvO52R7*{WcZ(-qe>eFEE8DsFB}_!)l7CTX>QVRZ4mKU2 zvJgt%wl9kh?W75b^oN~d8m`V-6t#v9g_Rn61oWl=0kbOr#bv1Ogl&~Jc0zywK-4>Z zzn+D?zE$Gz!ZesUNRxyRJ*#`JLCc0(!+5eI2)1*CH;zPKBB`~?p(EUvls?U)GqBgY zYJ9EiE z6wl)uK1;J@iKCM1Jwu(`i#zfFl|?lCLsw@CS*_;D=5vw!?TEn)%Pz)vu=j%jD!-Zk z8D?OZ)>&Dd4C=l0j@g`AmHDMxUUAYPY#!l0jpYj+s~av`hPUgzQya8@bh>GOQDter zpZiSHOm2SE^Y1_Aazu4n|Elo|6QT3_Ud_88v2}iN;NB4T0f!ZEiG9myKKaI7$U<| zjMK##z+Z8kT7i9Q+1Y`yP;fBx-D;)LJ0WgVwJa~b;ezDL#Zst1rAtEoNnFAs^7Ago3V3|%UWl2(iJ|&qn#8T~f(?zA8$eC>+-KPZwBq~E11c^^Ipc%)0%Mn8^P*JE zqw|xKD|a7mpAPntjPv-!wZF;3YP4+Juc;t6bIID&q-lnlphg&IY+D68Tb9@B25Ct8 zyzw^cpx&sF_8K2G$C_q)&Z-S7?Stf7pLs6l6Zg8aLG?&s(d+7d6Ked5-Yjj|zh$<$ zQ_evkR;c!7)Z7AiG!ecAH=rqxM$oj@fJt(l- zWgh6CFWC=@;f5^o$C*u~@tloFA7f8l*^;3PS=Z(WvK&xxz~NQoMxjZNjS~#%8-r3Y z1N>!p_xx}T!>b&*SB!qX-Z_rQXF`^|X}fVWj)zy#`=RyNrHXC)kU2LqGm)K@C!T@L z@>LNs{RZhN%6!)!A>nEad0ob@s)Ps6UJPkW1`@lgq^s^HPExzbUmA)W=9UQc-@ zXYVk`y?xnKwzJ5>&nrM8ZIP?-w0PVr<^LHa2H^c>CdIRbd=0UGT$cXUVj{drK~_+c(|@3|### zSawz5@FT~Ywx@0OM#yk|G_@IASHO-hX4K`=C;@Wx}-5-(s3sB&=qY)SjRPh9Vs=&b!cUzLxP z93E9GY=wVIazi-)Y@yx-cZ-aw6(RCsv5GP2AjJ4-VdAvyZH}9u19@Pq!T*SMCCoH( zdcD(Q!}`PDJgG+Ma`;{DJ-q}hC4Jx;hysJl+l}=Ra@EbTINAfwHWNYp9AlwOKYd)k))HC=e)d- zZ_tItrmONIA{nxd5=-u}uR(_@`d#~Xn-^YHq$Rxdw}3c7OZyBwp-N*+igSsKkE*$~ zaKAbOq5{)ho_Es&9cx;n8eL4))#_EgG^$>wAoQTzsOon4>3eU7J)s3r;z_=$5UUJX z6rzLg5v_{e(hEIqJTTM{;QdXvN7mQ9ZH~*1WrM{Ss&6SA(ZoVZd75*ecWTwjbZrTC zHJi=(z-*ou=WRTP8#uJADkcX`(QV~=nEhsfRrYdn`Y>BIpU;q)DBd>+6r-~|K?cKG zTa$@j&VByL-s+cdSz-eDXGG{P7wTWy{P$n~@jdH*wgZx`?m2u5ja}|K3h3}%A(kD6 z!5mm8ZyF;7|XIN|nBn@XOuue}bi)+7g{xNh#iZ8*H4?OU@(f%%`f zxZA6?cz)Wo&)welX0SZ#$`b)nX;z>)*Tg2JjI#PMZLK3|$#jn=EqL|x-Ox(I4W~E# z<#AVnkN;LEfje7&4fWa9?}ZAbf3`Kqv1N6Dl=LexqJvifcS7m>ImGKrz(y6cyxZreQq=yVOqoK$E-2ddCI^%XqAUK_``mLaxY%r;%%2N|#sbI<(k zNQge=2B&_yRjmC(WbhNa9!uKUflpi`G5ht*lHFc-@;JZ$LAiCu9PQ*wyCN-~VAdje zV{@nh1c5g(aySJ2ugB6yJ@};;99>pgulRV#EyMulQ!mMnlNkn87q{YyFJ#|Sx_Z9u&M!DR!uFB0h7>Sho#2NWU{VX2ix z%^?d-nzcTOMKNRa*3(xj%nFn}vnDEfvWIe>5>m$GAHzY<5*2%GN+>j_&wFui4EF4` zbTu861a>steYB^x605U_CiiW0YmIFQ2AMZu;_fEH>o_hrL=7t%ajs#8ln zkf73eK64Ic55imJQ+q*B^=g4tJ`ODva<&pVzf^>DJ?>ui_5)d_SpO!``dghCiWB@9 z%qg)UhzFdxrVE|5^taeQw0^feW1j!RO5yU6)}rAhQ{7^OdR|{<@*2_)5f8mQ1hv%c z@H@k>6{QRJuF#ss8nrSr4aJfT#Qfe)JNe--g|n@-JNoTD#eZyJT+_CsI$w1X{J`5+ zyA;h7B(jBi`Z7W%04h+n#}Z z9tQ%&F3>FpKN!~7#_iyd-tSPu)Tf>rYp&7k#+OvD>bw3Qn3#)|Qe2&XYrJja6#vh` zkepz4>T8algOR*4?7!S#hXJ}?9RY&-kM1AlJ~HH?3% zskUYx!H(cWnt5k+ff;(X;vc&LMn&kpo-A0w?a$Wc=Z=HJEPursayaX$tm+!#vo(^} z?K`EDOysXwBh$CO>WPEh_-w6gcJ2UJ6ZT7MDD&0(1M}S)3Sw#3KxYIsO2i3;VJ}O6 zgeW~~y&{%L)wAd-3bq8n5Rq$^H)AGZ-pqvk=Pp^uu`f=%-fib#MuA?o^>C1hsj8nI zk*4FL|1M;FSEt5zHyB9)hsS;5n)rC$sPdk!vY{u z=bh!jRgze9WqR|@TtrUAt=o0wVN%r-o71*nGIL~b1D<33dd~BGg{s{VSk2re`}TsY zZC9V{4UG~h27=rt-C-O+EgKS?v6*9`#FGyzRmSE%QU;bO+Vf>5nTejITuqxvMRrl( zDPvUoetD;y_1Xzpv-=8_^>L-XtCE}tSYj8ouJ8E4C1wuv;f$=y1_XQ>mZGkRE>T3 z@k;XO2kGg66|9q$T!8ZFJW`ZZRgsNCI@Q}~1Ak=n{b_DHs$grTwN32w7B;-XhL?<* zmnaN!0fHdSLm(AH0Du?b(6SPVKULdrs-R=yBG0QmDBC_-XI}%Bm`7iW&t|7>3o2!2`Vl(Hvove#|#O)NhQj zJG(`<1TO~2A8-!REmF#gI=aHPwXHlee2@gqy`tc5-LMPGM@&*)2uEW}BkaokOl!6RLL0S7_Th1u_9i)}$$LA1_^D9jK za7Hf>>F@eXW~GNR6)NL{->0k*R<&U?Ig^*5uLhU4M@2!WQlQj$U??v`Q{+a~>if~2 zsmaQF7iyUtjjMXzGD*k$Ld+UVaZHx3`C-W@fqCk>egL>s5aZ`q8tvI?uK!oI5 zo;eN0L_eI|lm5ij^5f%WE6`Pow4)*GLBWhV@KgdY6o<7E3l+uNID${bPQcXSRhR8Q z)K$8KnC^{xmX7-xlN%nj3q33AX7(8>LLo#D;K!mCf)MOf2c#hCEuQtgkq4|=w*_w> zo^KRXZrOGn_|iJx-`_VXy`&Q?otj>GDKg}TuY11d;t~P8SUjQ!n$*9UPE1xU(x{*c z(2URb-HqHNy1Y}VLSo#2N@g)It3q^2%k+vc>&ugBeW4dS;8}>kb6PvdP1r86v046I zN;rqBc!OfqU`H95R+E3*_`bbpE=)-ig>PO}H(t0X54qeLW2*G+)sqU)9NzQjQ$;I% z^j)Kv&3MRh{Wr{V?aOLDEb{TulXq?aM~~WBC{)AB>@$?vCbN0!7UB0TM|Qt*?B{KS>C#I+y#0~Z%}^|GX&Kur0>Ku^)p(BZ(AlE?S5 zgo?|S%uClN*inPRF@D)W zEML)0(oPGKy`PlU-wq?FHUOeS^?(CXg^P+7y8CMC zb>Wg`4#zC(%Z}K+Feq1jA?3U6da%`ZiXd^LY#unO2$~0cUppMCPJa*lz#QTL&KkpS zituTL4nN#qCZ0KIV`j{k{#d_V%!=vzkq_&@Q6n_~DxY1vGaamSg=(erc)nWsj)vMZ|#+jG8T0ijl;qz;xVmmfU>FRcShD|lp&|JZDUF7IhqOm=%| zD!t{|V^pwyNl(m1(mZHoO5R3^rTmbZ3Vzz>8Gg7s@a<3tnoy(_CtX-*Q{Q((TeYkB z04QDw%#Q66OkcsQ&HJA78uhHbH+;g(hm6nT@FR%L#1|szx1w68*l@^%JxKDK#t+8F zGRBHAf*L6oTy&Dr&QvIl_FUcp*pMEyN&~<@{y2MkH$dMuz|URKC%xDGp%U*^pXLkQ z+b+%DlI|_(24O(UH;ir3(=igGMYlRcF5pX%fo4xAUzed5 zS1fE~HcsF&+Asla6; zG)m0AePMb9iIb4t2Cij@4CZX(`hhe6Ol9Fcw(?i>1pZ%JIsegB{m%!iA;*r}o=e76 z=Vu0wG>c*v(YEQ*FaQK%Iy1E`lu^0~{XoT!1bcJb@;La)pSV2igMS%^2=xncam+ys zsaB-8>!3@1m&ezcfzsm90yOz0=mg@kK<>$$3j5_xTtgb?$Exq4nd8YC*3Y?KYpVRx zk&EWo))n&n+9YmUqza70H)z14pWGY3XT|uHDzPShB?|#G*%qAd+{qpFpbh@)1 zr8nzUk*z2H=FUl3wlvw-Y-5epD#x#Qcf=Y$9S}m8ItNKpvrQu&?1~y<9@UT3U#S`0l#Vb~qg_e>^Jz`r!h7_cKG$Xse zvF^^h9^@Eej$rXGuhUE+cBQ1(DW*w1_UmIp|isR_G?~!%GnW+F%4~4?i;h9hi4ogvdYes ze5qlQpejg4pXs%v3$$ROr!T9ba+FQA>dGDRHtp*IIyKsgj-;<$Z1<^XCL%q`NJx3& zAYwk-$tmdYURH;%W}!DCz+at!f9d{wpio{*NF@2*sBm=ey1B(AehvyJ2co)?^$!jG z_n-;?8=Y2vtylWBXZvvKLqla|kuxcF(AvTt_}h)Bvv!E2Hh9JGwP{u&nJ^V)OC%&GpdMnl5Iu{ zCLMToVmNf^bk}ws6#E%2MP#|y6C^V0jm5@l$hI>;!iViwa}m#~gqSStN~J98iI2p= zGhXr9SL9V$mEdNd%OccY2Pef9KL5nUDApL*K7?6tAC$YWkGA(-?b|tT?zPZ3c4HMd zGF0d#!#-!bXf65dMwx!r^oug zNSOrshc3pq3{R4ww?K?^-2!RhIf};=1~ZLKw#KKf{)N7x$#$f7_+eqTpGgXdTE%sH z>rEfDY8@+v0*w>zEQNoOpk==7GmqYR!wdEn!(1YEm*Qu_9@GbvE~cFPYKS9@nemrZ z<@=!w&Ti=!kg=`Sm2A+`& z-7#Pn*Ppzm({wH-zEKGB*ol{yjFdbW88xNzo07|Ylk$m}Cy|c{u@`n-MmG3-WW8hw z*-_m@it5`=xeJj~k$W0HaOIBP`L!DRPoDj@)A#>Ie9}KDj9>Zrw`Y~VF9-K4rvBm4 z?_=bC+tu6WYFYC}lm&E(>mE@nSYMZ!!_MVL@O19_ROo3qsQ720lFmugK^O zJ=v4B6=S{m-T$wCluw@b@;QcgPZlFU`(|J3CR^RO7~id>6W_Z;#5*?&(s_AXdc%d^ zrN5uLbnna4>p$3u{TrI%Hws@f!x~s%o>-QIa`uq7NRCu#w|&8By8`BWXc;b_zx{+! zgY}udrpM?|TtA&RM8_|Y;pO~=4k*`ge>8qoInQBDZgTT48~PRDS3^12Aal0%UBI<( zNTX-wcX{UFyT&i}zR~PrXT2W7hWA#+z0rk!1^m0fUz*{CaTzhb2z>QRE3nHasQ)iS zdCE2Vx&V(tR~sK#j_JP!8^~8c6+=7Cm>dw4tjtZuB1^{}>j&US2TfQcT~**T*ndNP z`2A-8M}Pg}UGv{t{KMVK-@o?7-G94l{+G+}U(NFuiT}4;{;Os9KUZ@9k?mKMt;#(9 zqr{{9+k}CPN^#=k^AhG5;TbtGXAlQndB=JSy(`<~Y(}E*Cb{;L9PJ@veFAy_k3?pY%ET1A0 zcJEHF+a?TA=8RfRZ^3>H@aYusQEi`n2xgnfi8yrwacQOiC4!>@)Pa?oP16OiQkSU( zF~JEJ1mkAlG<163N7#kV>2-BXS1-fy9=g3lP{L>x3@fy@?e%-HJfUi_TwlCsp;~e^e!^N4f3CC_ zmhE=)5+f#+}AEwgvv7J%yt?1(guAU}TU{UNE+pDd_f~ ze>KB?;D&2HAtxaZfuR`O5>@H;;spe|!F_=r`F@n+!lJ zNPS(9sY(2r|9ZybqqibE&=uH%vFT;DJ!tsANV`43%LZYM7bK?aoaoR0ZgkP}Sq3#f zpE3ug3#R)v^NwWGM(3)bmz9HSORpZTn5RU)QS%Gqc=1kS-ma6*JD0}!JxvHj8cf7@ z(c4j2%nUG_gsAdqk^He&vluNV$P=^l!AvUX5EWvYX*&;ermGntaDz{(Ppdncq66L-g0AaWQ%; z6qpW&n2f9S?!NAf4Nq;GOHJQ-sxdjknYmdZeJs5 z;Aw{O2+#ON#rMr1-7t^RE=IHPceHK;j-rcwGEq{hQ}`+WWj#=0aOKV6UEQ+#mNZ~y zgE!-4T$rr8CU08cxthiO| z**hG}SH`#eq19B(TwK%~hB=Q$u!WhE4|Vr__Yal+-~8a4BX&Vq`3RxZF872<>*Rp6 zev4qF)02Q_UZCea)C6mr-d^Oz@Pio2hrLd7XCf&IkH(NfrrzyT zmCC0@P}PxDx}>2n8#_r4RZqnFf_R~M3)Sye-MmsIF2*1=btj5ldIJKIhtk3X9)3S{ zw}2qHs!nzgOK;GNLB)5VLoD&Z0_TvL%EdnAGp&9l&MK6=NxJEgY)?7qfcmM}_x?+E zuWldNXFugj2M9-Q$OkW9K=4+D$@S0qwx9ti(v25in7D(M&o;|O>H6eHA!b3lIL&sb zJr=A+2eWg*xl?itQn{NK8Ml+KSGX#Tfk#Y zuSX1;50h^zm_4z2&jYR;97rFNzTlJDCv-S4&gqsCG^HfQt~*Z0DU)##`4OI{H9T7! zQMRB9g_T;yT&{YnSp}u3W>gBH7yT0rV(dE%GiPcD41-vdlkbO-$furf#MS02Ol4mS zhrUENX9Y6)TuRPssk=0Cm<*?bLTMDvIc)@?U`hwA>PzQKDN>zoijKLFytdkp038k! z&pO(9Q+NodY%5yinhYw3_V$2oxr^$cyCCY@>15wkIs_m{y!-qI=8^tl<7a(4_r+@8 z?pY1+|bJ0Eg|Lcnx1&gX^*p8!jy( zUiC64^@|rPt`3-aB#Wc6PIhHiHqN5~ycjm6EGGo^=EynK&I$)-eWNu#PgPnP|8tht zMY*fq?>wBorBAMO*|1A;ABUDD6O}6)<~ceks;8$ce(>6U{*&T9Lq*&$)@CK0B-`p! zaR5=Y=ryts)Ayz@H_9bm3=UEOhrs;k4nhxtj=fQ`<<(k*YnS(UO9I2d`U)u^Rej$KQo#^IF;MxygmcudNAv z_be~AY}WndqSj!$$K54;dFB~)Ud)UtMF$Lz0Kp&l0y}Aqw>Il%-BQ6tbN3Yh73<7X zAMDIrW=e!Al+MT7-Hc(8? zalNUlNdTa9!_4E^UGL-2_ru=vaE{x9bVaB=bAI`%d#RuO^9&zCyVOk_t3j?PsN=&!=`P zJajwKTjjrT@o?2wrEhw7Z};)+WAaFMkxg!A&s=k|KEs(}y|l(iJ0?&jJ_eR0(~94b z?-LTrEPZ-o9VK76R!lQQBwiPGM3|zMP6u9p($|ycI3R!I`w^1+JT}% z4LZ~*4D=Ovet8vzMtn501?1;k{1l8~9OW`}jf&^k%I0u~1cirEshe`5S- zC)XNq^xe3k8)Qj#x*niKYUueBLa~Al%N7&3GZn}knl)Ml#y#%J%MsmNtf6c#N z^2L?K7!-N`@Hv7@LjS`-WZHgRiz@z(cg^(k4Yxc2hkbNo?@(|r`Fn;wvT^ZRu&#^65M^H1 zS3U-1f%O~N0L36BfwQ8LNk`KKi|(UE1tG~UPi7S2-Sde*_1 z$#dAdMwy>S!|@ERu{S8KJnv!C?=&wn<|zvK6?lMV#5D z-cJRDA<-6*ALLCXUxqELmhkjwduo#6j)c$nbzEbEd3T|ZRBd9}Pl>cQ=vM?X@TD+b(Uqin<#3)T!RQp)KfEgZsOUg0t4 z?XSmRjVifV+N1@;fi(dC{X+42!%cxR=ZmJb*iC8GzSo5f20*bYmMSH>w)Bd{R-)Y$v-yD2yJ zrdNXw)h~YBN!C6>$`Z{lwMyd%mVOg|`FWkr^m0MMc{pjP9$8MVBCg!=J_o{^UK*7p zjZzBwA=B2qs){P)>pd|x z1wUOUzSEz5{?;tuu5dyia&MSgI;ZcO^>S?`o#Pxg{O(5VVh|y$hf#YYCXOqoW8uB= zgTxVUDW{?`%F%pG@VSK4q~rEm5qhzHnU5`3b7Q9ANzyoYf;)LKXy{4VtvJmM#G-3E zJh0eq>-3HCp5|}lqTDBE$%)c1Mz%U#n7YsTE`FoNdHeeUX*Nw|{Se`!s~9Iq>iO>1 z8+JtNjaH$$umb-W4$v=C*(~&C;exI%LXNm>p{H2;^3mu#-?{b$+Of1cAGF+gPn(Ce zvu3a3tgQuP=aFKGnR)s_s=NTi)Mds!$)`57p0Jv0$X zP4eXAG$Io1HmmU$*p>4j6Pe`GPl}p_hA{m!i-)?pE7?zlw+Gn0iV6+`IU9vR$I#{FH3P2E4e>K?vTfra1wHxk}VnnnNacT{)GFja@&#T%> zP$QiG0{Hg%l}}u+Mo8e=fHd&48uz{kueZyO+_iM!nkFx{3;$vXx5>$RfIF<#$T)jK zRaK9{0FFUMGur5qdxe=wPrQ_iR-S|$k?oZPq;-yTKXfpVOId^tXY5K^ZsoakVMc4=NLrQ1}$SmjNTp~Ffh??=T|Fr z)6;t_uVeRW+`9d2_Wcw1M+faYd0mN45-67QV(1g5e}*Ysx?;37zK`+JQ)#21BJFzr z(rKpD>bOPWNic2OHF;oRUQSUCe(}1+J|^#obV|g=yXY~dWs#NOcKKr=b05uRn-Yy9 zsEu~vo;K2%g7RslsD*jUhii~a);|zqGf%5oF-#sQ&btNKV$uT`@OSI7>*IOwHi-#p zh@M7khl6p7tveZj_0?RWUHK-R_FN$|neLnbC%u?$*sT0GV0UEbHY|eGetQBm33u(y z&?A&>n_e*=M#-)!Vb0|FW#jK+2pm2Px%c6!yDb#Il#4@@F$)izlUBNf13R&t0k_*x z;GC!Lo2)$(ySS~@ZPq>+OW`aL{=fFVJgUiT%hwvTEEO$8R7R^9M8i}dK^ZNJc?yP* zgejnmk}%H_(9%+bU_yZsWLCxuBr$;`1PCZ1^H4w%rT`*i!XP4(pw!EKYjxk-{rYy_ zzU%hu_1^09M{>TbZ=LU)z4GmS_St*?e!O3z&CM)2o?rH*+8+rdG4jV#2$Fr;w<6`t z&e8KQyK^L zC+#3a3A_YUXhe;MO3OOBOwqY7kjZs@6}ze9Owjd;xM0z2Ue^_zRT#NJf4>#RxDLIX0{7M@~h`gR8cbl3OmGL60#XA++?~@Z!2y(opv=d;DopWz|kf282yp zF32@p>QRw|Ff75Zd+}O4w-Jg|Cc6Y1Y8C~z+PP~>g;`Y^DQU$##>X=;ygbYSHXbPc zW1o`ZjQ3_lEBo1zA-G{S0qQZR{Dw7B<+>C5m^b44-1{6^tDDC5BKpEM?W>@mo^I6X z3GgWncDk}v91IeyApnmc8~M;!M*VqS)kOOapc|jn`8F0Lu;X0MHVAyplT_zHz|BI{%5j6 zHnd=UjjLY!FLlWmdjOS^lFDZ6rq&KRKU$#0AOSb|2K z`x1YCw?nzgpwvh{lNu97Ckirxk5ZH__1WOoU4EW2O9{ zmo9#AiuvZqfN&99y(^VGL2ZJp{OCpd4&HU*@q0TNWdZ8|%aBv$nkg(5Zmh*WJH*+Q z-#!uLt@Y$2Tihu1t3U7!lzn8DUX9c) z4IQ*yj50O3M2CqBevh(wJyoF z8NFDSaRj{AD!N-K-}L%XUC|AapExGwD*3G?jO#WO7rH%#EJ>)C3GlS|y`cK1g}8Be z8s)4)Fzzx+&PKltVsZ6#bUyS%SLfzuXLP|#M`VC)JU?kxTQgzJ5-_SwJue2eq6fcItln!g;ePh#q9JAzXnMUv&}cKSVMH zQFKElHj@Wyv(kkAuG$1t9)2p(=tN!vZT3`w=i%28NtcuID{J1k8n_yS4+ir217Lbp z%At;HX&+QQCg#WmD{PIu`P$)7$E2x5wt*GGj; zjYD(G>c{AQ92V}N^ePdGwG@Fi zJgAi+`Bt$C*7VR5WfgV4_y+kBK(}vW8;lMc6|2s#Rb?;CMi)?{i>R|+v*KCB)EOyb z;Y|HwiU7fwWDb5auw;F3L%+`{sI(2GL9A!z<;7+)?B~joe+8e$JoM>>-GtyYJ>)EI z^q4&gz1AoQOx>WM=~$xj~Z@JzrMfO@OkNUbvp zGj=a}Qb!;7ITSsggzS^(XB9f6Es>@Z#fb{_8-?YdZe>o_UCx2}oF}{omL%uB4<%w0 z%1=C|mxW|LGQOy%IHz&+{Uz_4mR8ne3vcEb5HPQ&!E4^fu=tUv2%T9scqO>&$NJA6 zhK;~vVV=ev?yy7*Fz8S=LrSzJtZ%^kn<*H>+ zjBM78#1myuE79!V7-0XG3j9BDC4Yfwv_LTXjXU7USjTBmxq`g(%c0E<+C+Lixmx@_ zo2yeYk6W4BD^vFrb*}3I2b^vpj=dJ+Hv&5KI+Gn6z(36mdV#Z#p-vB#@@Yv?)em$X z65;`*h7ziH5%;^{$J%_#Q47)~1k#?^B>p%86l!G%Y!xIfJ>PD%MeqMN=xEXf% z+LM*opXY_4!|HzGr=*Owl!~I>k<%Gg66ORW)u7us#Db4b_g{0d@#i~=6>G>E`^zz zimrYs2a$hm9Osm1r2$bSPBVqkoe|tONWpa^+jUpxw3X|6M571d2R!K%CzaIEU|6S9 z^BJ@do!=++KBhn1dSxjSHF(X}I@{RB*`S>_U6ZL`&x>yIC`EI8(rd>ODN2KwagWj= z`+{iNrKb$4nRCo4XRu^~VGeyjx7pO3Zr>2YH0!tL?^#|xa3dwBjd*b!5vbSdnKd$Y ztO9pi*_# zIwVOo*FT*pd+V%**kZSSR6C~emFoHLpWb<1|7}GTOf7hzx{jGu2fDl!hoR1Q_1)wo z^xhE}DwRerOE^1QJ{|jl_>{)%3SQmGH71f_P-0Nn$CLhx?z8V~)+T7O5^#>sgx{Uc zlKRWW*0(ERUyh-*gKw;gAOEpW-7m8zgKcLLHf!lkZKTbA<)}{qbpzI%$O}b}d=uo6 z&_U3`JJ_eLAIoEZ_BcNtF3NqJIw=>34xSOOtreP^AbheTunA*A=y3AZ3 zI>drfoFQJ+qFX~X1S{CZ*V(;Dm59_-5=Q2jA89Zw-B9>>)A&-p547qc$qp%iEt!;~$L0CMD-*mvY(tx4=iFGVYbnZ+ zVKvuyMc)uF0?3UJC%6GWLMSHPT%OpTM~@2XiAmO~ZUtMweM5cznr8=$k~2Qtt-#gw zYp1*qXTDA=H_098(Fi?E%*vJdV_!%pJYrH+eh|57B?onYhT0 zdGDeRGXA8bbWzVJ5we!b4SsKQvZA>m4bkx%rM7-0s_R`_=t6>7(g~#6a@o*y# zew1o9Wl9z-3x>*Iw*OM?$}41wuz&3Par_oBDF1@+@#%{4-)+Lndg&o|TSb%&P{_H_ zc$N(v{>=S&)WV1g(~FcLnLw>+BJFl>9H+ip#(eOIhC<(ugo^aDb#G4)WuzbJFPCv|FiO!xdxrsW3uNXxcc5J?roNCOjn&?n}!*%)Xwe zRsfW4;K(L|Ws0Pw^%3S{$|=FO@Z%C1z!&ETbj>B;cL+kET2>>sx^1Mh+I~wb0~(ax z2gjtQPF(s4cm@jeP}B_cgtROhqaV!XDhD~FjYW#qY6YIqqBmnndMp;GXs>qsqJ4bj zL6PiD5v=~paqVKn`{nR4gmPop8M!VUrg2UnvF!Cy?I%~QXIQ|L4Zms}bzzJ@D6cx2 z+Q5+%OiH!>dcEGga^Mj6aA0of^PT!vw7tXHy;S$7wOWqpY)pJRqh+Pnke$Mjm!O5E z^H!1)!~K2@avd&*on2P~t5YR*xx-6VIkTfa0^_92XZ%aBy^#eKhU z|65%k*AZnwRow*zH;jb$m*tw?e5-Lrk^*+OScCo{vBq5=(eFvSXzU@M?oF9kk*y+R z)3?noOw5GziCsm$n=TQvEAQbA+<;xD-yPpwjaY_sJb&Oidr9HOh+i#Z8Y(jtpvI+` zct6Zk(ANhcK3c|`l623JQZ5k3B=Dy>IS0p%27) z&&(!R#VhL*4QtGjdZTz81n+@zhl>tlwKw&{A-W(X>~d(rlz zm8F%Hs|4Vfn1_-Yi{5o^rXQYTPsY58l((}%vmpb9q5%K+Cxrv=z9E!@PF}PZsH}JJ zFMJBv&i2kP&j|GiucaQt2bZTihSqGeA`#lHyTLIM{0InG!x{3Vjq7p(loG?zNuhi2 zeSzR_SEQC=LM`@nX}f2WzoOD8&mBjWzZ<6kV{3TFf#9B)h%S}t$5E<}h)T^RfcO%? zfo{cx0j@s(bY-6eet1WieYZ)bEBJzb&?H%2Blhn;{cra+61~B_&YRd1u?E_& z&J#(<8xunoW+7KwIv)T%g`_NCchsjaznrEb$HCzdx`*nfsg{}Hw#*nQDFwNAI&DgK zb(C=P_TKE$TWsMU`((i8s=dRkJN&E2lSGudbs8@iB!mAQ?DvGF>LWv3(PqEs%_RX! z=cyMvXHX46n*82J*{;^yUB8M^o60<^%9uoO<&!PuB?>oNdhn{mh^!ml^wA=YI&Rr= zowFAwW~a&bB*af&<;n+<(th1NqmbC5y%V1n;C?os2~^k=q1!3wdaB2HCw%5X2@| z7}zkSZ$?!n0u zm93#eNw+YGp1=#zzj;nCWh#7aD_|ZsREg-7PaD8a$+Ux=@gpH@_s|+V%IwGq*Aw6A z=i&2;3~=Xu@B>%*$rtvZJW^BBgsBgBe`(SFcmJ1gYPwC>SWw53$MPd#WVee*UCAH^ zdB_M5P)b})F)sr3V57)rn4Tgg6@wvmLBTG22{#+1)5O;2qhD5&rL@Jb67B~t-jE#Q zMPGRAI**g&K}mz#2?PQLgGqfF-RBlIRy=x3Hq{5%xLcu+I$&=yURRXKcFVHyiU1ffQ%2Og4mp(*U2jAZg40zDtq+T(v zl}xHm=kcmQ9<*5o=r@Cu%)gTAzKhYSfA9nOka zzih-bAaY<9u9*pi7u25|Jv;FuscJ672NWF28^v1h9KlTPckFpayt6QamIGxhO^I#l zi#jNKVf*^cc#S*xP9y4_lW|YkBj?p$HyAcH<~QFsC(fF5{LKM!=G;(gOQ=0Za!Rb4 zKi-+^y=pM#MXjAU79ccSer}vVX4J_=#(6}fjr#!k(jAAIf3p=C-#*`5k9!QikZlF~ zz^=vj8P4AqDJ}k7wG-*AbL=-*M z#Q^r#Wwdp*yyNb%7iT3v$DsUBr-6Bh7k>SnrLEirp#TuoU~)ey$-eN7CBsawX-O-Mc#bE_%-DzIe;1^PN%yGrbF9E(m?JJdI!o z=0_UU-H+NoH^h4~OXk5>z~DnFKsiA3y4@wD>dh#?dWnXqib{~Y?lWU3yTL|ip83{w zQxh`hk(<|XMvEx}P|?cjQsKOdKbSVbZBI>W*4T&IVptL78r6Rlt$dLd7&R5+k(1j$ zeX$|$Jo=R94fXjN*PO>o94olyN9U6lE6-s_$kyrAu^f7QblgprDJw_VS~={4gN}v) ztBR)VB5;L!$6_m^N;u1?0){SzUMidesQP2&1`AyVl1&9w`qj=G7AMP^hEds6JU%uW zN(-OsP#7j`PZZFO`DJ!=Zfy~j2XFiJ-KazOc*Z;r)>co3#%k5*CW}cZjE%FVYzEE{ zv;{1n_aZqmX1@;Wd%HF(f&*F` z0To@MlUUKjy(xO|9)1L%efpD32Sn-w+n6M1{wOOeQXu(fb|Yyz3&_&Mg89g<0&)hb zacJE$%79hN^puT_h2m_wLTX)L4tDO=^O5|1EfA^>UVf@v$bM`!{n+X&@6A8<5k2a! zPng9$Sg|=c=+Kx9PSNg6H+y{!Z9K9}Az0cY*+ztQB&QIes7HyG6Rt;lS#EwNZBP8R zD=Vjr$b2JM5@adjSd;3wH-)Z`x_~jEzOEXFUn%g0NH^grC4g9!{Jv+Npx=8qe6N+f z>uKhB?`|UXr{buTJQnL&LCLxngVQM>XDU*{50WI#A)(+VEHpFp?h8(rcAdNJXtGT@ zy`895Ma(KHC#rN7O4nJ10J3yFVFpNMJBAOE`K3R3bu?Z*Y-Czzr;C;s8~z+|oHu5^ zALI9)QA9DZEmr)I-?=wbeOGPS)G`WSnbvo>BVO1-e_cz-?9jsc!Dge8MqSOCg?2w< zLAO0fB^ry+^KL_Qc6A7HGKy_ersp*lQx^Mm79tE98+8RV9~<*xzMXrwWUF*qbUSf- zTpW-a*tI!dAc6r)hBLNM*dz9-siuLp!-%u7;M`?Ob~dE~-*7K7sfGwM?y) zEuFlzNcvC-dLlFq4b578Zv9cs{sg2t0V?G+?a^cH8ev5M)BFmMRGYKEu;q z6$juxdvqat`pgh_?V2@S4`8sCE0&fkU+NLudvY%GobJpUhWO^lvb@!69UOx0P;iIQ zN_Lh4NJ}aLe`4eF^9k3Hb7Qs?$vr zIIej9&Dip_(armdtTTZxHgvx%r!oAfzN5j!N__eYaFuO;rtvp=9=-Rh*KdU%EFAA> zqo*wd;@^zS4nZQ5uHRTgjk9q5K3+_|eiiRAopDKZX;P(i0&m?SMoCD#0VL8>ly~n1 zsbdVZyZ}AtQgf_%Ibpf?2sO`|`MIpHssnx`vl3kl;DD=qZCU0Jfi_8p! z$}wNrejf@AaDhX?gI=UJPm5x_!7JrBR|yihkHk6kMs&fm=Zysv!UC+xBP6cSsySDK z^H{`i9V4kdBd{-~R9ZUU?{N*13Quid8ha25O3rMmJ6ykOa!lqIJcCiCWmy7pzQELRG zVLe$&)?!9o%xng65j`!*ZXHLMGNBEzOemq+QB_xHR+;Qs&|*0MtKTV9&kCah>K@l2 zp2LhFQ;IT|k+#E-nk+lS)l>m9DU%D8HF7=r_*dxWRDH-U@TuU4kC(w_(Rk5~QoKWt zvd#$L8Rx}9VAe%&%e=9TnFzFp*UW}fFRO4o9vyiQz1MDSRK_&PYgm|gJo+5q#--<< zq7iCeXTG{Js+w4a&VJ4Uog#loth>E;1|FfXB8j0K*scyWr{6g0P&RtqIlF=dsaoGe z<`&BOc-5>kTwW;>2<<`|$(s8Pl_v>WygR?`7H?L^y)d+Vc>p^QEGUM!Z#Zoj2uxB` zp{`r~&=vvB4?M;Ji!s}y+;hB7l@PBPWQ|n!fv5hvWx~Mn#T1`16WhTML(!Fr4^}ph z{M};_mabW_`s`SBlWVRL!l)s-7uSwA6vYd-Z+ibb;zK}gXjq+2V=({Z{sU>?{+`H+ zioy*@Rl1VRJq?%D5$V3lIh}i;iuQ@EDBM-y)f=T3!Hv84Cr+F$^E<(#!RQ;sNhvQO zF(gME+5%FuT9$e0xuqM}-*Q0=+bTtLs?5sQHIS5ZRyd9&iypruP zBICE5?@BjP6uH=$n5US0c(NkfH86Bw>Q^rV3n&|MlES|+F}qG}?j7h`=F;?=-%zvK zH1jnqh-Z^6;MK*rN)@A?mGEe&BHz&TpZ}%*)Bzs5h0fq9DK`bj<-Or>bDULqp7;Gv zDT+T>j*?JX2BKpJGuzXTa~3ZqcD!ZE7g<8lX53n@i_S=18vWBQByt=%u!zlnrOo+V zkvD0fu8sCidy{p=8L+|Z7RP&f>}>=+EYklz^q^52YiVob*f=W>ap6cbLeEPc(-vLD z?uT7IT|p*sd95qdG>^Hst3S2GgxJtA8?K2YlUmXOYk~b0xn7CJPqJ|)tZ93)U0vNg z!_wTHoz46q`an{&_a;+1vxylk-HwY^6s(t2eo^~ou86p}H^0fMEsDm!({*Orqq5)P zQa<0g63B))JD+H%>T*^$sShekHaobbDw6~B8oGJ1oa)h6SGT+jUe5WMk-xuaD8Bh^ zeIFu*Y2%8|wwqZ-$rtu!f3j}RSIBnnZXjtW*(%gX=?x_N3Bzzg5$jg-W?A(jFrEhR?>}qV&*Mp{G`v*UjBnl84C+pD3 zna?3wnTMp1yvU56;z`1fi_k|Hy+e8i=juKV2eb4L&s>0IAX!UeS zZ64mh3SG$KJ;E~+pi*zmQQ4h$d%{Td<(^@i*@!#-J9>1|kt)=XO!+23=ZVOyk=wSuchD z)Vb4*$+)Yt+lU>^MgT|8zl>Izt(Fp3nk~WShzF?V5%+2!!$!BuMqg3JJT~>U6RX2I zLq8r4V+>xMKEXU0*mhL!2s8Ugp53JU22_P(gyfhMNFs|Ma7dn2X4p=#ZZpHnGs?|- zX4PaPDTd<(8%w4R8D4hQILM4Nmje%|C5!1CW4=7acBhc{`}m80db$2fzyEq&`@atm z{qNLd|0^!~zdHTDjwJD~=mY*|#_cvR;~UV)s|PG^2d~fR)QAKhe;5Y1^A4 z-&+Z6(A7ao(m@ZfeUO{ahzbE&q~f!D?EvBaA!Uj8(8!=JyDnP2q?axNyjn}I*(cua z)P#0vxTs2a%o3J^*ZN17SsyhduslwVJ2{(=>P~yS&i-THZULc4Ujhq!r@ISw{bA5| zXysV9o?erChD7yhff1d<#fEC{KLTmt+7^)2d@Ij)>ME9y;&YrE!Hi#?RsFh*k`FPytNrqyZW<79l+?YxyUmF(cJp9`&z6IQtumL}A3G;xpk6rlDEq zjg_(J#3!4yqn1(8%_X`K@`uZI#_olnyn)l-3Q=KCW>3aG;Rm{LH&`T69hzz8P_Xxs zmU5BQ-pf+iiWD$Z$WR$c-BZNOE}Jw7c)Q&*&>z!H+5EO@v+JRz15_>2#%0HvOPzi; z`1%NHa{Qy~JJ)-(cE6ll~nfZGweqIz2 zT;pfqhIfC7yibX|RM~FMn1LW!mji)y!Q(t%2LyOaM;7)HLXPI08wiTa$R^B)t+%P5 zoHE-7miVr~*bZHtntttWX;a^pIh|Znwzqv%b7UDR+vCfn}_J8E3OL9LZdk*KSv+k&i)iH`gYt-t{(VXxgx-ak8v^^9t8 zbHOE=WcRjELH)nA&Xr}L#z*R3qw4b7B5-TE&=-oo3?-=^<2juwXD{mxf9|2T)5W8j zln>uG_=@&-1iy_x>|j0LXrIR>3vrolv(_y2Sy`nnWbR(wj9Vo`^}4_mVpE-jABz|` zWS{;z1vB!;zS&XDkc}|!!Iz2zvR1UVvAOw8OSta2R8mY8_7xk~6$e>KAHQwJI`QOo z&8?x2mpk(>-%GFw{$tNDK+BAk_u&Jp&#SsLggQgCgbDSV^`7)ktyI!GxWyH%)v+nq;Cpq8 zVSb3CcTU7SNh4~nG~^fgZywBYDq1%B+_Y~}vGci-n6tNopi%$-~+%BolA!aOu;JkBjULOq_S z`*zY}_rg7#_;3CVL-k+r(_e*d+4mQy ziy`msQnG)ew{QDp0c}*e4wqr2Wo0OS&`$%NOCAexkUKXXdJu`(aQiBSNT(mSNUQ0KOE&BdBZo;c6JU|9HgYA3|x7}Os`Cqavwh{mU literal 0 HcmV?d00001 From d6384b87982257cf5a298c14ca968450e60ced28 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Fri, 19 Nov 2021 22:13:07 +0530 Subject: [PATCH 147/176] docs: Describe architecture in README --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/README.md b/README.md index aadc13c..32bb8e2 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,65 @@ This repository contains the source code for the programming framework of the new [Music Blocks (v4)](https://github.com/sugarlabs/musicblocks-v4) application. +## Architecture + +![Architecture](docs/images/architecture.jpg) + +### Syntax Representation + +- **Element API** represents *syntax elements* — the atomic constructs for building programs. There +are 2 kinds of *syntax elements*: + + - **Arguments** which return values. These are of 2 types: + + - **Data** which return a value inherently and without operating on other provided values + + - **Expression** which return a value after operating on other provided values + + - **Instructions** which perform a task. These are of 2 types: + + - **Statements** perform a single task + + - **Blocks** encapsulate *statements* and generally set some states or control the flow to them + +- **Specification** maintains a table of actual *syntax elements* which can be used to build programs. + +- **Warehouse** maintains a table of instances of *syntax elements* registered in the *specification*. +It can also generate statistics about the instances. + +- **Tree** represents the *syntax tree* (*abstract syntax tree* or *AST*) by maintaining interconnections +between *syntax elements*. + +### Execution + +- **Symbol Table** maintains tables of dynamic variables and states which the *syntax elements* can +use during execution. + +- **Parser** parses the *syntax tree* in a postorder sequence, and maintains *call frame stacks* and +the *program counter*. + +- **Interpreter** fetches elements from the parser and executes them. + +- **Scheduler** manages the concurrent orchestration of the execution process. + +**Monitor** proxies information about the execution states and statictics. + +There are 2 special constructs: **Process** and **Routine**. These are special *block* elements. +**Routines** encapsulate *instructions* that can be executed by multiple **processes**. **Processes** +encapsulate independent set of instructions, and multiple **processes** can run concurrently. + +There is an additional terminology called **crumbs** which are sets of connected *syntax elements* +not part of any *process* or *routine*. + +### Plugins + +The core framework doesn't define any special *syntax elements* other than *process* and *routine*. +All concrete *syntax elements* are plugins which extend the *syntax element API* and are registered +in the *syntax specification*. + +A set of programming specific *syntax elements* are bundled as a library, which use nothing beyond +the set of constructs exposed by the *syntax element API*. + ## Tech Stack This core of Music Blocks v4 uses `TypeScript 4`. In addition, `Jest` shall be used for testing. From 4d934c283dd4da96d619bfeb761394fc5cbc958d Mon Sep 17 00:00:00 2001 From: eterny13 Date: Tue, 18 Jan 2022 23:42:23 +0900 Subject: [PATCH 148/176] docker: change base from debian:buster-slim to alpine --- Dockerfile | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8fbb27e..4348fae 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,16 @@ -FROM debian:buster-slim +FROM alpine:latest -# install node.js:14.x -RUN apt update --no-install-recommends -yq \ - && apt-get install curl gnupg -yq \ - && curl -sL https://deb.nodesource.com/setup_14.x | bash \ - && apt-get install nodejs -yq \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* +RUN apk update \ + && apk add curl gnupg \ + && apk add nodejs npm -# update npm -RUN npm install -g npm - -# install typescript compiler RUN npm install -g typescript -# install ts-node (to run/debug .ts files without manual transpiling) RUN npm install -g ts-node -LABEL org.opencontainers.image.description='An initial development image based on a slimmed Debian \ -10.7 (buster), and further configured with Node.js v14, TypeScript compiler, and ts-node. This \ -does not contain any source files.' +LABEL org.opencontainers.image.description='An initial development image based on the official \ + Node.js (on Alpine LTS) image, and further configured with a HTTP server, TypeScript compiler, \ + and ts-node. This is merely to provide an execution sandbox and does not contain source files.' WORKDIR /app From d3b615df06f48f1cb8c79d6305cc3ba276e45e41 Mon Sep 17 00:00:00 2001 From: eterny13 Date: Thu, 20 Jan 2022 22:05:54 +0900 Subject: [PATCH 149/176] docker: change base from debian:buster-slim to node:lts-alpine --- Dockerfile | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4348fae..cf70050 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,20 @@ -FROM alpine:latest +# base from official Node (Alpine LTS) image +FROM node:lts-alpine -RUN apk update \ - && apk add curl gnupg \ - && apk add nodejs npm +# update npm +RUN npm install -g npm +# install typescript compiler RUN npm install -g typescript +# install ts-node (to run/debug .ts files without manual transpiling) RUN npm install -g ts-node LABEL org.opencontainers.image.description='An initial development image based on the official \ - Node.js (on Alpine LTS) image, and further configured with a HTTP server, TypeScript compiler, \ - and ts-node. This is merely to provide an execution sandbox and does not contain source files.' + Node.js (on Alpine LTS) image, and further configured with TypeScript compiler and ts-node. \ + This is merely to provide an execution sandbox (for bind mounting source files) and \ + does not contain source files.' WORKDIR /app -EXPOSE 5000 9000 +CMD [ "sh" ] From bde9f3945a7253798b6868b887d02def193f0c3a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 09:19:38 +0530 Subject: [PATCH 150/176] workflow: [linter] use Super Linter (slim) v4 --- .github/workflows/linter.yml | 40 ++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 7d737cf..701816e 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -30,6 +30,10 @@ jobs: # Set the agent to run on runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x] + ################## # Load all steps # ################## @@ -37,24 +41,44 @@ jobs: ########################## # Checkout the code base # ########################## - - name: Checkout Code + - name: Checkout the code base uses: actions/checkout@v2 with: # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 - ################################ - # Run Linter against code base # - ################################ - - name: Lint Code Base - uses: github/super-linter@v3 + ################# + # Setup Node.js # + ################# + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + ######################## + # Install dependencies # + ######################## + - name: Install dependencies + run: | + yarn install --frozen-lockfile + + #################### + # Run Super Linter # + #################### + - name: Lint new and edited files + uses: github/super-linter/slim@v4 env: DEFAULT_BRANCH: develop VALIDATE_ALL_CODEBASE: false - VALIDATE_CSS: false VALIDATE_DOCKERFILE: false VALIDATE_DOCKERFILE_HADOLINT: false VALIDATE_JAVASCRIPT_STANDARD: false VALIDATE_TYPESCRIPT_STANDARD: false - VALIDATE_JSON: false VALIDATE_JSCPD: false + VALIDATE_JSON: false + VALIDATE_PYTHON: false + VALIDATE_PYTHON_BLACK: false + VALIDATE_PYTHON_FLAKE8: false + VALIDATE_PYTHON_ISORT: false + VALIDATE_PYTHON_MYPY: false + VALIDATE_PYTHON_PYLINT: false From 59a0b8ab19f1b00a0c2bc0d4534c80bb2026f4b4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 22 Jan 2022 17:23:55 +0530 Subject: [PATCH 151/176] lint: [eslint] add JSON plugin --- .eslintrc.json | 7 ++- package-lock.json | 110 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 117 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 85c8524..d74b633 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -55,5 +55,10 @@ "no-duplicate-case": "error", "no-irregular-whitespace": "warn" }, - "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"] + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + "plugin:json/recommended-with-comments" + ] } diff --git a/package-lock.json b/package-lock.json index ec54cf0..4ff904b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@typescript-eslint/parser": "^4.11.1", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", + "eslint-plugin-json": "^3.1.0", "jest": "^26.6.3", "prettier": "^2.4.1", "ts-jest": "^26.4.4", @@ -2514,6 +2515,19 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + }, + "engines": { + "node": ">=12.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -4441,6 +4455,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6898,6 +6918,43 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vscode-json-languageservice": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", + "integrity": "sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz", + "integrity": "sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/vscode-nls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", + "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", + "dev": true + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -9077,6 +9134,16 @@ "dev": true, "requires": {} }, + "eslint-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", + "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "vscode-json-languageservice": "^4.1.6" + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -10542,6 +10609,12 @@ "minimist": "^1.2.5" } }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -12451,6 +12524,43 @@ "spdx-expression-parse": "^3.0.0" } }, + "vscode-json-languageservice": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", + "integrity": "sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "^3.16.0", + "vscode-nls": "^5.0.0", + "vscode-uri": "^3.0.2" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz", + "integrity": "sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "vscode-nls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", + "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", + "dev": true + }, + "vscode-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", + "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/package.json b/package.json index 169904c..08e01fe 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@typescript-eslint/parser": "^4.11.1", "eslint": "^7.17.0", "eslint-config-prettier": "^7.1.0", + "eslint-plugin-json": "^3.1.0", "jest": "^26.6.3", "prettier": "^2.4.1", "ts-jest": "^26.4.4", From 4db4f38565ab9ba251eb2beab952bae622e27c82 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 22 Jan 2022 17:24:28 +0530 Subject: [PATCH 152/176] workflow: [linter] use project root config files --- .github/linters/.eslintignore | 2 -- .github/linters/.eslintrc.json | 55 ---------------------------------- .github/workflows/linter.yml | 5 +++- 3 files changed, 4 insertions(+), 58 deletions(-) delete mode 100644 .github/linters/.eslintignore delete mode 100644 .github/linters/.eslintrc.json diff --git a/.github/linters/.eslintignore b/.github/linters/.eslintignore deleted file mode 100644 index 295b70a..0000000 --- a/.github/linters/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -# Don't ignore contents of .prototype directory -!src/.prototype diff --git a/.github/linters/.eslintrc.json b/.github/linters/.eslintrc.json deleted file mode 100644 index 47e167d..0000000 --- a/.github/linters/.eslintrc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "@typescript-eslint/no-inferrable-types": "off", - "no-mixed-spaces-and-tabs": "warn", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "varsIgnorePattern": "_" - } - ], - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": ["error"], - "quotes": [ - "warn", - "single", - { - "avoidEscape": true - } - ], - "semi": ["error", "always"], - "prefer-const": ["warn"], - // "no-console": "warn", - "max-len": [ - "warn", - { - "code": 100, - "ignoreTrailingComments": true, - "ignoreComments": true, - "ignoreStrings": true, - "ignoreTemplateLiterals": true - } - ], - "no-trailing-spaces": [ - "warn", - { - "skipBlankLines": true, - "ignoreComments": true - } - ], - "no-duplicate-case": "error", - "no-irregular-whitespace": "warn" - }, - "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"] -} diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 701816e..15b6343 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -69,13 +69,16 @@ jobs: uses: github/super-linter/slim@v4 env: DEFAULT_BRANCH: develop + LINTER_RULES_PATH: / + JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.json + TYPESCRIPT_ES_CONFIG_FILE: .eslintrc.json + MARKDOWN_CONFIG_FILE: .markdownlint.jsonc VALIDATE_ALL_CODEBASE: false VALIDATE_DOCKERFILE: false VALIDATE_DOCKERFILE_HADOLINT: false VALIDATE_JAVASCRIPT_STANDARD: false VALIDATE_TYPESCRIPT_STANDARD: false VALIDATE_JSCPD: false - VALIDATE_JSON: false VALIDATE_PYTHON: false VALIDATE_PYTHON_BLACK: false VALIDATE_PYTHON_FLAKE8: false From 49c48ce176dd96c8fe91d0916282c64f8fd9c2c4 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 22 Jan 2022 17:32:00 +0530 Subject: [PATCH 153/176] lint: [textlint] add textlint support --- README.md | 16 +- package-lock.json | 4028 +++++++++++++++++++++++++++++++++++++++++++-- package.json | 6 +- 3 files changed, 3886 insertions(+), 164 deletions(-) diff --git a/README.md b/README.md index 32bb8e2..113b6f5 100644 --- a/README.md +++ b/README.md @@ -162,8 +162,8 @@ allow the competition of ideas (Sugar Labs is a meritocracy)._ This is a _**TypeScript**_ project that uses _**React**_. You'll need _[**Node.js**](https://nodejs.org/en/)_ and _**NPM**_ installed on your development machine. You'll need _**tsc**_ (_TypeScript Compiler_) -to manually compile `.ts` files. You'll need _**ts-node**_ (_Node executable for TypeScript_) to manually -execute `.ts` scripts directly. +to manually compile `.ts` files. You'll need _**ts-node**_ (_Node.js executable for TypeScript_) to +manually execute `.ts` scripts directly. Once _**NPM**_ is installed, to install the above, run @@ -172,7 +172,7 @@ npm i -g typescript npm i -g ts-node ``` -_**Note:**_ Users on _Linux_ and _Mac OS_ are required to add a `sudo` before these commands. +_**Note:**_ Users on _Linux_ and _MacOS_ are required to add a `sudo` before these commands. Check installation using @@ -213,7 +213,7 @@ Windows) this repository using 4. Build _docker image_ and launch _docker network_. _**Note:**_ A - [built initial development image](https://github.com/orgs/sugarlabs/packages/container/musicblocks/531083) + [built initial development image](https://github.com/sugarlabs/musicblocks-v4/pkgs/container/musicblocks/531083) has been published to [_Sugar Labs GitHub Container Registry_ (_GHCR_)](https://github.com/orgs/sugarlabs/packages?ecosystem=container), which can be pulled directly, so you don't have to build it again. Pull using @@ -286,7 +286,7 @@ spawned and standard input/output is connected to the terminal. 9. Miscellaneous commands. - - To launch the _Node runtime_, run + - To launch the _Node.js runtime_, run ```bash node @@ -358,7 +358,7 @@ spawned and standard input/output is connected to the terminal. _All code is just plain text, so it doesn't really matter what you use to edit them._ However, using modern, feature-rich IDEs/text-editors like [_**Atom**_](https://atom.io/), -[_**Brackets**_](http://brackets.io/), [_**WebStorm**_](https://www.jetbrains.com/webstorm/), +[_**Brackets**_](https://brackets.io/), [_**WebStorm**_](https://www.jetbrains.com/webstorm/), [_**Sublime Text**_](https://www.sublimetext.com/), [_**Visual Studio Code**_](https://code.visualstudio.com/), etc. makes life way easier. These come with a directory-tree explorer, and an integrated terminal, at the very least, while having support @@ -370,8 +370,8 @@ _keyboard shortcuts_, etc. _**Visual Studio Code**_ (_**VSCode**_) is currently the most-popular code editor for reasons like being _lightweight_, _cleaner_, large marketplace of _extensions_, integrated _Source Control_ -features, _debugger_, _remote explorer_ support, _Regular Expression_ (_regex_) based find/replace, -etc. +features, _debugger_, _remote explorer_ support, _Regular Expression_ (_regular expression_) based +find/replace, etc. In fact, a workspace configuration file for _vscode_`.vscode/settings.json` has already been added. Recommended extensions for this project are `Babel JavaScript`, `Docker`, `ESLint`, `Git Graph`, diff --git a/package-lock.json b/package-lock.json index 4ff904b..63d1a6d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,30 @@ "eslint-plugin-json": "^3.1.0", "jest": "^26.6.3", "prettier": "^2.4.1", + "textlint": "^12.1.0", + "textlint-rule-no-dead-link": "^4.8.0", + "textlint-rule-no-empty-section": "^1.1.0", + "textlint-rule-terminology": "^2.1.5", "ts-jest": "^26.4.4", "typescript": "^4.1.3", "uuid": "^8.3.2" } }, + "node_modules/@azu/format-text": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", + "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", + "dev": true + }, + "node_modules/@azu/style-format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", + "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", + "dev": true, + "dependencies": { + "@azu/format-text": "^1.0.1" + } + }, "node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -1032,6 +1051,375 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@textlint/ast-node-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", + "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==", + "dev": true + }, + "node_modules/@textlint/ast-tester": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.1.0.tgz", + "integrity": "sha512-s3VHRDaULFYhxjJ3vP9LUIt2aHLnUB4XFUSRhUVnW4/GDOb1EXCGWFd+wtYy6jTtBg/5TR5ApdC6sNu/SLcb5w==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3" + } + }, + "node_modules/@textlint/ast-traverse": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.1.0.tgz", + "integrity": "sha512-NJCCMS7lxZ6Ed15zsosbe/5i/SyynqQsxOYxhsMHuyU/adx27WzNWLoFbgTdz6Wmn3Ok1PSFf0442MpoS6SP7g==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "node_modules/@textlint/feature-flag": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.1.0.tgz", + "integrity": "sha512-pQfA2bUXimBQjxT5hVmGGuFf1Cwwx26kbrcwkGHsgxgXlXkg1zboby5UCMOjWda/TbJjynzqDO0JaU24Ms9fZg==", + "dev": true + }, + "node_modules/@textlint/fixer-formatter": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.1.0.tgz", + "integrity": "sha512-ELG9ehkid+J0sRd0mVRbZ+2UOnLqowycrYsaHxDE+xf2s33OcogZa9i3Uact7y2oSCadX00oNLEhsQcwkAqvpw==", + "dev": true, + "dependencies": { + "@textlint/module-interop": "^12.1.0", + "@textlint/types": "^12.1.0", + "chalk": "^1.1.3", + "debug": "^4.3.3", + "diff": "^4.0.2", + "is-file": "^1.0.0", + "string-width": "^1.0.2", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0", + "try-resolve": "^1.0.1" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/chalk/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/string-width/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/fixer-formatter/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@textlint/kernel": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.1.0.tgz", + "integrity": "sha512-6crFn0Ng4Y8PnUvD8HdGMZUlxURx3YgbDv/Grp+7kg8qLlNAkvbyJ1cE8ZYJTF+PfJ1dK1FZmmlZsvrieI4KBQ==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0", + "@textlint/ast-tester": "^12.1.0", + "@textlint/ast-traverse": "^12.1.0", + "@textlint/feature-flag": "^12.1.0", + "@textlint/source-code-fixer": "^12.1.0", + "@textlint/types": "^12.1.0", + "@textlint/utils": "^12.1.0", + "debug": "^4.3.3", + "deep-equal": "^1.1.1", + "structured-source": "^3.0.2" + } + }, + "node_modules/@textlint/linter-formatter": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.1.0.tgz", + "integrity": "sha512-OoDvn7wD+pAV+W2loCKgxO9V11rYo14GVKkp8UktsqzeOzxxRY5iZUOALMOOde19fOklb2mEvs8AJ4lDaRDJVQ==", + "dev": true, + "dependencies": { + "@azu/format-text": "^1.0.1", + "@azu/style-format": "^1.0.0", + "@textlint/module-interop": "^12.1.0", + "@textlint/types": "^12.1.0", + "chalk": "^1.1.3", + "debug": "^4.3.3", + "is-file": "^1.0.0", + "js-yaml": "^3.14.1", + "optionator": "^0.9.1", + "pluralize": "^2.0.0", + "string-width": "^1.0.2", + "strip-ansi": "^6.0.1", + "table": "^6.7.3", + "text-table": "^0.2.0", + "try-resolve": "^1.0.1", + "xml-escape": "^1.1.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/chalk/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/string-width/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@textlint/linter-formatter/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@textlint/markdown-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", + "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3", + "remark-footnotes": "^3.0.0", + "remark-frontmatter": "^3.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "traverse": "^0.6.6", + "unified": "^9.2.2" + } + }, + "node_modules/@textlint/module-interop": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.1.0.tgz", + "integrity": "sha512-J1VhFZ7lK1V3Ue7DCvZlGIFEuaongBCkir1XFL+f1yfhfQlgfM5TCp3OBBB6NhKPff8T6sPA9niBzMYr+NyKyA==", + "dev": true + }, + "node_modules/@textlint/source-code-fixer": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.1.0.tgz", + "integrity": "sha512-3HEWCu8XlRpxK0UmUxGEzc4u0deaO0GtisqaEsCVHzlQFq6tzE+5VTdZ4ffon64UN8UV57EAC2ralEV/VgxkBQ==", + "dev": true, + "dependencies": { + "@textlint/types": "^12.1.0", + "debug": "^4.3.3" + } + }, + "node_modules/@textlint/text-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.1.0.tgz", + "integrity": "sha512-s45+d0E9+gMKz+LC9+sJamU7SVrPyGYsXVLDRM5oxqjdb0MeIfjIFj7xl52MUpAHnywbPSgakB6HHiryiEAmqQ==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "node_modules/@textlint/textlint-plugin-markdown": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.1.0.tgz", + "integrity": "sha512-bS67fq4Ea2JdKO4mJM4sGSATVI1bw9++IfOIsx2rc01NfZlTxwz4kM8lrhvNFHGY4URaN1kCULSgupeI/u/Seg==", + "dev": true, + "dependencies": { + "@textlint/markdown-to-ast": "^12.1.0" + } + }, + "node_modules/@textlint/textlint-plugin-text": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.1.0.tgz", + "integrity": "sha512-ItqpVEYLDYQkEk0ixeD4wElqkgkDErAGGDN/QK4cmIvtBeVd/GSIQFS1pwC1/Abmd4dTK3j/9z/dov1gVFZB1Q==", + "dev": true, + "dependencies": { + "@textlint/text-to-ast": "^12.1.0" + } + }, + "node_modules/@textlint/types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.1.0.tgz", + "integrity": "sha512-O8RQUiGnBvBrwV/fLHp2vU+y3w223G+qKUzvW/k2eFwAdbtmCfordoKESXAIGuqAUZjgiM2+Mt3We1pY+tMR3g==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "node_modules/@textlint/utils": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.1.0.tgz", + "integrity": "sha512-WE0bxQ/q+PgSslqEBuDi4Z8ZskBA0ZEehmKqcsd0hpDWU4VRU/R9o/WVXwia0APbQxgXPYWaHf1Rb7FAKUcVcg==", + "dev": true + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -1131,6 +1519,15 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", @@ -1155,6 +1552,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, "node_modules/@types/uuid": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", @@ -1687,6 +2090,16 @@ "@babel/core": "^7.0.0" } }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1723,6 +2136,12 @@ "node": ">=0.10.0" } }, + "node_modules/boundary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", + "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", + "dev": true + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1821,6 +2240,19 @@ "node": ">=0.10.0" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1861,6 +2293,16 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1886,6 +2328,45 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -2017,6 +2498,15 @@ "node": ">= 0.12.0" } }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -2110,8 +2600,17 @@ "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.4.4", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cssom": { + "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true @@ -2149,9 +2648,9 @@ } }, "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -2189,6 +2688,23 @@ "node": ">=0.10" } }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2204,6 +2720,18 @@ "node": ">=0.10.0" } }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2235,6 +2763,15 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -2697,6 +3234,12 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "node_modules/exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -2889,6 +3432,12 @@ "node": ">= 10.14.2" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -2997,6 +3546,19 @@ "reusify": "^1.0.4" } }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -3085,6 +3647,15 @@ "node": ">= 6" } }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -3097,6 +3668,20 @@ "node": ">=0.10.0" } }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3147,6 +3732,20 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3156,6 +3755,15 @@ "node": ">=8.0.0" } }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3171,6 +3779,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-url-origin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-url-origin/-/get-url-origin-1.0.1.tgz", + "integrity": "sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==", + "dev": true + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -3272,6 +3886,27 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3281,6 +3916,33 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -3494,6 +4156,46 @@ "node": ">=0.10.0" } }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", @@ -3542,6 +4244,31 @@ "node": ">=0.10.0" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", @@ -3593,6 +4320,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", + "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=", + "dev": true + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3623,6 +4356,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3632,6 +4375,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3650,6 +4402,22 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -3668,6 +4436,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -4422,6 +5196,12 @@ "node": ">=4" } }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -4461,6 +5241,15 @@ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4507,6 +5296,46 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4537,67 +5366,171 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "chalk": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/log-symbols/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "dependencies": { - "tmpl": "1.0.5" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/log-symbols/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/map-visit": { + "node_modules/log-symbols/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-like": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/map-like/-/map-like-1.1.3.tgz", + "integrity": "sha1-b6rKUzngzGVno6Vd0oH9hxo55do=", + "dev": true + }, + "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", @@ -4609,6 +5542,203 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", + "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0", + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", + "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "dev": true, + "dependencies": { + "micromark-extension-frontmatter": "^0.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "dev": true, + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "dev": true, + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "dev": true, + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4624,6 +5754,132 @@ "node": ">= 8" } }, + "node_modules/micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromark-extension-footnote": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", + "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "dev": true, + "dependencies": { + "fault": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "dev": true, + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "dev": true, + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -4750,6 +6006,48 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "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/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -4828,6 +6126,15 @@ "node": ">=8" } }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -4919,6 +6226,31 @@ "node": ">=0.10.0" } }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4984,6 +6316,15 @@ "node": ">= 0.8.0" } }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -5005,6 +6346,15 @@ "node": ">=4" } }, + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -5032,6 +6382,47 @@ "node": ">=8" } }, + "node_modules/p-memoize": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-3.1.0.tgz", + "integrity": "sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA==", + "dev": true, + "dependencies": { + "mem": "^4.3.0", + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5053,6 +6444,24 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -5119,6 +6528,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-to-glob-pattern": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz", + "integrity": "sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5146,6 +6561,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -5170,6 +6615,12 @@ "node": ">=8" } }, + "node_modules/pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", + "dev": true + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -5282,6 +6733,18 @@ } ] }, + "node_modules/rc-config-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-3.0.0.tgz", + "integrity": "sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "js-yaml": "^3.12.0", + "json5": "^2.1.1", + "require-from-string": "^2.0.2" + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -5351,16 +6814,87 @@ "node": ">=0.10.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remark-footnotes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", + "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", + "dev": true, + "dependencies": { + "mdast-util-footnote": "^0.1.0", + "micromark-extension-footnote": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", + "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "dev": true, + "dependencies": { + "mdast-util-frontmatter": "^0.2.0", + "micromark-extension-frontmatter": "^0.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "dev": true, + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/remove-trailing-separator": { @@ -5854,6 +7388,16 @@ "node": ">=10" } }, + "node_modules/select-section": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/select-section/-/select-section-0.4.6.tgz", + "integrity": "sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg==", + "dev": true, + "dependencies": { + "map-like": "^1.0.3", + "txt-ast-traverse": "^1.2.1" + } + }, "node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -6412,155 +7956,497 @@ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/structured-source": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", + "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", + "dev": true, + "dependencies": { + "boundary": "^1.0.1" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", + "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", + "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/textlint": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.1.0.tgz", + "integrity": "sha512-VZ0iVepE0jUchMfIW0uKGdEdv3l0ajOFvUBcpB1xGOLAz3gVwpdWvlagVlFXuwjc2N+9mcjTM0PCIXNwIs2vQA==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^12.1.0", + "@textlint/ast-traverse": "^12.1.0", + "@textlint/feature-flag": "^12.1.0", + "@textlint/fixer-formatter": "^12.1.0", + "@textlint/kernel": "^12.1.0", + "@textlint/linter-formatter": "^12.1.0", + "@textlint/module-interop": "^12.1.0", + "@textlint/textlint-plugin-markdown": "^12.1.0", + "@textlint/textlint-plugin-text": "^12.1.0", + "@textlint/types": "^12.1.0", + "@textlint/utils": "^12.1.0", + "debug": "^4.3.3", + "deep-equal": "^1.1.1", + "file-entry-cache": "^5.0.1", + "get-stdin": "^5.0.1", + "glob": "^7.2.0", + "is-file": "^1.0.0", + "log-symbols": "^1.0.2", + "md5": "^2.3.0", + "mkdirp": "^0.5.0", + "optionator": "^0.9.1", + "path-to-glob-pattern": "^1.0.2", + "rc-config-loader": "^3.0.0", + "read-pkg": "^1.1.0", + "read-pkg-up": "^3.0.0", + "structured-source": "^3.0.2", + "try-resolve": "^1.0.1", + "unique-concat": "^0.2.2" + }, + "bin": { + "textlint": "bin/textlint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/textlint-rule-helper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.2.1.tgz", + "integrity": "sha512-pdX3uNbFzQTgINamaBpEHRT/MgROHev5wCnQnUTXRLT5DaRjls0Rmpi5d1MPZG6HT5NKVL++Q2J0FUbh5shi3Q==", + "dev": true, + "dependencies": { + "structured-source": "^3.0.2", + "unist-util-visit": "^2.0.3" + }, + "peerDependencies": { + "@textlint/ast-node-types": "^12.1.0", + "@textlint/types": "^12.1.0" + } + }, + "node_modules/textlint-rule-no-dead-link": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.8.0.tgz", + "integrity": "sha512-jB45mvIhKdgLFs4kDzfn8Q3C1WBv+BGI6At07ZJd9YmM/+dm+P8W9urisBSXFeQcYoGcaXqDiKZwK9BpdnpciQ==", + "dev": true, + "dependencies": { + "fs-extra": "^8.1.0", + "get-url-origin": "^1.0.1", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.0", + "p-memoize": "^3.1.0", + "p-queue": "^6.2.0", + "textlint-rule-helper": "^2.1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint-rule-no-empty-section": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz", + "integrity": "sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=", + "dev": true, + "dependencies": { + "select-section": "^0.4.0" + } + }, + "node_modules/textlint-rule-terminology": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz", + "integrity": "sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "strip-json-comments": "^3.0.1", + "textlint-rule-helper": "^2.1.1" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/textlint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/textlint/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/textlint/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/textlint/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/textlint/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "node_modules/textlint/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/textlint/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/textlint/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/textlint/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "node_modules/textlint/node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", + "node_modules/textlint/node_modules/read-pkg-up/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", - "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", + "node_modules/textlint/node_modules/read-pkg-up/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "pify": "^3.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=4" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "node_modules/textlint/node_modules/read-pkg-up/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "node_modules/textlint/node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/textlint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "node_modules/textlint/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } }, "node_modules/throat": { "version": "5.0.0", @@ -6660,6 +8546,28 @@ "node": ">=8" } }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, "node_modules/ts-jest": { "version": "26.5.6", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", @@ -6709,6 +8617,13 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/txt-ast-traverse": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz", + "integrity": "sha1-WOP+Q92121yotRFClDsNG5cN70E=", + "deprecated": "See https://github.com/textlint/textlint/issues/455", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6764,6 +8679,47 @@ "node": ">=4.2.0" } }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -6788,6 +8744,64 @@ "node": ">=0.10.0" } }, + "node_modules/unique-concat": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", + "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=", + "dev": true + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -6918,6 +8932,59 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/vscode-json-languageservice": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", @@ -7067,12 +9134,24 @@ "node": ">=8" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -7085,6 +9164,18 @@ "typedarray-to-buffer": "^3.1.5" } }, + "node_modules/write/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ws": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", @@ -7106,6 +9197,12 @@ } } }, + "node_modules/xml-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", + "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=", + "dev": true + }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -7173,9 +9270,34 @@ "engines": { "node": ">=6" } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } }, "dependencies": { + "@azu/format-text": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", + "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", + "dev": true + }, + "@azu/style-format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", + "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", + "dev": true, + "requires": { + "@azu/format-text": "^1.0.1" + } + }, "@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -7977,6 +10099,333 @@ "@sinonjs/commons": "^1.7.0" } }, + "@textlint/ast-node-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", + "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==", + "dev": true + }, + "@textlint/ast-tester": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.1.0.tgz", + "integrity": "sha512-s3VHRDaULFYhxjJ3vP9LUIt2aHLnUB4XFUSRhUVnW4/GDOb1EXCGWFd+wtYy6jTtBg/5TR5ApdC6sNu/SLcb5w==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3" + } + }, + "@textlint/ast-traverse": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.1.0.tgz", + "integrity": "sha512-NJCCMS7lxZ6Ed15zsosbe/5i/SyynqQsxOYxhsMHuyU/adx27WzNWLoFbgTdz6Wmn3Ok1PSFf0442MpoS6SP7g==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "@textlint/feature-flag": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.1.0.tgz", + "integrity": "sha512-pQfA2bUXimBQjxT5hVmGGuFf1Cwwx26kbrcwkGHsgxgXlXkg1zboby5UCMOjWda/TbJjynzqDO0JaU24Ms9fZg==", + "dev": true + }, + "@textlint/fixer-formatter": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.1.0.tgz", + "integrity": "sha512-ELG9ehkid+J0sRd0mVRbZ+2UOnLqowycrYsaHxDE+xf2s33OcogZa9i3Uact7y2oSCadX00oNLEhsQcwkAqvpw==", + "dev": true, + "requires": { + "@textlint/module-interop": "^12.1.0", + "@textlint/types": "^12.1.0", + "chalk": "^1.1.3", + "debug": "^4.3.3", + "diff": "^4.0.2", + "is-file": "^1.0.0", + "string-width": "^1.0.2", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0", + "try-resolve": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@textlint/kernel": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.1.0.tgz", + "integrity": "sha512-6crFn0Ng4Y8PnUvD8HdGMZUlxURx3YgbDv/Grp+7kg8qLlNAkvbyJ1cE8ZYJTF+PfJ1dK1FZmmlZsvrieI4KBQ==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0", + "@textlint/ast-tester": "^12.1.0", + "@textlint/ast-traverse": "^12.1.0", + "@textlint/feature-flag": "^12.1.0", + "@textlint/source-code-fixer": "^12.1.0", + "@textlint/types": "^12.1.0", + "@textlint/utils": "^12.1.0", + "debug": "^4.3.3", + "deep-equal": "^1.1.1", + "structured-source": "^3.0.2" + } + }, + "@textlint/linter-formatter": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.1.0.tgz", + "integrity": "sha512-OoDvn7wD+pAV+W2loCKgxO9V11rYo14GVKkp8UktsqzeOzxxRY5iZUOALMOOde19fOklb2mEvs8AJ4lDaRDJVQ==", + "dev": true, + "requires": { + "@azu/format-text": "^1.0.1", + "@azu/style-format": "^1.0.0", + "@textlint/module-interop": "^12.1.0", + "@textlint/types": "^12.1.0", + "chalk": "^1.1.3", + "debug": "^4.3.3", + "is-file": "^1.0.0", + "js-yaml": "^3.14.1", + "optionator": "^0.9.1", + "pluralize": "^2.0.0", + "string-width": "^1.0.2", + "strip-ansi": "^6.0.1", + "table": "^6.7.3", + "text-table": "^0.2.0", + "try-resolve": "^1.0.1", + "xml-escape": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@textlint/markdown-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", + "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3", + "remark-footnotes": "^3.0.0", + "remark-frontmatter": "^3.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "traverse": "^0.6.6", + "unified": "^9.2.2" + } + }, + "@textlint/module-interop": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.1.0.tgz", + "integrity": "sha512-J1VhFZ7lK1V3Ue7DCvZlGIFEuaongBCkir1XFL+f1yfhfQlgfM5TCp3OBBB6NhKPff8T6sPA9niBzMYr+NyKyA==", + "dev": true + }, + "@textlint/source-code-fixer": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.1.0.tgz", + "integrity": "sha512-3HEWCu8XlRpxK0UmUxGEzc4u0deaO0GtisqaEsCVHzlQFq6tzE+5VTdZ4ffon64UN8UV57EAC2ralEV/VgxkBQ==", + "dev": true, + "requires": { + "@textlint/types": "^12.1.0", + "debug": "^4.3.3" + } + }, + "@textlint/text-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.1.0.tgz", + "integrity": "sha512-s45+d0E9+gMKz+LC9+sJamU7SVrPyGYsXVLDRM5oxqjdb0MeIfjIFj7xl52MUpAHnywbPSgakB6HHiryiEAmqQ==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "@textlint/textlint-plugin-markdown": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.1.0.tgz", + "integrity": "sha512-bS67fq4Ea2JdKO4mJM4sGSATVI1bw9++IfOIsx2rc01NfZlTxwz4kM8lrhvNFHGY4URaN1kCULSgupeI/u/Seg==", + "dev": true, + "requires": { + "@textlint/markdown-to-ast": "^12.1.0" + } + }, + "@textlint/textlint-plugin-text": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.1.0.tgz", + "integrity": "sha512-ItqpVEYLDYQkEk0ixeD4wElqkgkDErAGGDN/QK4cmIvtBeVd/GSIQFS1pwC1/Abmd4dTK3j/9z/dov1gVFZB1Q==", + "dev": true, + "requires": { + "@textlint/text-to-ast": "^12.1.0" + } + }, + "@textlint/types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.1.0.tgz", + "integrity": "sha512-O8RQUiGnBvBrwV/fLHp2vU+y3w223G+qKUzvW/k2eFwAdbtmCfordoKESXAIGuqAUZjgiM2+Mt3We1pY+tMR3g==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0" + } + }, + "@textlint/utils": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.1.0.tgz", + "integrity": "sha512-WE0bxQ/q+PgSslqEBuDi4Z8ZskBA0ZEehmKqcsd0hpDWU4VRU/R9o/WVXwia0APbQxgXPYWaHf1Rb7FAKUcVcg==", + "dev": true + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -8073,6 +10522,15 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/node": { "version": "16.11.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", @@ -8097,6 +10555,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, "@types/uuid": { "version": "8.3.1", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", @@ -8460,6 +10924,12 @@ "babel-preset-current-node-syntax": "^1.0.0" } }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -8492,6 +10962,12 @@ } } }, + "boundary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", + "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -8571,6 +11047,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -8598,6 +11084,12 @@ "rsvp": "^4.8.4" } }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8614,6 +11106,30 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -8723,6 +11239,12 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", @@ -8801,6 +11323,12 @@ "which": "^2.0.1" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -8836,9 +11364,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -8862,6 +11390,20 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8874,6 +11416,15 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -8896,6 +11447,12 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -9240,6 +11797,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -9396,6 +11959,12 @@ "jest-regex-util": "^26.0.0" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -9488,6 +12057,15 @@ "reusify": "^1.0.4" } }, + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, "fb-watchman": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", @@ -9558,6 +12136,12 @@ "mime-types": "^2.1.12" } }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -9567,6 +12151,17 @@ "map-cache": "^0.2.2" } }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -9604,12 +12199,29 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -9619,6 +12231,12 @@ "pump": "^3.0.0" } }, + "get-url-origin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-url-origin/-/get-url-origin-1.0.1.tgz", + "integrity": "sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==", + "dev": true + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -9693,12 +12311,44 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -9865,6 +12515,32 @@ "kind-of": "^6.0.0" } }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9904,6 +12580,21 @@ "kind-of": "^6.0.0" } }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", @@ -9937,6 +12628,12 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", + "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9958,12 +12655,24 @@ "is-extglob": "^2.1.1" } }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9979,6 +12688,16 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -9991,6 +12710,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10582,6 +13307,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -10615,6 +13346,15 @@ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10649,6 +13389,39 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -10676,6 +13449,69 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10717,12 +13553,27 @@ "tmpl": "1.0.5" } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, + "map-like": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/map-like/-/map-like-1.1.3.tgz", + "integrity": "sha1-b6rKUzngzGVno6Vd0oH9hxo55do=", + "dev": true + }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -10732,6 +13583,152 @@ "object-visit": "^1.0.0" } }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "mdast-util-footnote": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", + "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0", + "micromark": "~2.11.0" + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-frontmatter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", + "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "dev": true, + "requires": { + "micromark-extension-frontmatter": "^0.2.0" + } + }, + "mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "dev": true, + "requires": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "dev": true, + "requires": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "dev": true, + "requires": { + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -10744,6 +13741,90 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "micromark": { + "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromark-extension-footnote": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", + "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "dev": true, + "requires": { + "fault": "^1.0.0" + } + }, + "micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "dev": true, + "requires": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "dev": true, + "requires": { + "micromark": "~2.11.3" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "dev": true + }, + "micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -10843,6 +13924,39 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "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" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -10911,6 +14025,12 @@ "path-key": "^3.0.0" } }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", @@ -10985,6 +14105,22 @@ } } }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -11035,6 +14171,12 @@ "word-wrap": "^1.2.3" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-each-series": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", @@ -11047,6 +14189,12 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -11065,6 +14213,35 @@ "p-limit": "^2.2.0" } }, + "p-memoize": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-3.1.0.tgz", + "integrity": "sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA==", + "dev": true, + "requires": { + "mem": "^4.3.0", + "mimic-fn": "^2.1.0" + } + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -11080,6 +14257,20 @@ "callsites": "^3.0.0" } }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -11128,6 +14319,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-to-glob-pattern": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz", + "integrity": "sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=", + "dev": true + }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -11146,6 +14343,27 @@ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -11164,6 +14382,12 @@ "find-up": "^4.0.0" } }, + "pluralize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", + "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -11238,6 +14462,18 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "rc-config-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-3.0.0.tgz", + "integrity": "sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "js-yaml": "^3.12.0", + "json5": "^2.1.1", + "require-from-string": "^2.0.2" + } + }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -11293,12 +14529,61 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "remark-footnotes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", + "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", + "dev": true, + "requires": { + "mdast-util-footnote": "^0.1.0", + "micromark-extension-footnote": "^0.3.0" + } + }, + "remark-frontmatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", + "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "dev": true, + "requires": { + "mdast-util-frontmatter": "^0.2.0", + "micromark-extension-frontmatter": "^0.2.0" + } + }, + "remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "dev": true, + "requires": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -11675,6 +14960,16 @@ "xmlchars": "^2.2.0" } }, + "select-section": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/select-section/-/select-section-0.4.6.tgz", + "integrity": "sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg==", + "dev": true, + "requires": { + "map-like": "^1.0.3", + "txt-ast-traverse": "^1.2.1" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -12163,6 +15458,15 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "structured-source": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", + "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", + "dev": true, + "requires": { + "boundary": "^1.0.1" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -12248,6 +15552,270 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "textlint": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.1.0.tgz", + "integrity": "sha512-VZ0iVepE0jUchMfIW0uKGdEdv3l0ajOFvUBcpB1xGOLAz3gVwpdWvlagVlFXuwjc2N+9mcjTM0PCIXNwIs2vQA==", + "dev": true, + "requires": { + "@textlint/ast-node-types": "^12.1.0", + "@textlint/ast-traverse": "^12.1.0", + "@textlint/feature-flag": "^12.1.0", + "@textlint/fixer-formatter": "^12.1.0", + "@textlint/kernel": "^12.1.0", + "@textlint/linter-formatter": "^12.1.0", + "@textlint/module-interop": "^12.1.0", + "@textlint/textlint-plugin-markdown": "^12.1.0", + "@textlint/textlint-plugin-text": "^12.1.0", + "@textlint/types": "^12.1.0", + "@textlint/utils": "^12.1.0", + "debug": "^4.3.3", + "deep-equal": "^1.1.1", + "file-entry-cache": "^5.0.1", + "get-stdin": "^5.0.1", + "glob": "^7.2.0", + "is-file": "^1.0.0", + "log-symbols": "^1.0.2", + "md5": "^2.3.0", + "mkdirp": "^0.5.0", + "optionator": "^0.9.1", + "path-to-glob-pattern": "^1.0.2", + "rc-config-loader": "^3.0.0", + "read-pkg": "^1.1.0", + "read-pkg-up": "^3.0.0", + "structured-source": "^3.0.2", + "try-resolve": "^1.0.1", + "unique-concat": "^0.2.2" + }, + "dependencies": { + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "textlint-rule-helper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.2.1.tgz", + "integrity": "sha512-pdX3uNbFzQTgINamaBpEHRT/MgROHev5wCnQnUTXRLT5DaRjls0Rmpi5d1MPZG6HT5NKVL++Q2J0FUbh5shi3Q==", + "dev": true, + "requires": { + "structured-source": "^3.0.2", + "unist-util-visit": "^2.0.3" + } + }, + "textlint-rule-no-dead-link": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.8.0.tgz", + "integrity": "sha512-jB45mvIhKdgLFs4kDzfn8Q3C1WBv+BGI6At07ZJd9YmM/+dm+P8W9urisBSXFeQcYoGcaXqDiKZwK9BpdnpciQ==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "get-url-origin": "^1.0.1", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.0", + "p-memoize": "^3.1.0", + "p-queue": "^6.2.0", + "textlint-rule-helper": "^2.1.1" + } + }, + "textlint-rule-no-empty-section": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz", + "integrity": "sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=", + "dev": true, + "requires": { + "select-section": "^0.4.0" + } + }, + "textlint-rule-terminology": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz", + "integrity": "sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "strip-json-comments": "^3.0.1", + "textlint-rule-helper": "^2.1.1" + } + }, "throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", @@ -12327,6 +15895,24 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "try-resolve": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", + "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", + "dev": true + }, "ts-jest": { "version": "26.5.6", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", @@ -12360,6 +15946,12 @@ "tslib": "^1.8.1" } }, + "txt-ast-traverse": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz", + "integrity": "sha1-WOP+Q92121yotRFClDsNG5cN70E=", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12396,6 +15988,28 @@ "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -12416,6 +16030,48 @@ } } }, + "unique-concat": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", + "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -12524,6 +16180,36 @@ "spdx-expression-parse": "^3.0.0" } }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + } + } + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, "vscode-json-languageservice": { "version": "4.1.10", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", @@ -12658,6 +16344,26 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -12677,6 +16383,12 @@ "dev": true, "requires": {} }, + "xml-escape": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", + "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=", + "dev": true + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -12737,6 +16449,12 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "dev": true } } } diff --git a/package.json b/package.json index 08e01fe..a5335bb 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,10 @@ "eslint-plugin-json": "^3.1.0", "jest": "^26.6.3", "prettier": "^2.4.1", + "textlint": "^12.1.0", + "textlint-rule-no-dead-link": "^4.8.0", + "textlint-rule-no-empty-section": "^1.1.0", + "textlint-rule-terminology": "^2.1.5", "ts-jest": "^26.4.4", "typescript": "^4.1.3", "uuid": "^8.3.2" @@ -32,7 +36,7 @@ "build": "rm -rf dist/* && tsc -p .", "test": "jest --passWithNoTests --verbose src/syntax src/library src/execution src/library", "check": "tsc --noEmit", - "lint": "eslint src/**/*.ts", + "lint": "eslint src/**/*.ts && textlint --rule terminology --rule no-empty-section --rule no-dead-link README.md", "prettify": "prettier --write src/@types src/syntax src/execution src/library" } } From 5816f9c4b7a1df22aef514efc3ae1f7b3b67d818 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Sat, 22 Jan 2022 17:35:14 +0530 Subject: [PATCH 154/176] workflow: [ci] improve labels --- .github/workflows/CI.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 3c0dac6..9d8e71e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -41,11 +41,17 @@ jobs: ########################## # Checkout the code base # ########################## - - uses: actions/checkout@v2 + - name: Checkout the code base + uses: actions/checkout@v2 with: + # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + + ################# + # Setup Node.js # + ################# + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} @@ -53,9 +59,11 @@ jobs: # Run npm scripts # ################### - - run: npm ci - # - run: npm run build --if-present - - run: npm test --if-present - env: - CI: true - DEFAULT_BRANCH: develop + - name: Install dependencies + run: npm ci + + - name: Smoke test building the project + run: npm run build + + - name: Run unit tests + run: npm run test From bfbfa225ab9b31929f5202c4a0de3492d0ea8fe1 Mon Sep 17 00:00:00 2001 From: Bonno van der Basch Date: Mon, 24 Jan 2022 12:48:06 +0100 Subject: [PATCH 155/176] chore: [#102] Migrate from NPM to Yarn Migrate from NPM to Yarn GitHub issue: #106 The changes in this commit remove npm as the dependency manager in favor of yarn. * Replace package-lock.json with yarn.lock * Update Dockerfile * Update GitHub Actions CI workflow steps * Update README.md * Check typescript version for ESLint compatibility Closes #102 Co-authored-by: Anindya Kundu --- .github/workflows/CI.yml | 8 +- Dockerfile | 7 +- README.md | 43 +- package-lock.json | 16460 ------------------------------------- package.json | 2 +- yarn.lock | 5248 ++++++++++++ 6 files changed, 5281 insertions(+), 16487 deletions(-) delete mode 100644 package-lock.json create mode 100644 yarn.lock diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9d8e71e..68df6d1 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -56,14 +56,14 @@ jobs: node-version: ${{ matrix.node-version }} ################### - # Run npm scripts # + # Run yarn scripts # ################### - name: Install dependencies - run: npm ci + run: yarn install --frozen-lockfile - name: Smoke test building the project - run: npm run build + run: yarn run build - name: Run unit tests - run: npm run test + run: yarn run test diff --git a/Dockerfile b/Dockerfile index cf70050..cdd5475 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,11 @@ # base from official Node (Alpine LTS) image FROM node:lts-alpine -# update npm -RUN npm install -g npm - # install typescript compiler -RUN npm install -g typescript +RUN yarn global add typescript # install ts-node (to run/debug .ts files without manual transpiling) -RUN npm install -g ts-node +RUN yarn global add ts-node LABEL org.opencontainers.image.description='An initial development image based on the official \ Node.js (on Alpine LTS) image, and further configured with TypeScript compiler and ts-node. \ diff --git a/README.md b/README.md index 113b6f5..e923695 100644 --- a/README.md +++ b/README.md @@ -160,16 +160,25 @@ allow the competition of ideas (Sugar Labs is a meritocracy)._ ### Without Docker -This is a _**TypeScript**_ project that uses _**React**_. You'll need _[**Node.js**](https://nodejs.org/en/)_ -and _**NPM**_ installed on your development machine. You'll need _**tsc**_ (_TypeScript Compiler_) -to manually compile `.ts` files. You'll need _**ts-node**_ (_Node.js executable for TypeScript_) to -manually execute `.ts` scripts directly. +This is a _**TypeScript**_ project. You'll need the following installed on your development machine: -Once _**NPM**_ is installed, to install the above, run +- _[**Node.js**](https://nodejs.org/en/)_ +- _[**Yarn**](https://yarnpkg.com)_ +- _**tsc**_ (_TypeScript Compiler_) to manually compile `.ts` files. +- _**ts-node**_ (_Node.js executable for TypeScript_) to manually execute `.ts` scripts directly. + +Installing _**Node.js**_ will install _**NPM**_ (_Node.js Package Manager_) by default. Use it to install +_Yarn_ using + +```bash +npm install -g yarn +``` + +Once _**Yarn**_ is installed, to install the above, run ```bash -npm i -g typescript -npm i -g ts-node +yarn global add typescript +yarn global add ts-node ``` _**Note:**_ Users on _Linux_ and _MacOS_ are required to add a `sudo` before these commands. @@ -177,7 +186,7 @@ _**Note:**_ Users on _Linux_ and _MacOS_ are required to add a `sudo` before the Check installation using ```bash -node -v && npm -v && tsc -v && ts-node -v +node -v && yarn -v && tsc -v && ts-node -v ``` Output should look like @@ -248,12 +257,12 @@ Windows) this repository using 6. The _Linux Debian 10.7_ (_buster_) _shell_ in the _docker container_ named _musicblocks_ is spawned and standard input/output is connected to the terminal. - _**Node**_ (_Node.js Runtime_), _**npm**_ (_Node Package Manager_), _**tsc**_ (_TypeScript + _**Node**_ (_Node.js Runtime_), _**yarn**_ (_Node Package Manager_), _**tsc**_ (_TypeScript Compiler_), and _**ts-node**_ (_Node executable for TypeScript_) should be installed. Check using ```bash - node --version && npm --version && tsc --version && ts-node --version + node --version && yarn --version && tsc --version && ts-node --version ``` Output should look like @@ -281,7 +290,7 @@ spawned and standard input/output is connected to the terminal. 8. To install all the dependencies (in `package.json`), run ```bash - npm ci + yarn install --frozen-lockfile ``` 9. Miscellaneous commands. @@ -317,37 +326,37 @@ spawned and standard input/output is connected to the terminal. - For testing, run ```bash - npm run test + yarn run test ``` To run a specific path ```bash - npm run test -- "test/path" + yarn run test -- "test/path" ``` To run in watch mode ```bash - npm run test -- "test/path" --watch + yarn run test -- "test/path" --watch ``` - For generating a production build, run ```bash - npm run build + yarn run build ``` - For checking linting problems ```bash - npm run lint + yarn run lint ``` To autofix fixable problems ```bash - npm run lint -- --fix + yarn run lint -- --fix ``` _**Note:**_ If you're running using _Docker Desktop_ on _Windows_, you might experience diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 63d1a6d..0000000 --- a/package-lock.json +++ /dev/null @@ -1,16460 +0,0 @@ -{ - "name": "musicblocks-v4-lib", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "version": "0.1.0", - "license": "AGPL-3.0", - "devDependencies": { - "@types/jest": "^26.0.19", - "@types/uuid": "^8.3.1", - "@typescript-eslint/eslint-plugin": "^4.11.1", - "@typescript-eslint/parser": "^4.11.1", - "eslint": "^7.17.0", - "eslint-config-prettier": "^7.1.0", - "eslint-plugin-json": "^3.1.0", - "jest": "^26.6.3", - "prettier": "^2.4.1", - "textlint": "^12.1.0", - "textlint-rule-no-dead-link": "^4.8.0", - "textlint-rule-no-empty-section": "^1.1.0", - "textlint-rule-terminology": "^2.1.5", - "ts-jest": "^26.4.4", - "typescript": "^4.1.3", - "uuid": "^8.3.2" - } - }, - "node_modules/@azu/format-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", - "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", - "dev": true - }, - "node_modules/@azu/style-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", - "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", - "dev": true, - "dependencies": { - "@azu/format-text": "^1.0.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", - "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", - "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", - "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", - "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@textlint/ast-node-types": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", - "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==", - "dev": true - }, - "node_modules/@textlint/ast-tester": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.1.0.tgz", - "integrity": "sha512-s3VHRDaULFYhxjJ3vP9LUIt2aHLnUB4XFUSRhUVnW4/GDOb1EXCGWFd+wtYy6jTtBg/5TR5ApdC6sNu/SLcb5w==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0", - "debug": "^4.3.3" - } - }, - "node_modules/@textlint/ast-traverse": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.1.0.tgz", - "integrity": "sha512-NJCCMS7lxZ6Ed15zsosbe/5i/SyynqQsxOYxhsMHuyU/adx27WzNWLoFbgTdz6Wmn3Ok1PSFf0442MpoS6SP7g==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "node_modules/@textlint/feature-flag": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.1.0.tgz", - "integrity": "sha512-pQfA2bUXimBQjxT5hVmGGuFf1Cwwx26kbrcwkGHsgxgXlXkg1zboby5UCMOjWda/TbJjynzqDO0JaU24Ms9fZg==", - "dev": true - }, - "node_modules/@textlint/fixer-formatter": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.1.0.tgz", - "integrity": "sha512-ELG9ehkid+J0sRd0mVRbZ+2UOnLqowycrYsaHxDE+xf2s33OcogZa9i3Uact7y2oSCadX00oNLEhsQcwkAqvpw==", - "dev": true, - "dependencies": { - "@textlint/module-interop": "^12.1.0", - "@textlint/types": "^12.1.0", - "chalk": "^1.1.3", - "debug": "^4.3.3", - "diff": "^4.0.2", - "is-file": "^1.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/chalk/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/fixer-formatter/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@textlint/kernel": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.1.0.tgz", - "integrity": "sha512-6crFn0Ng4Y8PnUvD8HdGMZUlxURx3YgbDv/Grp+7kg8qLlNAkvbyJ1cE8ZYJTF+PfJ1dK1FZmmlZsvrieI4KBQ==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0", - "@textlint/ast-tester": "^12.1.0", - "@textlint/ast-traverse": "^12.1.0", - "@textlint/feature-flag": "^12.1.0", - "@textlint/source-code-fixer": "^12.1.0", - "@textlint/types": "^12.1.0", - "@textlint/utils": "^12.1.0", - "debug": "^4.3.3", - "deep-equal": "^1.1.1", - "structured-source": "^3.0.2" - } - }, - "node_modules/@textlint/linter-formatter": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.1.0.tgz", - "integrity": "sha512-OoDvn7wD+pAV+W2loCKgxO9V11rYo14GVKkp8UktsqzeOzxxRY5iZUOALMOOde19fOklb2mEvs8AJ4lDaRDJVQ==", - "dev": true, - "dependencies": { - "@azu/format-text": "^1.0.1", - "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^12.1.0", - "@textlint/types": "^12.1.0", - "chalk": "^1.1.3", - "debug": "^4.3.3", - "is-file": "^1.0.0", - "js-yaml": "^3.14.1", - "optionator": "^0.9.1", - "pluralize": "^2.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.1", - "table": "^6.7.3", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1", - "xml-escape": "^1.1.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/chalk/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@textlint/linter-formatter/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@textlint/markdown-to-ast": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", - "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0", - "debug": "^4.3.3", - "remark-footnotes": "^3.0.0", - "remark-frontmatter": "^3.0.0", - "remark-gfm": "^1.0.0", - "remark-parse": "^9.0.0", - "traverse": "^0.6.6", - "unified": "^9.2.2" - } - }, - "node_modules/@textlint/module-interop": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.1.0.tgz", - "integrity": "sha512-J1VhFZ7lK1V3Ue7DCvZlGIFEuaongBCkir1XFL+f1yfhfQlgfM5TCp3OBBB6NhKPff8T6sPA9niBzMYr+NyKyA==", - "dev": true - }, - "node_modules/@textlint/source-code-fixer": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.1.0.tgz", - "integrity": "sha512-3HEWCu8XlRpxK0UmUxGEzc4u0deaO0GtisqaEsCVHzlQFq6tzE+5VTdZ4ffon64UN8UV57EAC2ralEV/VgxkBQ==", - "dev": true, - "dependencies": { - "@textlint/types": "^12.1.0", - "debug": "^4.3.3" - } - }, - "node_modules/@textlint/text-to-ast": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.1.0.tgz", - "integrity": "sha512-s45+d0E9+gMKz+LC9+sJamU7SVrPyGYsXVLDRM5oxqjdb0MeIfjIFj7xl52MUpAHnywbPSgakB6HHiryiEAmqQ==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "node_modules/@textlint/textlint-plugin-markdown": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.1.0.tgz", - "integrity": "sha512-bS67fq4Ea2JdKO4mJM4sGSATVI1bw9++IfOIsx2rc01NfZlTxwz4kM8lrhvNFHGY4URaN1kCULSgupeI/u/Seg==", - "dev": true, - "dependencies": { - "@textlint/markdown-to-ast": "^12.1.0" - } - }, - "node_modules/@textlint/textlint-plugin-text": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.1.0.tgz", - "integrity": "sha512-ItqpVEYLDYQkEk0ixeD4wElqkgkDErAGGDN/QK4cmIvtBeVd/GSIQFS1pwC1/Abmd4dTK3j/9z/dov1gVFZB1Q==", - "dev": true, - "dependencies": { - "@textlint/text-to-ast": "^12.1.0" - } - }, - "node_modules/@textlint/types": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.1.0.tgz", - "integrity": "sha512-O8RQUiGnBvBrwV/fLHp2vU+y3w223G+qKUzvW/k2eFwAdbtmCfordoKESXAIGuqAUZjgiM2+Mt3We1pY+tMR3g==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "node_modules/@textlint/utils": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.1.0.tgz", - "integrity": "sha512-WE0bxQ/q+PgSslqEBuDi4Z8ZskBA0ZEehmKqcsd0hpDWU4VRU/R9o/WVXwia0APbQxgXPYWaHf1Rb7FAKUcVcg==", - "dev": true - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "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/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/boundary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", - "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001278", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", - "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.891", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", - "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/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/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", - "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - }, - "engines": { - "node": ">=12.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dev": true, - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "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/get-url-origin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-url-origin/-/get-url-origin-1.0.1.tgz", - "integrity": "sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==", - "dev": true - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", - "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=", - "dev": true - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-like": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/map-like/-/map-like-1.1.3.tgz", - "integrity": "sha1-b6rKUzngzGVno6Vd0oH9hxo55do=", - "dev": true - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-footnote": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", - "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", - "dev": true, - "dependencies": { - "mdast-util-to-markdown": "^0.6.0", - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", - "dev": true, - "dependencies": { - "micromark-extension-frontmatter": "^0.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", - "dev": true, - "dependencies": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", - "dev": true, - "dependencies": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "dev": true, - "dependencies": { - "mdast-util-to-markdown": "^0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", - "dev": true, - "dependencies": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "dev": true, - "dependencies": { - "mdast-util-to-markdown": "~0.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromark-extension-footnote": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", - "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", - "dev": true, - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", - "dev": true, - "dependencies": { - "fault": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", - "dev": true, - "dependencies": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "dev": true, - "dependencies": { - "micromark": "~2.11.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", - "dev": true, - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", - "dev": true, - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", - "dev": true, - "dependencies": { - "micromark": "~2.11.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "dev": true, - "dependencies": { - "mime-db": "1.50.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/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/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-memoize": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-3.1.0.tgz", - "integrity": "sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA==", - "dev": true, - "dependencies": { - "mem": "^4.3.0", - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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, - "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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-glob-pattern": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz", - "integrity": "sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", - "dev": true - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "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/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "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", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/rc-config-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-3.0.0.tgz", - "integrity": "sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "js-yaml": "^3.12.0", - "json5": "^2.1.1", - "require-from-string": "^2.0.2" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/remark-footnotes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", - "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", - "dev": true, - "dependencies": { - "mdast-util-footnote": "^0.1.0", - "micromark-extension-footnote": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", - "dev": true, - "dependencies": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "dev": true, - "dependencies": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dev": true, - "dependencies": { - "mdast-util-from-markdown": "^0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/select-section": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/select-section/-/select-section-0.4.6.tgz", - "integrity": "sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg==", - "dev": true, - "dependencies": { - "map-like": "^1.0.3", - "txt-ast-traverse": "^1.2.1" - } - }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/structured-source": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", - "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "dev": true, - "dependencies": { - "boundary": "^1.0.1" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", - "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/textlint": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.1.0.tgz", - "integrity": "sha512-VZ0iVepE0jUchMfIW0uKGdEdv3l0ajOFvUBcpB1xGOLAz3gVwpdWvlagVlFXuwjc2N+9mcjTM0PCIXNwIs2vQA==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^12.1.0", - "@textlint/ast-traverse": "^12.1.0", - "@textlint/feature-flag": "^12.1.0", - "@textlint/fixer-formatter": "^12.1.0", - "@textlint/kernel": "^12.1.0", - "@textlint/linter-formatter": "^12.1.0", - "@textlint/module-interop": "^12.1.0", - "@textlint/textlint-plugin-markdown": "^12.1.0", - "@textlint/textlint-plugin-text": "^12.1.0", - "@textlint/types": "^12.1.0", - "@textlint/utils": "^12.1.0", - "debug": "^4.3.3", - "deep-equal": "^1.1.1", - "file-entry-cache": "^5.0.1", - "get-stdin": "^5.0.1", - "glob": "^7.2.0", - "is-file": "^1.0.0", - "log-symbols": "^1.0.2", - "md5": "^2.3.0", - "mkdirp": "^0.5.0", - "optionator": "^0.9.1", - "path-to-glob-pattern": "^1.0.2", - "rc-config-loader": "^3.0.0", - "read-pkg": "^1.1.0", - "read-pkg-up": "^3.0.0", - "structured-source": "^3.0.2", - "try-resolve": "^1.0.1", - "unique-concat": "^0.2.2" - }, - "bin": { - "textlint": "bin/textlint.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/textlint-rule-helper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.2.1.tgz", - "integrity": "sha512-pdX3uNbFzQTgINamaBpEHRT/MgROHev5wCnQnUTXRLT5DaRjls0Rmpi5d1MPZG6HT5NKVL++Q2J0FUbh5shi3Q==", - "dev": true, - "dependencies": { - "structured-source": "^3.0.2", - "unist-util-visit": "^2.0.3" - }, - "peerDependencies": { - "@textlint/ast-node-types": "^12.1.0", - "@textlint/types": "^12.1.0" - } - }, - "node_modules/textlint-rule-no-dead-link": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.8.0.tgz", - "integrity": "sha512-jB45mvIhKdgLFs4kDzfn8Q3C1WBv+BGI6At07ZJd9YmM/+dm+P8W9urisBSXFeQcYoGcaXqDiKZwK9BpdnpciQ==", - "dev": true, - "dependencies": { - "fs-extra": "^8.1.0", - "get-url-origin": "^1.0.1", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.0", - "p-memoize": "^3.1.0", - "p-queue": "^6.2.0", - "textlint-rule-helper": "^2.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint-rule-no-empty-section": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz", - "integrity": "sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=", - "dev": true, - "dependencies": { - "select-section": "^0.4.0" - } - }, - "node_modules/textlint-rule-terminology": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz", - "integrity": "sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "strip-json-comments": "^3.0.1", - "textlint-rule-helper": "^2.1.1" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/textlint/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "node_modules/textlint/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/textlint/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textlint/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/textlint/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/read-pkg-up/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/read-pkg-up/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/read-pkg-up/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/textlint/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/textlint/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/try-resolve": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", - "dev": true - }, - "node_modules/ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "jest": ">=26 <27", - "typescript": ">=3.8 <5.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/txt-ast-traverse": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz", - "integrity": "sha1-WOP+Q92121yotRFClDsNG5cN70E=", - "deprecated": "See https://github.com/textlint/textlint/issues/455", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dev": true, - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-concat": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", - "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=", - "dev": true - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/vscode-json-languageservice": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", - "integrity": "sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.2" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz", - "integrity": "sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "node_modules/vscode-nls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", - "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", - "dev": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", - "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=", - "dev": true - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@azu/format-text": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz", - "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=", - "dev": true - }, - "@azu/style-format": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz", - "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=", - "dev": true, - "requires": { - "@azu/format-text": "^1.0.1" - } - }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", - "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", - "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", - "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", - "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", - "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", - "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", - "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", - "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", - "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", - "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", - "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", - "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", - "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", - "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", - "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", - "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.16.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", - "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", - "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - } - } - }, - "@babel/traverse": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", - "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", - "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", - "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@textlint/ast-node-types": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", - "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==", - "dev": true - }, - "@textlint/ast-tester": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-12.1.0.tgz", - "integrity": "sha512-s3VHRDaULFYhxjJ3vP9LUIt2aHLnUB4XFUSRhUVnW4/GDOb1EXCGWFd+wtYy6jTtBg/5TR5ApdC6sNu/SLcb5w==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0", - "debug": "^4.3.3" - } - }, - "@textlint/ast-traverse": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-12.1.0.tgz", - "integrity": "sha512-NJCCMS7lxZ6Ed15zsosbe/5i/SyynqQsxOYxhsMHuyU/adx27WzNWLoFbgTdz6Wmn3Ok1PSFf0442MpoS6SP7g==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "@textlint/feature-flag": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-12.1.0.tgz", - "integrity": "sha512-pQfA2bUXimBQjxT5hVmGGuFf1Cwwx26kbrcwkGHsgxgXlXkg1zboby5UCMOjWda/TbJjynzqDO0JaU24Ms9fZg==", - "dev": true - }, - "@textlint/fixer-formatter": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-12.1.0.tgz", - "integrity": "sha512-ELG9ehkid+J0sRd0mVRbZ+2UOnLqowycrYsaHxDE+xf2s33OcogZa9i3Uact7y2oSCadX00oNLEhsQcwkAqvpw==", - "dev": true, - "requires": { - "@textlint/module-interop": "^12.1.0", - "@textlint/types": "^12.1.0", - "chalk": "^1.1.3", - "debug": "^4.3.3", - "diff": "^4.0.2", - "is-file": "^1.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "@textlint/kernel": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-12.1.0.tgz", - "integrity": "sha512-6crFn0Ng4Y8PnUvD8HdGMZUlxURx3YgbDv/Grp+7kg8qLlNAkvbyJ1cE8ZYJTF+PfJ1dK1FZmmlZsvrieI4KBQ==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0", - "@textlint/ast-tester": "^12.1.0", - "@textlint/ast-traverse": "^12.1.0", - "@textlint/feature-flag": "^12.1.0", - "@textlint/source-code-fixer": "^12.1.0", - "@textlint/types": "^12.1.0", - "@textlint/utils": "^12.1.0", - "debug": "^4.3.3", - "deep-equal": "^1.1.1", - "structured-source": "^3.0.2" - } - }, - "@textlint/linter-formatter": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-12.1.0.tgz", - "integrity": "sha512-OoDvn7wD+pAV+W2loCKgxO9V11rYo14GVKkp8UktsqzeOzxxRY5iZUOALMOOde19fOklb2mEvs8AJ4lDaRDJVQ==", - "dev": true, - "requires": { - "@azu/format-text": "^1.0.1", - "@azu/style-format": "^1.0.0", - "@textlint/module-interop": "^12.1.0", - "@textlint/types": "^12.1.0", - "chalk": "^1.1.3", - "debug": "^4.3.3", - "is-file": "^1.0.0", - "js-yaml": "^3.14.1", - "optionator": "^0.9.1", - "pluralize": "^2.0.0", - "string-width": "^1.0.2", - "strip-ansi": "^6.0.1", - "table": "^6.7.3", - "text-table": "^0.2.0", - "try-resolve": "^1.0.1", - "xml-escape": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "@textlint/markdown-to-ast": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", - "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0", - "debug": "^4.3.3", - "remark-footnotes": "^3.0.0", - "remark-frontmatter": "^3.0.0", - "remark-gfm": "^1.0.0", - "remark-parse": "^9.0.0", - "traverse": "^0.6.6", - "unified": "^9.2.2" - } - }, - "@textlint/module-interop": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-12.1.0.tgz", - "integrity": "sha512-J1VhFZ7lK1V3Ue7DCvZlGIFEuaongBCkir1XFL+f1yfhfQlgfM5TCp3OBBB6NhKPff8T6sPA9niBzMYr+NyKyA==", - "dev": true - }, - "@textlint/source-code-fixer": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-12.1.0.tgz", - "integrity": "sha512-3HEWCu8XlRpxK0UmUxGEzc4u0deaO0GtisqaEsCVHzlQFq6tzE+5VTdZ4ffon64UN8UV57EAC2ralEV/VgxkBQ==", - "dev": true, - "requires": { - "@textlint/types": "^12.1.0", - "debug": "^4.3.3" - } - }, - "@textlint/text-to-ast": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-12.1.0.tgz", - "integrity": "sha512-s45+d0E9+gMKz+LC9+sJamU7SVrPyGYsXVLDRM5oxqjdb0MeIfjIFj7xl52MUpAHnywbPSgakB6HHiryiEAmqQ==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "@textlint/textlint-plugin-markdown": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.1.0.tgz", - "integrity": "sha512-bS67fq4Ea2JdKO4mJM4sGSATVI1bw9++IfOIsx2rc01NfZlTxwz4kM8lrhvNFHGY4URaN1kCULSgupeI/u/Seg==", - "dev": true, - "requires": { - "@textlint/markdown-to-ast": "^12.1.0" - } - }, - "@textlint/textlint-plugin-text": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.1.0.tgz", - "integrity": "sha512-ItqpVEYLDYQkEk0ixeD4wElqkgkDErAGGDN/QK4cmIvtBeVd/GSIQFS1pwC1/Abmd4dTK3j/9z/dov1gVFZB1Q==", - "dev": true, - "requires": { - "@textlint/text-to-ast": "^12.1.0" - } - }, - "@textlint/types": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-12.1.0.tgz", - "integrity": "sha512-O8RQUiGnBvBrwV/fLHp2vU+y3w223G+qKUzvW/k2eFwAdbtmCfordoKESXAIGuqAUZjgiM2+Mt3We1pY+tMR3g==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0" - } - }, - "@textlint/utils": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-12.1.0.tgz", - "integrity": "sha512-WE0bxQ/q+PgSslqEBuDi4Z8ZskBA0ZEehmKqcsd0hpDWU4VRU/R9o/WVXwia0APbQxgXPYWaHf1Rb7FAKUcVcg==", - "dev": true - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/node": { - "version": "16.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", - "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", - "dev": true - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "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" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "boundary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", - "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.17.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", - "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001278", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", - "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "electron-to-chromium": { - "version": "1.3.891", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.891.tgz", - "integrity": "sha512-3cpwR82QkIS01CN/dup/4Yr3BiOiRLlZlcAFn/5FbNCunMO9ojqDgEP9JEo1QNLflu3pEnPWve50gHOEKc7r6w==", - "dev": true - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "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" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "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" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", - "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", - "dev": true, - "requires": {} - }, - "eslint-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz", - "integrity": "sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g==", - "dev": true, - "requires": { - "lodash": "^4.17.21", - "vscode-json-languageservice": "^4.1.6" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dev": true, - "requires": { - "format": "^0.2.0" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "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" - } - }, - "get-url-origin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-url-origin/-/get-url-origin-1.0.1.tgz", - "integrity": "sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw==", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file/-/is-file-1.0.0.tgz", - "integrity": "sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", - "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "longest-streak": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", - "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-like": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/map-like/-/map-like-1.1.3.tgz", - "integrity": "sha1-b6rKUzngzGVno6Vd0oH9hxo55do=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "requires": { - "repeat-string": "^1.0.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "mdast-util-find-and-replace": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", - "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "mdast-util-footnote": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", - "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", - "dev": true, - "requires": { - "mdast-util-to-markdown": "^0.6.0", - "micromark": "~2.11.0" - } - }, - "mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "mdast-util-frontmatter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", - "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", - "dev": true, - "requires": { - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "mdast-util-gfm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", - "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", - "dev": true, - "requires": { - "mdast-util-gfm-autolink-literal": "^0.1.0", - "mdast-util-gfm-strikethrough": "^0.2.0", - "mdast-util-gfm-table": "^0.1.0", - "mdast-util-gfm-task-list-item": "^0.1.0", - "mdast-util-to-markdown": "^0.6.1" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", - "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "mdast-util-find-and-replace": "^1.1.0", - "micromark": "^2.11.3" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", - "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", - "dev": true, - "requires": { - "mdast-util-to-markdown": "^0.6.0" - } - }, - "mdast-util-gfm-table": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", - "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", - "dev": true, - "requires": { - "markdown-table": "^2.0.0", - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", - "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", - "dev": true, - "requires": { - "mdast-util-to-markdown": "~0.6.0" - } - }, - "mdast-util-to-markdown": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", - "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "longest-streak": "^2.0.0", - "mdast-util-to-string": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.0.0", - "zwitch": "^1.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "micromark-extension-footnote": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", - "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", - "dev": true, - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-frontmatter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", - "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", - "dev": true, - "requires": { - "fault": "^1.0.0" - } - }, - "micromark-extension-gfm": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", - "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", - "dev": true, - "requires": { - "micromark": "~2.11.0", - "micromark-extension-gfm-autolink-literal": "~0.5.0", - "micromark-extension-gfm-strikethrough": "~0.6.5", - "micromark-extension-gfm-table": "~0.4.0", - "micromark-extension-gfm-tagfilter": "~0.3.0", - "micromark-extension-gfm-task-list-item": "~0.3.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", - "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", - "dev": true, - "requires": { - "micromark": "~2.11.3" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", - "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", - "dev": true, - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-table": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", - "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", - "dev": true, - "requires": { - "micromark": "~2.11.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", - "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", - "dev": true - }, - "micromark-extension-gfm-task-list-item": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", - "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", - "dev": true, - "requires": { - "micromark": "~2.11.0" - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", - "dev": true - }, - "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", - "dev": true, - "requires": { - "mime-db": "1.50.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-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" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-memoize": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-3.1.0.tgz", - "integrity": "sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA==", - "dev": true, - "requires": { - "mem": "^4.3.0", - "mimic-fn": "^2.1.0" - } - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "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" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-to-glob-pattern": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz", - "integrity": "sha1-Rz5qOikqnRP7rj7czuctO6uoxhk=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pluralize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38=", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "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", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "rc-config-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-3.0.0.tgz", - "integrity": "sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "js-yaml": "^3.12.0", - "json5": "^2.1.1", - "require-from-string": "^2.0.2" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "remark-footnotes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", - "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", - "dev": true, - "requires": { - "mdast-util-footnote": "^0.1.0", - "micromark-extension-footnote": "^0.3.0" - } - }, - "remark-frontmatter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", - "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", - "dev": true, - "requires": { - "mdast-util-frontmatter": "^0.2.0", - "micromark-extension-frontmatter": "^0.2.0" - } - }, - "remark-gfm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", - "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", - "dev": true, - "requires": { - "mdast-util-gfm": "^0.1.0", - "micromark-extension-gfm": "^0.3.0" - } - }, - "remark-parse": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", - "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", - "dev": true, - "requires": { - "mdast-util-from-markdown": "^0.8.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "select-section": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/select-section/-/select-section-0.4.6.tgz", - "integrity": "sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg==", - "dev": true, - "requires": { - "map-like": "^1.0.3", - "txt-ast-traverse": "^1.2.1" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "structured-source": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", - "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "dev": true, - "requires": { - "boundary": "^1.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", - "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.0.tgz", - "integrity": "sha512-fX9/Yiy9YwnP/QB/4zqBpTavtL4YuXpiHlXlkE0y2itGcO++ixFIg+NFk1l0TfHjt11EDDhHAhLVe0rFgTBaGA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "textlint": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-12.1.0.tgz", - "integrity": "sha512-VZ0iVepE0jUchMfIW0uKGdEdv3l0ajOFvUBcpB1xGOLAz3gVwpdWvlagVlFXuwjc2N+9mcjTM0PCIXNwIs2vQA==", - "dev": true, - "requires": { - "@textlint/ast-node-types": "^12.1.0", - "@textlint/ast-traverse": "^12.1.0", - "@textlint/feature-flag": "^12.1.0", - "@textlint/fixer-formatter": "^12.1.0", - "@textlint/kernel": "^12.1.0", - "@textlint/linter-formatter": "^12.1.0", - "@textlint/module-interop": "^12.1.0", - "@textlint/textlint-plugin-markdown": "^12.1.0", - "@textlint/textlint-plugin-text": "^12.1.0", - "@textlint/types": "^12.1.0", - "@textlint/utils": "^12.1.0", - "debug": "^4.3.3", - "deep-equal": "^1.1.1", - "file-entry-cache": "^5.0.1", - "get-stdin": "^5.0.1", - "glob": "^7.2.0", - "is-file": "^1.0.0", - "log-symbols": "^1.0.2", - "md5": "^2.3.0", - "mkdirp": "^0.5.0", - "optionator": "^0.9.1", - "path-to-glob-pattern": "^1.0.2", - "rc-config-loader": "^3.0.0", - "read-pkg": "^1.1.0", - "read-pkg-up": "^3.0.0", - "structured-source": "^3.0.2", - "try-resolve": "^1.0.1", - "unique-concat": "^0.2.2" - }, - "dependencies": { - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - } - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "textlint-rule-helper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.2.1.tgz", - "integrity": "sha512-pdX3uNbFzQTgINamaBpEHRT/MgROHev5wCnQnUTXRLT5DaRjls0Rmpi5d1MPZG6HT5NKVL++Q2J0FUbh5shi3Q==", - "dev": true, - "requires": { - "structured-source": "^3.0.2", - "unist-util-visit": "^2.0.3" - } - }, - "textlint-rule-no-dead-link": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.8.0.tgz", - "integrity": "sha512-jB45mvIhKdgLFs4kDzfn8Q3C1WBv+BGI6At07ZJd9YmM/+dm+P8W9urisBSXFeQcYoGcaXqDiKZwK9BpdnpciQ==", - "dev": true, - "requires": { - "fs-extra": "^8.1.0", - "get-url-origin": "^1.0.1", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.0", - "p-memoize": "^3.1.0", - "p-queue": "^6.2.0", - "textlint-rule-helper": "^2.1.1" - } - }, - "textlint-rule-no-empty-section": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz", - "integrity": "sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc=", - "dev": true, - "requires": { - "select-section": "^0.4.0" - } - }, - "textlint-rule-terminology": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz", - "integrity": "sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "strip-json-comments": "^3.0.1", - "textlint-rule-helper": "^2.1.1" - } - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true - }, - "try-resolve": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", - "dev": true - }, - "ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "txt-ast-traverse": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz", - "integrity": "sha1-WOP+Q92121yotRFClDsNG5cN70E=", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "dev": true - }, - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "unique-concat": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", - "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=", - "dev": true - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - } - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "vscode-json-languageservice": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz", - "integrity": "sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ==", - "dev": true, - "requires": { - "jsonc-parser": "^3.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-languageserver-types": "^3.16.0", - "vscode-nls": "^5.0.0", - "vscode-uri": "^3.0.2" - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz", - "integrity": "sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==", - "dev": true - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "vscode-nls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", - "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", - "dev": true - }, - "vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "requires": {} - }, - "xml-escape": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz", - "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "dev": true - } - } -} diff --git a/package.json b/package.json index a5335bb..8c37b60 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "textlint-rule-no-empty-section": "^1.1.0", "textlint-rule-terminology": "^2.1.5", "ts-jest": "^26.4.4", - "typescript": "^4.1.3", + "typescript": "4.1.3", "uuid": "^8.3.2" }, "scripts": { diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..7f9dd16 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5248 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@azu/format-text@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@azu/format-text/-/format-text-1.0.1.tgz#6967350a94640f6b02855169bd897ce54d6cebe2" + integrity sha1-aWc1CpRkD2sChVFpvYl85U1s6+I= + +"@azu/style-format@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@azu/style-format/-/style-format-1.0.0.tgz#e70187f8a862e191b1bce6c0268f13acd3a56b20" + integrity sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA= + dependencies: + "@azu/format-text" "^1.0.1" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.16.4": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" + integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^26.6.2" + jest-util "^26.6.2" + slash "^3.0.0" + +"@jest/core@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" + integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/reporters" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-changed-files "^26.6.2" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-resolve-dependencies "^26.6.3" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + jest-watcher "^26.6.2" + micromatch "^4.0.2" + p-each-series "^2.1.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" + integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + dependencies: + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + +"@jest/fake-timers@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" + integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + dependencies: + "@jest/types" "^26.6.2" + "@sinonjs/fake-timers" "^6.0.1" + "@types/node" "*" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +"@jest/globals@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" + integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/types" "^26.6.2" + expect "^26.6.2" + +"@jest/reporters@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" + integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^26.6.2" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^7.0.0" + optionalDependencies: + node-notifier "^8.0.0" + +"@jest/source-map@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" + integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.4" + source-map "^0.6.0" + +"@jest/test-result@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" + integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^26.6.3": + version "26.6.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" + integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + dependencies: + "@jest/test-result" "^26.6.2" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-runner "^26.6.3" + jest-runtime "^26.6.3" + +"@jest/transform@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" + integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^26.6.2" + babel-plugin-istanbul "^6.0.0" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.4" + jest-haste-map "^26.6.2" + jest-regex-util "^26.0.0" + jest-util "^26.6.2" + micromatch "^4.0.2" + pirates "^4.0.1" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@textlint/ast-node-types@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz#e8b2a39bb2dd36d83c4342a5b5ed0d84217cf54a" + integrity sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA== + +"@textlint/ast-tester@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-12.1.0.tgz#2dc620a75f256e8a5529f860869770ac61edc5c8" + integrity sha512-s3VHRDaULFYhxjJ3vP9LUIt2aHLnUB4XFUSRhUVnW4/GDOb1EXCGWFd+wtYy6jTtBg/5TR5ApdC6sNu/SLcb5w== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + debug "^4.3.3" + +"@textlint/ast-traverse@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-12.1.0.tgz#d7c95534b05c3eacae7e47014dd1e8df821d6c8d" + integrity sha512-NJCCMS7lxZ6Ed15zsosbe/5i/SyynqQsxOYxhsMHuyU/adx27WzNWLoFbgTdz6Wmn3Ok1PSFf0442MpoS6SP7g== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + +"@textlint/feature-flag@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-12.1.0.tgz#b31e91357d774a71f794acc1de5436763fbbcaea" + integrity sha512-pQfA2bUXimBQjxT5hVmGGuFf1Cwwx26kbrcwkGHsgxgXlXkg1zboby5UCMOjWda/TbJjynzqDO0JaU24Ms9fZg== + +"@textlint/fixer-formatter@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-12.1.0.tgz#24f74b956d3433e41bf5c14052587ca8ce4aaec2" + integrity sha512-ELG9ehkid+J0sRd0mVRbZ+2UOnLqowycrYsaHxDE+xf2s33OcogZa9i3Uact7y2oSCadX00oNLEhsQcwkAqvpw== + dependencies: + "@textlint/module-interop" "^12.1.0" + "@textlint/types" "^12.1.0" + chalk "^1.1.3" + debug "^4.3.3" + diff "^4.0.2" + is-file "^1.0.0" + string-width "^1.0.2" + strip-ansi "^6.0.1" + text-table "^0.2.0" + try-resolve "^1.0.1" + +"@textlint/kernel@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-12.1.0.tgz#e0677a3e120aceddc75a485a3fdca44cdc42133d" + integrity sha512-6crFn0Ng4Y8PnUvD8HdGMZUlxURx3YgbDv/Grp+7kg8qLlNAkvbyJ1cE8ZYJTF+PfJ1dK1FZmmlZsvrieI4KBQ== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + "@textlint/ast-tester" "^12.1.0" + "@textlint/ast-traverse" "^12.1.0" + "@textlint/feature-flag" "^12.1.0" + "@textlint/source-code-fixer" "^12.1.0" + "@textlint/types" "^12.1.0" + "@textlint/utils" "^12.1.0" + debug "^4.3.3" + deep-equal "^1.1.1" + structured-source "^3.0.2" + +"@textlint/linter-formatter@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-12.1.0.tgz#cc3982eab8321124a900770e6db4d0158b6be323" + integrity sha512-OoDvn7wD+pAV+W2loCKgxO9V11rYo14GVKkp8UktsqzeOzxxRY5iZUOALMOOde19fOklb2mEvs8AJ4lDaRDJVQ== + dependencies: + "@azu/format-text" "^1.0.1" + "@azu/style-format" "^1.0.0" + "@textlint/module-interop" "^12.1.0" + "@textlint/types" "^12.1.0" + chalk "^1.1.3" + debug "^4.3.3" + is-file "^1.0.0" + js-yaml "^3.14.1" + optionator "^0.9.1" + pluralize "^2.0.0" + string-width "^1.0.2" + strip-ansi "^6.0.1" + table "^6.7.3" + text-table "^0.2.0" + try-resolve "^1.0.1" + xml-escape "^1.1.0" + +"@textlint/markdown-to-ast@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz#ccee1613e8bd1c472660c1ebfade5f44a40a6696" + integrity sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + debug "^4.3.3" + remark-footnotes "^3.0.0" + remark-frontmatter "^3.0.0" + remark-gfm "^1.0.0" + remark-parse "^9.0.0" + traverse "^0.6.6" + unified "^9.2.2" + +"@textlint/module-interop@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-12.1.0.tgz#fb8dc6ae7cded574ce04ed0e7854645c6486eff0" + integrity sha512-J1VhFZ7lK1V3Ue7DCvZlGIFEuaongBCkir1XFL+f1yfhfQlgfM5TCp3OBBB6NhKPff8T6sPA9niBzMYr+NyKyA== + +"@textlint/source-code-fixer@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/source-code-fixer/-/source-code-fixer-12.1.0.tgz#2b296cbf8c23148978c156165e420747ee604c83" + integrity sha512-3HEWCu8XlRpxK0UmUxGEzc4u0deaO0GtisqaEsCVHzlQFq6tzE+5VTdZ4ffon64UN8UV57EAC2ralEV/VgxkBQ== + dependencies: + "@textlint/types" "^12.1.0" + debug "^4.3.3" + +"@textlint/text-to-ast@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-12.1.0.tgz#ba19315a981fc319cf74ad5d7ec4a995d7c9452e" + integrity sha512-s45+d0E9+gMKz+LC9+sJamU7SVrPyGYsXVLDRM5oxqjdb0MeIfjIFj7xl52MUpAHnywbPSgakB6HHiryiEAmqQ== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + +"@textlint/textlint-plugin-markdown@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-12.1.0.tgz#d5b2cf4c655190e5aecd9dba7db38db7850bf5c9" + integrity sha512-bS67fq4Ea2JdKO4mJM4sGSATVI1bw9++IfOIsx2rc01NfZlTxwz4kM8lrhvNFHGY4URaN1kCULSgupeI/u/Seg== + dependencies: + "@textlint/markdown-to-ast" "^12.1.0" + +"@textlint/textlint-plugin-text@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-12.1.0.tgz#9ded3054b4f48d4b90d119a6c930f911ebf57caa" + integrity sha512-ItqpVEYLDYQkEk0ixeD4wElqkgkDErAGGDN/QK4cmIvtBeVd/GSIQFS1pwC1/Abmd4dTK3j/9z/dov1gVFZB1Q== + dependencies: + "@textlint/text-to-ast" "^12.1.0" + +"@textlint/types@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/types/-/types-12.1.0.tgz#69e3be4b00b10000e37cca4947c68df554e5275b" + integrity sha512-O8RQUiGnBvBrwV/fLHp2vU+y3w223G+qKUzvW/k2eFwAdbtmCfordoKESXAIGuqAUZjgiM2+Mt3We1pY+tMR3g== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + +"@textlint/utils@^12.1.0": + version "12.1.0" + resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-12.1.0.tgz#42b034582a5eb8576f9457e16691d9556617bd40" + integrity sha512-WE0bxQ/q+PgSslqEBuDi4Z8ZskBA0ZEehmKqcsd0hpDWU4VRU/R9o/WVXwia0APbQxgXPYWaHf1Rb7FAKUcVcg== + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^26.0.19": + version "26.0.24" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" + integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + dependencies: + jest-diff "^26.0.0" + pretty-format "^26.0.0" + +"@types/json-schema@^7.0.7": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/node@*": + version "17.0.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.10.tgz#616f16e9d3a2a3d618136b1be244315d95bd7cab" + integrity sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + +"@types/prettier@^2.0.0": + version "2.4.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" + integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/uuid@^8.3.1": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^4.11.1": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^4.11.1": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + dependencies: + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.2.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^8.0.1: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +babel-jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" + integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + dependencies: + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/babel__core" "^7.1.7" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" + integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.0.0" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" + integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== + dependencies: + babel-plugin-jest-hoist "^26.6.2" + babel-preset-current-node-syntax "^1.0.0" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + integrity sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browserslist@^4.17.5: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001286: + version "1.0.30001301" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz#ebc9086026534cab0dab99425d9c3b4425e5f450" + integrity sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cjs-module-lexer@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" + integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decimal.js@^10.2.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@^0.1.3, deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" + integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== + +diff@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +electron-to-chromium@^1.4.17: + version "1.4.51" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz#a432f5a5d983ace79278a33057300cf949627e63" + integrity sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ== + +emittery@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" + integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== + +eslint-plugin-json@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" + integrity sha512-MrlG2ynFEHe7wDGwbUuFPsaT2b1uhuEFhJ+W1f1u+1C2EkXmTYJp4B1aAdQQ8M+CC3t//N/oRKiIVw14L2HR1g== + dependencies: + lodash "^4.17.21" + vscode-json-languageservice "^4.1.6" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.17.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" + integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + dependencies: + "@jest/types" "^26.6.2" + ansi-styles "^4.0.0" + jest-get-type "^26.3.0" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-regex-util "^26.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +fault@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + +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= + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^2.1.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-url-origin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-url-origin/-/get-url-origin-1.0.1.tgz#edebfcc085433e84c6b32a5738b0996edfd5a7b9" + integrity sha512-MMSKo16gB2+6CjWy55jNdIAqUEaKgw3LzZCb8wVVtFrhoQ78EXyuYXxDdn3COI3A4Xr4ZfM3fZa9RTjO6DOTxw== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +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" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-buffer@^1.1.5, is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-file/-/is-file-1.0.0.tgz#28a44cfbd9d3db193045f22b65fce8edf9620596" + integrity sha1-KKRM+9nT2xkwRfIrZfzo7fliBZY= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-regex@^1.0.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" + integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== + dependencies: + "@jest/types" "^26.6.2" + execa "^4.0.0" + throat "^5.0.0" + +jest-cli@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" + integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== + dependencies: + "@jest/core" "^26.6.3" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.4" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^26.6.3" + jest-util "^26.6.2" + jest-validate "^26.6.2" + prompts "^2.0.1" + yargs "^15.4.1" + +jest-config@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" + integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^26.6.3" + "@jest/types" "^26.6.2" + babel-jest "^26.6.3" + chalk "^4.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + graceful-fs "^4.2.4" + jest-environment-jsdom "^26.6.2" + jest-environment-node "^26.6.2" + jest-get-type "^26.3.0" + jest-jasmine2 "^26.6.3" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + micromatch "^4.0.2" + pretty-format "^26.6.2" + +jest-diff@^26.0.0, jest-diff@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" + integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== + dependencies: + chalk "^4.0.0" + diff-sequences "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-docblock@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" + integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== + dependencies: + detect-newline "^3.0.0" + +jest-each@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" + integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + jest-get-type "^26.3.0" + jest-util "^26.6.2" + pretty-format "^26.6.2" + +jest-environment-jsdom@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" + integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + jsdom "^16.4.0" + +jest-environment-node@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" + integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== + dependencies: + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + jest-mock "^26.6.2" + jest-util "^26.6.2" + +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== + +jest-haste-map@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== + dependencies: + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" + integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + expect "^26.6.2" + is-generator-fn "^2.0.0" + jest-each "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-runtime "^26.6.3" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + pretty-format "^26.6.2" + throat "^5.0.0" + +jest-leak-detector@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" + integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== + dependencies: + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-matcher-utils@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" + integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + dependencies: + chalk "^4.0.0" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + pretty-format "^26.6.2" + +jest-message-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" + integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.4" + micromatch "^4.0.2" + pretty-format "^26.6.2" + slash "^3.0.0" + stack-utils "^2.0.2" + +jest-mock@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" + integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-resolve-dependencies@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" + integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== + dependencies: + "@jest/types" "^26.6.2" + jest-regex-util "^26.0.0" + jest-snapshot "^26.6.2" + +jest-resolve@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" + integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== + dependencies: + "@jest/types" "^26.6.2" + chalk "^4.0.0" + graceful-fs "^4.2.4" + jest-pnp-resolver "^1.2.2" + jest-util "^26.6.2" + read-pkg-up "^7.0.1" + resolve "^1.18.1" + slash "^3.0.0" + +jest-runner@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" + integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.7.1" + exit "^0.1.2" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-docblock "^26.0.0" + jest-haste-map "^26.6.2" + jest-leak-detector "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + jest-runtime "^26.6.3" + jest-util "^26.6.2" + jest-worker "^26.6.2" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" + integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + dependencies: + "@jest/console" "^26.6.2" + "@jest/environment" "^26.6.2" + "@jest/fake-timers" "^26.6.2" + "@jest/globals" "^26.6.2" + "@jest/source-map" "^26.6.2" + "@jest/test-result" "^26.6.2" + "@jest/transform" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" + cjs-module-lexer "^0.6.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.4" + jest-config "^26.6.3" + jest-haste-map "^26.6.2" + jest-message-util "^26.6.2" + jest-mock "^26.6.2" + jest-regex-util "^26.0.0" + jest-resolve "^26.6.2" + jest-snapshot "^26.6.2" + jest-util "^26.6.2" + jest-validate "^26.6.2" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.4.1" + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-snapshot@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" + integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^26.6.2" + "@types/babel__traverse" "^7.0.4" + "@types/prettier" "^2.0.0" + chalk "^4.0.0" + expect "^26.6.2" + graceful-fs "^4.2.4" + jest-diff "^26.6.2" + jest-get-type "^26.3.0" + jest-haste-map "^26.6.2" + jest-matcher-utils "^26.6.2" + jest-message-util "^26.6.2" + jest-resolve "^26.6.2" + natural-compare "^1.4.0" + pretty-format "^26.6.2" + semver "^7.3.2" + +jest-util@^26.1.0, jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + +jest-validate@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== + dependencies: + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" + leven "^3.1.0" + pretty-format "^26.6.2" + +jest-watcher@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" + integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== + dependencies: + "@jest/test-result" "^26.6.2" + "@jest/types" "^26.6.2" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + jest-util "^26.6.2" + string-length "^4.0.1" + +jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^26.6.3: + version "26.6.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" + integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== + dependencies: + "@jest/core" "^26.6.3" + import-local "^3.0.2" + jest-cli "^26.6.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.12.0, js-yaml@^3.13.1, js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsdom@^16.4.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json5@2.x, json5@^2.1.1, json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonc-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@4.x, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@1.x: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-like@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/map-like/-/map-like-1.1.3.tgz#6faaca5339e0cc6567a3a55dd281fd871a39e5da" + integrity sha1-b6rKUzngzGVno6Vd0oH9hxo55do= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +md5@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +mdast-util-find-and-replace@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" + integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== + dependencies: + escape-string-regexp "^4.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +mdast-util-footnote@^0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz#4b226caeab4613a3362c144c94af0fdd6f7e0ef0" + integrity sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w== + dependencies: + mdast-util-to-markdown "^0.6.0" + micromark "~2.11.0" + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-frontmatter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz#8bd5cd55e236c03e204a036f7372ebe9e6748240" + integrity sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ== + dependencies: + micromark-extension-frontmatter "^0.2.0" + +mdast-util-gfm-autolink-literal@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" + integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== + dependencies: + ccount "^1.0.0" + mdast-util-find-and-replace "^1.1.0" + micromark "^2.11.3" + +mdast-util-gfm-strikethrough@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" + integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== + dependencies: + mdast-util-to-markdown "^0.6.0" + +mdast-util-gfm-table@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" + integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== + dependencies: + markdown-table "^2.0.0" + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-task-list-item@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" + integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== + dependencies: + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" + integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== + dependencies: + mdast-util-gfm-autolink-literal "^0.1.0" + mdast-util-gfm-strikethrough "^0.2.0" + mdast-util-gfm-table "^0.1.0" + mdast-util-gfm-task-list-item "^0.1.0" + mdast-util-to-markdown "^0.6.1" + +mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mem@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromark-extension-footnote@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz#129b74ef4920ce96719b2c06102ee7abb2b88a20" + integrity sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ== + dependencies: + micromark "~2.11.0" + +micromark-extension-frontmatter@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz#61b8e92e9213e1d3c13f5a59e7862f5ca98dfa53" + integrity sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A== + dependencies: + fault "^1.0.0" + +micromark-extension-gfm-autolink-literal@~0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" + integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== + dependencies: + micromark "~2.11.3" + +micromark-extension-gfm-strikethrough@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" + integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-table@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" + integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-tagfilter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" + integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== + +micromark-extension-gfm-task-list-item@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" + integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" + integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== + dependencies: + micromark "~2.11.0" + micromark-extension-gfm-autolink-literal "~0.5.0" + micromark-extension-gfm-strikethrough "~0.6.5" + micromark-extension-gfm-table "~0.4.0" + micromark-extension-gfm-tagfilter "~0.3.0" + micromark-extension-gfm-task-list-item "~0.3.0" + +micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +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== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@1.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-fetch@^2.6.0: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-notifier@^8.0.0: + version "8.0.2" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" + integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== + dependencies: + growly "^1.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" + shellwords "^0.1.1" + uuid "^8.3.0" + which "^2.0.2" + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-memoize@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-memoize/-/p-memoize-3.1.0.tgz#ac7587983c9e530139f969ca7b41ef40e93659aa" + integrity sha512-e5tIvrsr7ydUUnxb534iQWtXxWgk/86IsH+H+nV4FHouIggBt4coXboKBt26o4lTu7JbEnGSeXdEsYR8BhAHFA== + dependencies: + mem "^4.3.0" + mimic-fn "^2.1.0" + +p-queue@^6.2.0: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + +p-timeout@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-glob-pattern@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-to-glob-pattern/-/path-to-glob-pattern-1.0.2.tgz#473e6a3a292a9d13fbae3edccee72d3baba8c619" + integrity sha1-Rz5qOikqnRP7rj7czuctO6uoxhk= + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.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= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.4.tgz#07df81e61028e402735cdd49db701e4885b4e6e6" + integrity sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pluralize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-2.0.0.tgz#72b726aa6fac1edeee42256c7d8dc256b335677f" + integrity sha1-crcmqm+sHt7uQiVsfY3CVrM1Z38= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prettier@^2.4.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + +pretty-format@^26.0.0, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + dependencies: + "@jest/types" "^26.6.2" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^17.0.1" + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +rc-config-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/rc-config-loader/-/rc-config-loader-3.0.0.tgz#1484ed55d6fb8b21057699c8426370f7529c52a7" + integrity sha512-bwfUSB37TWkHfP+PPjb/x8BUjChFmmBK44JMfVnU7paisWqZl/o5k7ttCH+EQLnrbn2Aq8Fo1LAsyUiz+WF4CQ== + dependencies: + debug "^4.1.1" + js-yaml "^3.12.0" + json5 "^2.1.1" + require-from-string "^2.0.2" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +remark-footnotes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-3.0.0.tgz#5756b56f8464fa7ed80dbba0c966136305d8cb8d" + integrity sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg== + dependencies: + mdast-util-footnote "^0.1.0" + micromark-extension-footnote "^0.3.0" + +remark-frontmatter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz#ca5d996361765c859bd944505f377d6b186a6ec6" + integrity sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA== + dependencies: + mdast-util-frontmatter "^0.2.0" + micromark-extension-frontmatter "^0.2.0" + +remark-gfm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" + integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== + dependencies: + mdast-util-gfm "^0.1.0" + micromark-extension-gfm "^0.3.0" + +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.0.0, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.18.1: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +select-section@^0.4.0: + version "0.4.6" + resolved "https://registry.yarnpkg.com/select-section/-/select-section-0.4.6.tgz#4e224bd7ee44cb28c55c72edb0009c80a7e7093a" + integrity sha512-0WGMcD/Q6SoD/I3TfZyOstTpXZ0J072Qr+vdH+fCMEc5Z+4u/hFRQzc9prVlUpStHWH7phJ44+9nIVySyEQmTg== + dependencies: + map-like "^1.0.3" + txt-ast-traverse "^1.2.1" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +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== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +stack-utils@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + integrity sha1-3YAkJeD1PcSm56yjdSkBoczaevU= + dependencies: + boundary "^1.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@^6.0.9, table@^6.7.3: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +textlint-rule-helper@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/textlint-rule-helper/-/textlint-rule-helper-2.2.1.tgz#fe223d4a6c492b9aaf6e8a33fca5ad8a02e4e027" + integrity sha512-pdX3uNbFzQTgINamaBpEHRT/MgROHev5wCnQnUTXRLT5DaRjls0Rmpi5d1MPZG6HT5NKVL++Q2J0FUbh5shi3Q== + dependencies: + structured-source "^3.0.2" + unist-util-visit "^2.0.3" + +textlint-rule-no-dead-link@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/textlint-rule-no-dead-link/-/textlint-rule-no-dead-link-4.8.0.tgz#5cda5f57143d99d6ff754c1190c30bb8b346d1fd" + integrity sha512-jB45mvIhKdgLFs4kDzfn8Q3C1WBv+BGI6At07ZJd9YmM/+dm+P8W9urisBSXFeQcYoGcaXqDiKZwK9BpdnpciQ== + dependencies: + fs-extra "^8.1.0" + get-url-origin "^1.0.1" + minimatch "^3.0.4" + node-fetch "^2.6.0" + p-memoize "^3.1.0" + p-queue "^6.2.0" + textlint-rule-helper "^2.1.1" + +textlint-rule-no-empty-section@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/textlint-rule-no-empty-section/-/textlint-rule-no-empty-section-1.1.0.tgz#137ae6b8dfcaab759fd6068bfcc1a6c941bb4607" + integrity sha1-E3rmuN/Kq3Wf1gaL/MGmyUG7Rgc= + dependencies: + select-section "^0.4.0" + +textlint-rule-terminology@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/textlint-rule-terminology/-/textlint-rule-terminology-2.1.5.tgz#21aaed9409e031f71fd450d024b6de9590be2489" + integrity sha512-VW+ea4ByLPddSUqoFkVVJF8zWnO8kqKwvC681wGFAjI4CYz9WhjEQH1ikhoEHXnd5AFXNArcjyoa8hoihrXy0w== + dependencies: + lodash "^4.17.15" + strip-json-comments "^3.0.1" + textlint-rule-helper "^2.1.1" + +textlint@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/textlint/-/textlint-12.1.0.tgz#5f838d3e2fb202ea3add60305fd53c85ca963480" + integrity sha512-VZ0iVepE0jUchMfIW0uKGdEdv3l0ajOFvUBcpB1xGOLAz3gVwpdWvlagVlFXuwjc2N+9mcjTM0PCIXNwIs2vQA== + dependencies: + "@textlint/ast-node-types" "^12.1.0" + "@textlint/ast-traverse" "^12.1.0" + "@textlint/feature-flag" "^12.1.0" + "@textlint/fixer-formatter" "^12.1.0" + "@textlint/kernel" "^12.1.0" + "@textlint/linter-formatter" "^12.1.0" + "@textlint/module-interop" "^12.1.0" + "@textlint/textlint-plugin-markdown" "^12.1.0" + "@textlint/textlint-plugin-text" "^12.1.0" + "@textlint/types" "^12.1.0" + "@textlint/utils" "^12.1.0" + debug "^4.3.3" + deep-equal "^1.1.1" + file-entry-cache "^5.0.1" + get-stdin "^5.0.1" + glob "^7.2.0" + is-file "^1.0.0" + log-symbols "^1.0.2" + md5 "^2.3.0" + mkdirp "^0.5.0" + optionator "^0.9.1" + path-to-glob-pattern "^1.0.2" + rc-config-loader "^3.0.0" + read-pkg "^1.1.0" + read-pkg-up "^3.0.0" + structured-source "^3.0.2" + try-resolve "^1.0.1" + unique-concat "^0.2.2" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +try-resolve@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" + integrity sha1-z95vq9ctY+V5fPqrhzq76OcA6RI= + +ts-jest@^26.4.4: + version "26.5.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" + integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + jest-util "^26.1.0" + json5 "2.x" + lodash "4.x" + make-error "1.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +txt-ast-traverse@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/txt-ast-traverse/-/txt-ast-traverse-1.2.1.tgz#58e3fe43ddb5db5ca8b51142943b0d1b970def41" + integrity sha1-WOP+Q92121yotRFClDsNG5cN70E= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" + integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-concat@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/unique-concat/-/unique-concat-0.2.2.tgz#9210f9bdcaacc5e1e3929490d7c019df96f18712" + integrity sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI= + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^0.1.0, universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +uuid@^8.3.0, uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +v8-to-istanbul@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" + integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vscode-json-languageservice@^4.1.6: + version "4.1.10" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.1.10.tgz#5d5729fc4f3e02f41599e0104523a1877c25f0fb" + integrity sha512-IHliMEEYSY0tJjJt0ECb8ESx/nRXpoy9kN42WVQXgaqGyizFAf3jibSiezDQTrrY7f3kywXggCU+kkJEM+OLZQ== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.2" + +vscode-languageserver-textdocument@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz#879f2649bfa5a6e07bc8b392c23ede2dfbf43eff" + integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A== + +vscode-languageserver-types@^3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-nls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" + integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== + +vscode-uri@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" + integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== + +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^7.4.6: + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + +xml-escape@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xml-escape/-/xml-escape-1.1.0.tgz#3904c143fa8eb3a0030ec646d2902a2f1b706c44" + integrity sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ= + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.x: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 192f741c9961dc7fa0c930820ee77c5fce400493 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 24 Jan 2022 23:12:56 +0530 Subject: [PATCH 156/176] chore: configure package for GitHub NPM registry --- package.json | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8c37b60..5ac8c55 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,21 @@ { - "name": "musicblocks-v4-lib", + "name": "@sugarlabs/musicblocks-v4-lib", "version": "0.1.0", "description": "The core of the new Music Blocks (v4) application", - "private": true, "repository": { "type": "git", - "url": "git+https://github.com/meganindya/musicblocks-v4-lib.git" + "url": "git+https://github.com/sugarlabs/musicblocks-v4-lib.git" + }, + "publishConfig": { + "registry": "https://npm.pkg.github.com" }, "keywords": [ "musicblocks" ], "author": "Anindya Kundu (https://github.com/meganindya/)", "license": "AGPL-3.0", - "main": "dist/index.js", - "types": "dist", + "main": "index.js", + "types": ".", "devDependencies": { "@types/jest": "^26.0.19", "@types/uuid": "^8.3.1", @@ -29,7 +31,9 @@ "textlint-rule-no-empty-section": "^1.1.0", "textlint-rule-terminology": "^2.1.5", "ts-jest": "^26.4.4", - "typescript": "4.1.3", + "typescript": "4.1.3" + }, + "dependencies": { "uuid": "^8.3.2" }, "scripts": { From 34e095fddebfbffd558072f854ce534cd9239245 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 24 Jan 2022 23:16:50 +0530 Subject: [PATCH 157/176] refactor: use relative paths for modules --- jest.config.js | 3 --- src/execution/interpreter.spec.ts | 8 ++++---- src/execution/interpreter.ts | 8 ++++---- src/execution/parser.spec.ts | 10 +++++----- src/execution/parser.ts | 16 ++++++++-------- src/execution/symbolTable.ts | 4 ++-- src/library/elements/elementBox.spec.ts | 2 +- src/library/elements/elementBox.ts | 8 ++++---- .../elements/elementBoxIdentifier.spec.ts | 2 +- src/library/elements/elementBoxIdentifier.ts | 8 ++++---- src/library/elements/elementConditional.ts | 6 +++--- src/library/elements/elementLoop.ts | 6 +++--- src/library/elements/elementOperatorMath.ts | 6 +++--- src/library/elements/elementPrint.ts | 6 +++--- src/library/elements/elementProgram.ts | 4 ++-- src/library/elements/elementValue.ts | 6 +++--- src/library/specification.ts | 2 +- src/syntax/elements/elementArgument.ts | 6 +++--- src/syntax/elements/elementInstruction.ts | 6 +++--- src/syntax/elements/elementSyntax.spec.ts | 4 ++-- src/syntax/elements/elementSyntax.ts | 6 +++--- src/syntax/specification/specification.spec.ts | 6 +++--- src/syntax/specification/specification.ts | 2 +- src/syntax/tree/node.ts | 4 ++-- src/syntax/tree/syntaxTree.spec.ts | 10 +++++----- src/syntax/tree/syntaxTree.ts | 6 +++--- src/syntax/warehouse/warehouse.spec.ts | 6 +++--- src/syntax/warehouse/warehouse.ts | 4 ++-- tsconfig.json | 4 +--- 29 files changed, 82 insertions(+), 87 deletions(-) diff --git a/jest.config.js b/jest.config.js index 53de91f..aad34d3 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,7 +3,4 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', rootDir: 'src', - moduleNameMapper: { - '^@/(.*)$': '/$1', - }, }; diff --git a/src/execution/interpreter.spec.ts b/src/execution/interpreter.spec.ts index 191321e..7538bb1 100644 --- a/src/execution/interpreter.spec.ts +++ b/src/execution/interpreter.spec.ts @@ -1,10 +1,10 @@ import { run } from './interpreter'; -import { generateFromSnapshot, generateSnapshot, getNode } from '@/syntax/tree/syntaxTree'; +import { generateFromSnapshot, generateSnapshot, getNode } from '../syntax/tree/syntaxTree'; -import { registerElementSpecificationEntries } from '@/syntax/specification/specification'; -import elementSpecification from '@/library/specification'; -import { getInstance } from '@/syntax/warehouse/warehouse'; +import { registerElementSpecificationEntries } from '../syntax/specification/specification'; +import elementSpecification from '../library/specification'; +import { getInstance } from '../syntax/warehouse/warehouse'; // ------------------------------------------------------------------------------------------------- diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts index 5392659..84af453 100644 --- a/src/execution/interpreter.ts +++ b/src/execution/interpreter.ts @@ -1,11 +1,11 @@ -import { TData, TDataName } from '@/@types/data'; -import { IVariable, TPCOverride } from '@/@types/execution'; +import { TData, TDataName } from '../@types/data'; +import { IVariable, TPCOverride } from '../@types/execution'; import { addGlobalVariable, getGlobalVariable } from './symbolTable'; import { setPCOverride, clearPCOverride, setExecutionItem, getNextElement } from './parser'; -import { ElementData, ElementExpression } from '@/syntax/elements/elementArgument'; -import { ElementStatement, ElementBlock } from '@/syntax/elements/elementInstruction'; +import { ElementData, ElementExpression } from '../syntax/elements/elementArgument'; +import { ElementStatement, ElementBlock } from '../syntax/elements/elementInstruction'; // -- private functions ---------------------------------------------------------------------------- diff --git a/src/execution/parser.spec.ts b/src/execution/parser.spec.ts index 1d6b86f..93f96d2 100644 --- a/src/execution/parser.spec.ts +++ b/src/execution/parser.spec.ts @@ -9,7 +9,7 @@ import { stackTrace, } from './parser'; -import { IParsedElementArgument, IParsedElementInstruction } from '@/@types/execution'; +import { IParsedElementArgument, IParsedElementInstruction } from '../@types/execution'; import { generateFromSnapshot, @@ -18,11 +18,11 @@ import { getProcessNodes, resetSyntaxTree, getRoutineNodes, -} from '@/syntax/tree/syntaxTree'; -import { TreeNodeStatement } from '@/syntax/tree/node'; +} from '../syntax/tree/syntaxTree'; +import { TreeNodeStatement } from '../syntax/tree/node'; -import { registerElementSpecificationEntries } from '@/syntax/specification/specification'; -import elementSpecificationEntries from '@/library/specification'; +import { registerElementSpecificationEntries } from '../syntax/specification/specification'; +import elementSpecificationEntries from '../library/specification'; // ------------------------------------------------------------------------------------------------- diff --git a/src/execution/parser.ts b/src/execution/parser.ts index 3b885bb..b971958 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -1,4 +1,4 @@ -import { IParsedElement, TPCOverride } from '@/@types/execution'; +import { IParsedElement, TPCOverride } from '../@types/execution'; import { TreeNode, @@ -6,16 +6,16 @@ import { TreeNodeExpression, TreeNodeStatement, TreeNodeBlock, -} from '@/syntax/tree/node'; +} from '../syntax/tree/node'; -import { getProcessNodes, getRoutineNodes, getCrumbs } from '@/syntax/tree/syntaxTree'; +import { getProcessNodes, getRoutineNodes, getCrumbs } from '../syntax/tree/syntaxTree'; -import { getInstance } from '@/syntax/warehouse/warehouse'; +import { getInstance } from '../syntax/warehouse/warehouse'; -import { TData } from '@/@types/data'; -import { ElementData, ElementExpression } from '@/syntax/elements/elementArgument'; -import { ElementBlock, ElementStatement } from '@/syntax/elements/elementInstruction'; -import { TElementName } from '@/@types/specification'; +import { TData } from '../@types/data'; +import { ElementData, ElementExpression } from '../syntax/elements/elementArgument'; +import { ElementBlock, ElementStatement } from '../syntax/elements/elementInstruction'; +import { TElementName } from '../@types/specification'; // -- private variables ---------------------------------------------------------------------------- diff --git a/src/execution/symbolTable.ts b/src/execution/symbolTable.ts index 74ddc3c..af7707d 100644 --- a/src/execution/symbolTable.ts +++ b/src/execution/symbolTable.ts @@ -1,5 +1,5 @@ -import { TData, TDataName } from '@/@types/data'; -import { IVariable } from '@/@types/execution'; +import { TData, TDataName } from '../@types/data'; +import { IVariable } from '../@types/execution'; // -- types ---------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementBox.spec.ts b/src/library/elements/elementBox.spec.ts index 61fd5fe..e55e370 100644 --- a/src/library/elements/elementBox.spec.ts +++ b/src/library/elements/elementBox.spec.ts @@ -4,7 +4,7 @@ import { ElementBoxString, ElementBoxGeneric, } from './elementBox'; -import { getGlobalVariable } from '@/execution/symbolTable'; +import { getGlobalVariable } from '../../execution/symbolTable'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementBox.ts b/src/library/elements/elementBox.ts index 0bfc35e..24276a7 100644 --- a/src/library/elements/elementBox.ts +++ b/src/library/elements/elementBox.ts @@ -1,8 +1,8 @@ -import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; +import { TData, TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; -import { ElementStatement } from '@/syntax/elements/elementInstruction'; -import { declareVariable } from '@/execution/interpreter'; +import { ElementStatement } from '../../syntax/elements/elementInstruction'; +import { declareVariable } from '../../execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementBoxIdentifier.spec.ts b/src/library/elements/elementBoxIdentifier.spec.ts index 027f534..0097ce4 100644 --- a/src/library/elements/elementBoxIdentifier.spec.ts +++ b/src/library/elements/elementBoxIdentifier.spec.ts @@ -4,7 +4,7 @@ import { ElementBoxIdentifierNumber, ElementBoxIdentifierString, } from './elementBoxIdentifier'; -import { addGlobalVariable } from '@/execution/symbolTable'; +import { addGlobalVariable } from '../../execution/symbolTable'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementBoxIdentifier.ts b/src/library/elements/elementBoxIdentifier.ts index 28fa421..afd8f12 100644 --- a/src/library/elements/elementBoxIdentifier.ts +++ b/src/library/elements/elementBoxIdentifier.ts @@ -1,8 +1,8 @@ -import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; +import { TData, TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; -import { ElementData } from '@/syntax/elements/elementArgument'; -import { queryVariable } from '@/execution/interpreter'; +import { ElementData } from '../../syntax/elements/elementArgument'; +import { queryVariable } from '../../execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementConditional.ts b/src/library/elements/elementConditional.ts index aaae1d0..76fac49 100644 --- a/src/library/elements/elementConditional.ts +++ b/src/library/elements/elementConditional.ts @@ -1,7 +1,7 @@ -import { TElementNameBlock } from '@/@types/specification'; -import { ElementBlock } from '@/syntax/elements/elementInstruction'; +import { TElementNameBlock } from '../../@types/specification'; +import { ElementBlock } from '../../syntax/elements/elementInstruction'; -import { overrideProgramCounter } from '@/execution/interpreter'; +import { overrideProgramCounter } from '../../execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementLoop.ts b/src/library/elements/elementLoop.ts index 87b1e85..e88cfa3 100644 --- a/src/library/elements/elementLoop.ts +++ b/src/library/elements/elementLoop.ts @@ -1,7 +1,7 @@ -import { TElementNameBlock } from '@/@types/specification'; -import { ElementBlock } from '@/syntax/elements/elementInstruction'; +import { TElementNameBlock } from '../../@types/specification'; +import { ElementBlock } from '../../syntax/elements/elementInstruction'; -import { overrideProgramCounter } from '@/execution/interpreter'; +import { overrideProgramCounter } from '../../execution/interpreter'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementOperatorMath.ts b/src/library/elements/elementOperatorMath.ts index 0be6012..4981477 100644 --- a/src/library/elements/elementOperatorMath.ts +++ b/src/library/elements/elementOperatorMath.ts @@ -1,6 +1,6 @@ -import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; -import { ElementExpression } from '@/syntax/elements/elementArgument'; +import { TData, TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; +import { ElementExpression } from '../../syntax/elements/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementPrint.ts b/src/library/elements/elementPrint.ts index 94355fe..40bd5f0 100644 --- a/src/library/elements/elementPrint.ts +++ b/src/library/elements/elementPrint.ts @@ -1,6 +1,6 @@ -import { TData } from '@/@types/data'; -import { TElementNameStatement } from '@/@types/specification'; -import { ElementStatement } from '@/syntax/elements/elementInstruction'; +import { TData } from '../../@types/data'; +import { TElementNameStatement } from '../../@types/specification'; +import { ElementStatement } from '../../syntax/elements/elementInstruction'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/elements/elementProgram.ts b/src/library/elements/elementProgram.ts index 9aab522..57d8530 100644 --- a/src/library/elements/elementProgram.ts +++ b/src/library/elements/elementProgram.ts @@ -1,5 +1,5 @@ -import { TElementNameBlock } from '@/@types/specification'; -import { ElementBlock } from '@/syntax/elements/elementInstruction'; +import { TElementNameBlock } from '../../@types/specification'; +import { ElementBlock } from '../../syntax/elements/elementInstruction'; export class ElementProcess extends ElementBlock { constructor(name: TElementNameBlock, label: string) { diff --git a/src/library/elements/elementValue.ts b/src/library/elements/elementValue.ts index 38a1475..7cd1538 100644 --- a/src/library/elements/elementValue.ts +++ b/src/library/elements/elementValue.ts @@ -1,7 +1,7 @@ -import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; +import { TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; -import { ElementData } from '@/syntax/elements/elementArgument'; +import { ElementData } from '../../syntax/elements/elementArgument'; // ------------------------------------------------------------------------------------------------- diff --git a/src/library/specification.ts b/src/library/specification.ts index 07d014f..b50a102 100644 --- a/src/library/specification.ts +++ b/src/library/specification.ts @@ -3,7 +3,7 @@ import { IElementSpecificationEntryExpression, IElementSpecificationEntryStatement, IElementSpecificationEntryBlock, -} from '@/@types/specification'; +} from '../@types/specification'; import { ElementValueBoolean, diff --git a/src/syntax/elements/elementArgument.ts b/src/syntax/elements/elementArgument.ts index a713c4c..6d17eb8 100644 --- a/src/syntax/elements/elementArgument.ts +++ b/src/syntax/elements/elementArgument.ts @@ -1,6 +1,6 @@ -import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; -import { IElementArgument, IElementExpression, IElementData } from '@/@types/elements'; +import { TData, TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; +import { IElementArgument, IElementExpression, IElementData } from '../../@types/elements'; import { ElementSyntax } from './elementSyntax'; diff --git a/src/syntax/elements/elementInstruction.ts b/src/syntax/elements/elementInstruction.ts index d293b03..55a8a3b 100644 --- a/src/syntax/elements/elementInstruction.ts +++ b/src/syntax/elements/elementInstruction.ts @@ -1,6 +1,6 @@ -import { TData, TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; -import { IElementBlock, IElementInstruction, IElementStatement } from '@/@types/elements'; +import { TData, TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; +import { IElementBlock, IElementInstruction, IElementStatement } from '../../@types/elements'; import { ElementSyntax } from './elementSyntax'; diff --git a/src/syntax/elements/elementSyntax.spec.ts b/src/syntax/elements/elementSyntax.spec.ts index 36fde0f..76e4333 100644 --- a/src/syntax/elements/elementSyntax.spec.ts +++ b/src/syntax/elements/elementSyntax.spec.ts @@ -1,5 +1,5 @@ -import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; +import { TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; import { ElementSyntax } from './elementSyntax'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/elements/elementSyntax.ts b/src/syntax/elements/elementSyntax.ts index bf0ca36..69b4798 100644 --- a/src/syntax/elements/elementSyntax.ts +++ b/src/syntax/elements/elementSyntax.ts @@ -1,6 +1,6 @@ -import { TDataName } from '@/@types/data'; -import { TElementName } from '@/@types/specification'; -import { IElementSyntax } from '@/@types/elements'; +import { TDataName } from '../../@types/data'; +import { TElementName } from '../../@types/specification'; +import { IElementSyntax } from '../../@types/elements'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/specification/specification.spec.ts b/src/syntax/specification/specification.spec.ts index b74a451..cda0deb 100644 --- a/src/syntax/specification/specification.spec.ts +++ b/src/syntax/specification/specification.spec.ts @@ -4,7 +4,7 @@ import { TElementNameStatement, TElementNameBlock, TElementName, -} from '@/@types/specification'; +} from '../../@types/specification'; import { registerElementSpecificationEntry, registerElementSpecificationEntries, @@ -14,9 +14,9 @@ import { resetElementSpecificationTable, } from './specification'; -import elementSpecificationEntries from '@/library/specification'; +import elementSpecificationEntries from '../../library/specification'; -import { TData } from '@/@types/data'; +import { TData } from '../../@types/data'; import { ElementData, ElementExpression } from '../elements/elementArgument'; import { ElementStatement, ElementBlock } from '../elements/elementInstruction'; diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts index 3e10fe1..2a48de9 100644 --- a/src/syntax/specification/specification.ts +++ b/src/syntax/specification/specification.ts @@ -5,7 +5,7 @@ import { IElementSpecificationBlock, IElementSpecification, TElementName, -} from '@/@types/specification'; +} from '../../@types/specification'; // -- private variables ---------------------------------------------------------------------------- diff --git a/src/syntax/tree/node.ts b/src/syntax/tree/node.ts index 4c921a6..8da5984 100644 --- a/src/syntax/tree/node.ts +++ b/src/syntax/tree/node.ts @@ -10,14 +10,14 @@ import { ITreeSnapshotData, ITreeSnapshotExpression, ITreeSnapshotStatement, -} from '@/@types/syntaxTree'; +} from '../../@types/syntaxTree'; import { TElementName, TElementNameBlock, TElementNameData, TElementNameExpression, TElementNameStatement, -} from '@/@types/specification'; +} from '../../@types/specification'; import { getInstance } from '../warehouse/warehouse'; diff --git a/src/syntax/tree/syntaxTree.spec.ts b/src/syntax/tree/syntaxTree.spec.ts index 3d7850d..66481bd 100644 --- a/src/syntax/tree/syntaxTree.spec.ts +++ b/src/syntax/tree/syntaxTree.spec.ts @@ -18,15 +18,15 @@ import { import { getInstance } from '../warehouse/warehouse'; import { TreeNodeData, TreeNodeStatement, TreeNodeBlock } from './node'; -import { ITreeSnapshotInput } from '@/@types/syntaxTree'; +import { ITreeSnapshotInput } from '../../@types/syntaxTree'; import { registerElementSpecificationEntries } from '../specification/specification'; import elementSpecificationEntries from '../../library/specification'; -import { ElementProcess, ElementRoutine } from '@/library/elements/elementProgram'; -import { ElementValueBoolean } from '@/library/elements/elementValue'; -import { ElementOperatorMathPlus } from '@/library/elements/elementOperatorMath'; -import { ElementBoxBoolean } from '@/library/elements/elementBox'; +import { ElementProcess, ElementRoutine } from '../../library/elements/elementProgram'; +import { ElementValueBoolean } from '../../library/elements/elementValue'; +import { ElementOperatorMathPlus } from '../../library/elements/elementOperatorMath'; +import { ElementBoxBoolean } from '../../library/elements/elementBox'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts index cd81f26..64a1681 100644 --- a/src/syntax/tree/syntaxTree.ts +++ b/src/syntax/tree/syntaxTree.ts @@ -5,7 +5,7 @@ import { TElementName, TElementNameBlock, TElementNameStatement, -} from '@/@types/specification'; +} from '../../@types/specification'; import { TreeNode, @@ -17,7 +17,7 @@ import { import { addInstance, getInstance, removeInstance } from '../warehouse/warehouse'; import { queryElementSpecification } from '../specification/specification'; -import { TData } from '@/@types/data'; +import { TData } from '../../@types/data'; import { ElementArgument } from '../elements/elementArgument'; import { ITreeSnapshot, @@ -28,7 +28,7 @@ import { ITreeSnapshotStatementInput, ITreeSnapshotBlock, ITreeSnapshotBlockInput, -} from '@/@types/syntaxTree'; +} from '../../@types/syntaxTree'; // -- private variables ---------------------------------------------------------------------------- diff --git a/src/syntax/warehouse/warehouse.spec.ts b/src/syntax/warehouse/warehouse.spec.ts index 18f1701..a2f1e4c 100644 --- a/src/syntax/warehouse/warehouse.spec.ts +++ b/src/syntax/warehouse/warehouse.spec.ts @@ -18,9 +18,9 @@ import { ElementBlock } from '../elements/elementInstruction'; import { registerElementSpecificationEntries } from '../specification/specification'; import elementSpecificationEntries from '../../library/specification'; -import { ElementBoxBoolean } from '@/library/elements/elementBox'; -import { ElementOperatorMathPlus } from '@/library/elements/elementOperatorMath'; -import { ElementValueBoolean } from '@/library/elements/elementValue'; +import { ElementBoxBoolean } from '../../library/elements/elementBox'; +import { ElementOperatorMathPlus } from '../../library/elements/elementOperatorMath'; +import { ElementValueBoolean } from '../../library/elements/elementValue'; // ------------------------------------------------------------------------------------------------- diff --git a/src/syntax/warehouse/warehouse.ts b/src/syntax/warehouse/warehouse.ts index fff6499..152084c 100644 --- a/src/syntax/warehouse/warehouse.ts +++ b/src/syntax/warehouse/warehouse.ts @@ -8,14 +8,14 @@ import { TElementNameExpression, TElementNameStatement, TElementNameBlock, -} from '@/@types/specification'; +} from '../../@types/specification'; import { getElementNames, getElementCategories, queryElementSpecification, } from '../specification/specification'; -import { TData } from '@/@types/data'; +import { TData } from '../../@types/data'; import { ElementSyntax } from '../elements/elementSyntax'; import { ElementData, ElementExpression } from '../elements/elementArgument'; import { ElementStatement, ElementBlock } from '../elements/elementInstruction'; diff --git a/tsconfig.json b/tsconfig.json index b89edbe..43c6e04 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,9 +46,7 @@ /* Module Resolution Options */ "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ - "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - "@/*": ["./*"], - }, + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ From a7afbf9cd07509ce5e464627192e9772b12fe3a5 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 24 Jan 2022 23:17:42 +0530 Subject: [PATCH 158/176] chore: remove archived source code --- src/archive/broker/@types/broker.d.ts | 10 - src/archive/broker/@types/syntaxHandler.d.ts | 48 -- src/archive/broker/broker.ts | 28 - src/archive/broker/syntaxHandler.test.ts | 220 -------- src/archive/broker/syntaxHandler.ts | 207 ------- src/archive/syntax-core/@types/AST.d.ts | 16 - src/archive/syntax-core/@types/context.d.ts | 2 - .../syntax-core/@types/primitiveElements.d.ts | 8 - .../syntax-core/@types/primitiveTypes.d.ts | 17 - .../syntax-core/@types/structureElements.d.ts | 96 ---- .../syntax-core/@types/symbolTable.d.ts | 8 - src/archive/syntax-core/AST.ts | 66 --- src/archive/syntax-core/context.ts | 5 - .../syntax-core/primitiveElements.test.ts | 514 ------------------ src/archive/syntax-core/primitiveElements.ts | 432 --------------- .../conditionalElements.test.ts | 98 ---- .../program-elements/conditionalElements.ts | 24 - .../program-elements/dataElements.test.ts | 269 --------- .../program-elements/dataElements.ts | 199 ------- .../program-elements/loopElements.test.ts | 39 -- .../program-elements/loopElements.ts | 39 -- .../program-elements/miscellaneousElements.ts | 17 - .../operationElements.test.ts | 171 ------ .../program-elements/operationElements.ts | 248 --------- .../program-elements/valueElements.test.ts | 55 -- .../program-elements/valueElements.ts | 135 ----- src/archive/syntax-core/sample.ts | 248 --------- .../syntax-core/structureElements.test.ts | 142 ----- src/archive/syntax-core/structureElements.ts | 262 --------- src/archive/syntax-core/symbolTable.ts | 38 -- .../syntax-core/syntaxElementFactory.test.ts | 31 -- .../syntax-core/syntaxElementFactory.ts | 107 ---- tsconfig.json | 2 +- 33 files changed, 1 insertion(+), 3800 deletions(-) delete mode 100644 src/archive/broker/@types/broker.d.ts delete mode 100644 src/archive/broker/@types/syntaxHandler.d.ts delete mode 100644 src/archive/broker/broker.ts delete mode 100644 src/archive/broker/syntaxHandler.test.ts delete mode 100644 src/archive/broker/syntaxHandler.ts delete mode 100644 src/archive/syntax-core/@types/AST.d.ts delete mode 100644 src/archive/syntax-core/@types/context.d.ts delete mode 100644 src/archive/syntax-core/@types/primitiveElements.d.ts delete mode 100644 src/archive/syntax-core/@types/primitiveTypes.d.ts delete mode 100644 src/archive/syntax-core/@types/structureElements.d.ts delete mode 100644 src/archive/syntax-core/@types/symbolTable.d.ts delete mode 100644 src/archive/syntax-core/AST.ts delete mode 100644 src/archive/syntax-core/context.ts delete mode 100644 src/archive/syntax-core/primitiveElements.test.ts delete mode 100644 src/archive/syntax-core/primitiveElements.ts delete mode 100644 src/archive/syntax-core/program-elements/conditionalElements.test.ts delete mode 100644 src/archive/syntax-core/program-elements/conditionalElements.ts delete mode 100644 src/archive/syntax-core/program-elements/dataElements.test.ts delete mode 100644 src/archive/syntax-core/program-elements/dataElements.ts delete mode 100644 src/archive/syntax-core/program-elements/loopElements.test.ts delete mode 100644 src/archive/syntax-core/program-elements/loopElements.ts delete mode 100644 src/archive/syntax-core/program-elements/miscellaneousElements.ts delete mode 100644 src/archive/syntax-core/program-elements/operationElements.test.ts delete mode 100644 src/archive/syntax-core/program-elements/operationElements.ts delete mode 100644 src/archive/syntax-core/program-elements/valueElements.test.ts delete mode 100644 src/archive/syntax-core/program-elements/valueElements.ts delete mode 100644 src/archive/syntax-core/sample.ts delete mode 100644 src/archive/syntax-core/structureElements.test.ts delete mode 100644 src/archive/syntax-core/structureElements.ts delete mode 100644 src/archive/syntax-core/symbolTable.ts delete mode 100644 src/archive/syntax-core/syntaxElementFactory.test.ts delete mode 100644 src/archive/syntax-core/syntaxElementFactory.ts diff --git a/src/archive/broker/@types/broker.d.ts b/src/archive/broker/@types/broker.d.ts deleted file mode 100644 index 1503b3c..0000000 --- a/src/archive/broker/@types/broker.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { TQuery as TSyntaxQuery } from './syntaxHandler'; - -export type TMessage = { - target: 'syntax'; - query: TSyntaxQuery; -}; - -export interface IBroker { - processMessage(message: TMessage): Promise; -} diff --git a/src/archive/broker/@types/syntaxHandler.d.ts b/src/archive/broker/@types/syntaxHandler.d.ts deleted file mode 100644 index 198c84b..0000000 --- a/src/archive/broker/@types/syntaxHandler.d.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { IAST } from '../../syntax-core/@types/AST'; -import { ISyntaxElement } from '../../syntax-core/@types/structureElements'; -import { TSyntaxElementName } from '../../syntax-core/syntaxElementFactory'; - -type TQuery = - | { - action: 'create'; - props: { - elementName: TSyntaxElementName; - arg?: number | string; - }; - } - | { - action: 'remove'; - props: { - elementID: string; - }; - } - | { - action: 'attach-ins'; - props: { - elementID_1: string; - elementID_2: string; - }; - } - | { - action: 'attach-arg'; - props: { - elementID_1: string; - elementID_2: string; - argLabel: string; - }; - }; - -export interface ISyntaxHandler { - /** Processes all messages related to syntax and returns acknowledgement or throws error. */ - processQuery: (query: TQuery) => string; - /** Returns the corresponding syntax element for an elementID. */ - getElement: ( - elementID: string - ) => { - elementName: string; - element: ISyntaxElement; - type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; - }; - /** Returns the AST object. */ - AST: IAST; -} diff --git a/src/archive/broker/broker.ts b/src/archive/broker/broker.ts deleted file mode 100644 index 55307db..0000000 --- a/src/archive/broker/broker.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IBroker, TMessage } from './@types/broker'; -import SyntaxHandler from './syntaxHandler'; - -export class Broker implements IBroker { - private _syntaxHandler: SyntaxHandler; - - constructor() { - this._syntaxHandler = new SyntaxHandler(); - } - - processMessage(message: TMessage): Promise { - return new Promise((resolve, reject) => { - try { - let acknowledgement: string = ''; - switch (message.target) { - case 'syntax': - acknowledgement = this._syntaxHandler.processQuery(message.query); - break; - default: - throw Error('Should not be reached.'); - } - setTimeout(() => resolve(acknowledgement)); - } catch (e) { - reject(e); - } - }); - } -} diff --git a/src/archive/broker/syntaxHandler.test.ts b/src/archive/broker/syntaxHandler.test.ts deleted file mode 100644 index f50caec..0000000 --- a/src/archive/broker/syntaxHandler.test.ts +++ /dev/null @@ -1,220 +0,0 @@ -import SyntaxHandler from './syntaxHandler'; -import { - ArgumentDataElement, - ArgumentElement, - ArgumentExpressionElement, - BlockElement, - InstructionElement, - StatementElement -} from '../syntax-core/structureElements'; -import { ValueElement } from '../syntax-core/program-elements/valueElements'; -import { DataElement } from '../syntax-core/program-elements/dataElements'; -import { StartBlock } from '../syntax-core/AST'; - -describe("related to SyntaxElement objects' organization", () => { - const synHandler = new SyntaxHandler(); - - type TElemProps = { - elementName: string; - element: BlockElement | StatementElement | ArgumentDataElement | ArgumentExpressionElement; - type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; - }; - - let repeatElemID: string; - let repeatElemProps: TElemProps; - let printElemID: string; - let printElemProps: TElemProps; - let addElemID: string; - let addElemProps: TElemProps; - let intElemID: string; - let intElemProps: TElemProps; - let floatElemID: string; - let floatElemProps: TElemProps; - let intDataElemID: string; - let intDataElemProps: TElemProps; - let startElemID: string; - let startElemProps: TElemProps; - - describe('element creation', () => { - test('create a (non-start) block element and verify props', () => { - repeatElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'repeat' - } - }); - repeatElemProps = synHandler.getElement(repeatElemID); - expect(repeatElemProps.elementName).toBe('repeat'); - expect(repeatElemProps.type).toBe('block'); - expect(repeatElemProps.element.elementName).toBe('repeat'); - }); - - test('create a statement element and verify props', () => { - printElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'print' - } - }); - printElemProps = synHandler.getElement(printElemID); - expect(printElemProps.elementName).toBe('print'); - expect(printElemProps.type).toBe('statement'); - expect(printElemProps.element.elementName).toBe('print'); - }); - - test('create an argument expression element and verify props', () => { - addElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'add' - } - }); - addElemProps = synHandler.getElement(addElemID); - expect(addElemProps.elementName).toBe('add'); - expect(addElemProps.type).toBe('arg-exp'); - expect(addElemProps.element.elementName).toBe('add'); - }); - - test('create an argument data element and verify props', () => { - intElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'int', - arg: 5 - } - }); - intElemProps = synHandler.getElement(intElemID); - expect(intElemProps.elementName).toBe('int'); - expect(intElemProps.type).toBe('arg-data'); - expect(intElemProps.element.elementName).toBe('int'); - expect((intElemProps.element as ArgumentElement).getData({}).value).toBe(5); - }); - - test('create a start element and verify', () => { - startElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'start' - } - }); - startElemProps = synHandler.getElement(startElemID); - expect(startElemProps.elementName).toBe('start'); - expect(startElemProps.type).toBe('block'); - expect(startElemProps.element.elementName).toBe('start'); - expect(startElemProps.element instanceof StartBlock).toBe(true); - expect( - synHandler.AST.startBlocks.indexOf(startElemProps.element as StartBlock) - ).not.toBe(-1); - }); - }); - - describe('element attachment', () => { - floatElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'float', - arg: 3 - } - }); - floatElemProps = synHandler.getElement(floatElemID); - - intDataElemID = synHandler.processQuery({ - action: 'create', - props: { - elementName: 'data-int' - } - }); - intDataElemProps = synHandler.getElement(intDataElemID); - - test('attach an InstructionElement after an InstructionElement and verify', () => { - (printElemProps.element as InstructionElement).next = intDataElemProps.element as InstructionElement; - const elem = (printElemProps.element as InstructionElement).next; - expect(elem).not.toBe(null); - if (elem !== null) { - expect(elem.elementName).toBe('data-int'); - expect(elem instanceof DataElement.IntDataElement); - } else { - throw Error('Object cannot be null.'); - } - }); - - test('detach InstructionElement attached to another InstructionElement and verify', () => { - (printElemProps.element as InstructionElement).next = null; - expect((printElemProps.element as InstructionElement).next).toBe(null); - }); - - test('attach a valid ArgumentElement to an InstructionElement and verify', () => { - (printElemProps.element as InstructionElement).args.setArg( - 'message', - intElemProps.element as ArgumentElement - ); - const element = (printElemProps.element as InstructionElement).args.getArg('message'); - expect(element).not.toBe(null); - if (element !== null) { - expect(element.type).toBe('TInt'); - expect(element.elementName).toBe('int'); - expect(element.getData({}).value).toBe(5); - } else { - throw Error('Object cannot not be null.'); - } - }); - - test('attach a valid ArgumentElement to an ArgumentExpressionElement and verify', () => { - (addElemProps.element as ArgumentExpressionElement).args.setArg( - 'operand_1', - floatElemProps.element as ArgumentElement - ); - const element = (addElemProps.element as ArgumentExpressionElement).args.getArg( - 'operand_1' - ); - expect(element).not.toBe(null); - if (element !== null) { - expect(element.type).toBe('TFloat'); - expect(element.elementName).toBe('float'); - expect(element.getData({}).value).toBe(3); - } else { - throw Error('Object cannot not be null.'); - } - }); - }); - - describe('element removal', () => { - test('remove a previously created element and expect element properties fetch to throw error', () => { - synHandler.processQuery({ - action: 'remove', - props: { - elementID: repeatElemID - } - }); - expect(() => synHandler.getElement(repeatElemID)).toThrowError( - `Invalid argument: element with ID ${repeatElemID} does not exist.` - ); - }); - - test("remove a previously created 'start' element and expect element properties fetch to throw error", () => { - const startElem = synHandler.getElement(startElemID).element; - expect(startElem instanceof StartBlock).toBe(true); - synHandler.processQuery({ - action: 'remove', - props: { - elementID: startElemID - } - }); - expect(() => synHandler.getElement(startElemID)).toThrowError( - `Invalid argument: element with ID ${startElemID} does not exist.` - ); - expect(synHandler.AST.startBlocks.indexOf(startElem as StartBlock)).toBe(-1); - }); - - test('attempt to remove an element with an invalid ID and expect error', () => { - expect(() => { - synHandler.processQuery({ - action: 'remove', - props: { - elementID: 'abcdef' - } - }); - }).toThrowError('Invalid argument: element with ID "abcdef" does not exist.'); - }); - }); -}); diff --git a/src/archive/broker/syntaxHandler.ts b/src/archive/broker/syntaxHandler.ts deleted file mode 100644 index e9886fa..0000000 --- a/src/archive/broker/syntaxHandler.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { ISyntaxHandler, TQuery } from './@types/syntaxHandler'; -import { - ArgumentDataElement, - ArgumentElement, - ArgumentExpressionElement, - BlockElement, - InstructionElement, - StatementElement, - SyntaxElement -} from '../syntax-core/structureElements'; -import * as Factory from '../syntax-core/syntaxElementFactory'; -import { AST, StartBlock } from '../syntax-core/AST'; -import { SymbolTable } from '../syntax-core/symbolTable'; - -export default class SyntaxHandler implements ISyntaxHandler { - private _elementMap: { - [key: string]: { - elementName: string; - element: SyntaxElement; - type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; - }; - } = {}; - private _AST: AST; - private _symbolTable: SymbolTable; - - constructor() { - this._AST = new AST(); - this._symbolTable = new SymbolTable(); - } - - // -- Utilities ------------------------------------------------------------ - - /** Returns an unique ID for syntax elements. */ - private get _newID(): string { - let id: string; - // Failsafe. Impossible to get a duplicate under normal circumstances. - do { - id = 'E' + Date.now(); - } while (id in this._elementMap); - return id; - } - - /** Handles creation of syntax elements. */ - private _handleCreate(elementName: Factory.TSyntaxElementName, arg?: number | string): string { - const id = this._newID; - switch (elementName) { - case 'start': - const startElement = this._AST.addStart(); - this._elementMap[id] = { - elementName: 'start', - element: startElement, - type: 'block' - }; - break; - default: - const element = Factory.createSyntaxElement(elementName, arg); - this._elementMap[id] = { elementName, ...element }; - } - return id; - } - - /** Handles removal of syntax elements. */ - private _handleRemove(elementID: string): void { - if (elementID in this._elementMap) { - const element = this._elementMap[elementID].element; - if (element.elementName === 'start') { - this._AST.removeStart(element as StartBlock); - } - delete this._elementMap[elementID]; - } else { - throw Error(`Invalid argument: element with ID "${elementID}" does not exist.`); - } - } - - /** Generic method to handle attachment. */ - private _handleAttachment( - type: 'instruction' | 'argument', - elementID_1: string, - elementID_2: string | null, - argLabel?: string - ) { - let element_1: SyntaxElement; - let element_2: SyntaxElement | null; - if (elementID_1 in this._elementMap) { - element_1 = this._elementMap[elementID_1].element; - } else { - throw Error(`Invalid ID: element with ID "${elementID_1}" does not exist.`); - } - - if (elementID_2 === null) { - element_2 = null; - } else if (elementID_2 in this._elementMap) { - element_2 = this._elementMap[elementID_2].element; - } else { - throw Error(`Invalid ID: element with ID "${elementID_2}" does not exist.`); - } - - if (type === 'instruction') { - if (!(element_1 instanceof InstructionElement)) { - throw Error( - `Invalid argument: element with ID "${elementID_1}" must be an instruction.` - ); - } else { - if (element_2 !== null && !(element_2 instanceof InstructionElement)) { - throw Error( - `Invalid argument: element with ID "${elementID_2}" must be an instruction.` - ); - } else { - (element_1 as InstructionElement).next = element_2 as InstructionElement | null; - } - } - } else { - if ( - !(element_1 instanceof InstructionElement) && - !(element_1 instanceof ArgumentExpressionElement) - ) { - throw Error( - `Invalid argument: element with ID "${elementID_1}" must be an instruction or an expression.` - ); - } else { - if (element_2 !== null && !(element_2 instanceof ArgumentElement)) { - throw Error( - `Invalid argument: element with ID "${elementID_2}" must be an argument.` - ); - } else { - (element_1 as InstructionElement | ArgumentExpressionElement).args.setArg( - argLabel as string, - element_2 as ArgumentElement | null - ); - } - } - } - } - - /** Handles attachment/detachment of instructions. */ - private _handleInstructionAttachment(elementID_1: string, elementID_2: string | null) { - this._handleAttachment('instruction', elementID_1, elementID_2); - } - - /** Handles attachment/detachment of arguments to instructions/expressions. */ - private _handleArgumentAttachment( - elementID_1: string, - elementID_2: string | null, - argLabel: string - ) { - this._handleAttachment('argument', elementID_1, elementID_2, argLabel); - } - - // -- Actions -------------------------------------------------------------- - - processQuery(query: TQuery): string { - switch (query.action) { - case 'create': - return this._handleCreate(query.props.elementName, query.props.arg); - case 'remove': - this._handleRemove(query.props.elementID); - break; - case 'attach-ins': - this._handleInstructionAttachment(query.props.elementID_1, query.props.elementID_2); - break; - case 'attach-arg': - this._handleArgumentAttachment( - query.props.elementID_1, - query.props.elementID_2, - query.props.argLabel - ); - break; - default: - throw Error('Should not be reached.'); - } - return 'successful'; // dummy - } - - getElement( - elementID: string - ): { - elementName: string; - element: StatementElement | BlockElement | ArgumentDataElement | ArgumentExpressionElement; - type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; - } { - if (!(elementID in this._elementMap)) { - throw Error(`Invalid argument: element with ID ${elementID} does not exist.`); - } - const elementProps = this._elementMap[elementID]; - let element = elementProps.element; - switch (elementProps.type) { - case 'statement': - return { ...elementProps, element: element as StatementElement }; - case 'block': - return { ...elementProps, element: element as BlockElement }; - case 'arg-data': - return { ...elementProps, element: element as ArgumentDataElement }; - case 'arg-exp': - return { ...elementProps, element: element as ArgumentExpressionElement }; - default: - throw Error('Should not be reached.'); - } - } - - get AST(): AST { - return this._AST; - } - - get symbolTable(): SymbolTable { - return this._symbolTable; - } -} diff --git a/src/archive/syntax-core/@types/AST.d.ts b/src/archive/syntax-core/@types/AST.d.ts deleted file mode 100644 index f8ccdab..0000000 --- a/src/archive/syntax-core/@types/AST.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IBlockElement } from './structureElements'; - -export interface IStartBlock extends IBlockElement {} - -export interface IActionBlock extends IBlockElement {} - -export interface IAST { - /** Returns list of 'start' elements. */ - startBlocks: IStartBlock[]; - /** Returns list of 'action' elements. */ - actionBlocks: IActionBlock[]; - /** Creates a new 'start' element and add it to 'start' blocks list. */ - addStart: Function; - /** Removes a 'start' element from 'start' blocks list. */ - removeStart: Function; -} diff --git a/src/archive/syntax-core/@types/context.d.ts b/src/archive/syntax-core/@types/context.d.ts deleted file mode 100644 index cb9d7a7..0000000 --- a/src/archive/syntax-core/@types/context.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/** Stores the instrinsic music and art properties associated with the current context. */ -export interface IContext {} diff --git a/src/archive/syntax-core/@types/primitiveElements.d.ts b/src/archive/syntax-core/@types/primitiveElements.d.ts deleted file mode 100644 index cde1c17..0000000 --- a/src/archive/syntax-core/@types/primitiveElements.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TPrimitiveName } from './primitiveTypes'; - -export interface IPrimitiveElement { - /** Primitive type string ('TInt', 'TFloat', 'TChar', 'TString', 'TBoolean') of the element. */ - type: TPrimitiveName; - /** Wrapped value. */ - value: T; -} diff --git a/src/archive/syntax-core/@types/primitiveTypes.d.ts b/src/archive/syntax-core/@types/primitiveTypes.d.ts deleted file mode 100644 index 3ae1e6b..0000000 --- a/src/archive/syntax-core/@types/primitiveTypes.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -type TNInt = 'TInt'; -type TNFloat = 'TFloat'; -type TNChar = 'TChar'; -type TNString = 'TString'; -type TNBoolean = 'TBoolean'; -export type TPrimitiveName = TNInt | TNFloat | TNChar | TNString | TNBoolean; - -/* - * There is a circular dependency on files between this file and ../primitiveElements.ts. - * The ones above this comment are dependencies of ../primitiveElements.ts. - * The ones below this comment are dependent on ../primitiveElements.ts. - * This is not a bug, however, it is not a good convention. - * This particular case may be carefully exempted only for clarity. - */ - -import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; -export type TPrimitive = TInt | TFloat | TChar | TString | TBoolean; diff --git a/src/archive/syntax-core/@types/structureElements.d.ts b/src/archive/syntax-core/@types/structureElements.d.ts deleted file mode 100644 index 687ffa6..0000000 --- a/src/archive/syntax-core/@types/structureElements.d.ts +++ /dev/null @@ -1,96 +0,0 @@ -import { TPrimitive, TPrimitiveName } from './primitiveTypes'; -import { IContext } from './context'; -import { ISymbolTable } from './symbolTable'; - -/** - * There are two categories of syntax elements: Arguments and Instructions. - * - * Arguments are of two kinds: Data (simply store a value), and Expressions (take other values as - * arguments and operate on them to return another value). - * - * Instructions are of two kinds: Statements (a single linear instruction), and Blocks (wrap around - * other instructions while performing some actions before and after executing them). - */ - -/** Objects whose classes implement this will be tied to the corresponding UI element. */ -export interface ISyntaxElement { - /** Name of the supported syntax element. Different from identifiers. */ - elementName: string; -} - -export interface IDataElement {} - -export interface IExpressionElement {} - -/** - * To be implemented by the class that handles the argument interface for classes that implement - * IArgumentExpressionElement or IInstructionElement. - */ -export interface IArgumentMap { - /** Returns the list of argument labels. */ - argLabels: string[]; - /** Assigns an ArgumentElement | null corresponding to an argument label. */ - setArg: Function; - /** Returns the ArgumentElement | null corresponding to an argument label. */ - getArg: Function; -} - -// ---- Argument elements -------------------------------------------------------------------------- - -/** To be implemented by the super-class of all argument elements. */ -export interface IArgumentElement extends ISyntaxElement { - /** Whether data argument element or expression argument element. */ - argType: 'data' | 'expression'; - /** Return type of the argument element. */ - type: TPrimitiveName; - /** Returns the primitive element that the argument element returns. */ - getData: Function; -} - -/** - * To be implemented by sub-classes of class that implement IArgumentElement and represent data - * arguments. - */ -export interface IArgumentDataElement extends IArgumentElement, IDataElement {} - -/** - * To be implemented by sub-classes of class that implement IArgumentElement and represent - * expression arguments. - */ -export interface IArgumentExpressionElement extends IArgumentElement, IExpressionElement { - /** Stores an object of the class that implements IArgumentMap. */ - args: IArgumentMap; -} - -// ---- Instruction elements ----------------------------------------------------------------------- - -/** To be implemented by the super-class of all instruction elements. */ -interface IInstructionElement extends ISyntaxElement { - /** Stores an object of the class that implements IArgumentMap. */ - args: IArgumentMap; - /** Stores the reference to the next instruction in stack. */ - next: IInstructionElement | null; - /** Triggered before instruction is executed. */ - onVisit: Function; -} - -/** - * To be implemented by sub-classes of class that implement IInstructionElement and represent - * non-clamp instructions. - */ -export interface IStatementElement extends IInstructionElement {} - -/** - * To be implemented by sub-classes of class that implement IInstructionElement and represent clamp - * instructions. - */ -export interface IBlockElement extends IInstructionElement { - /** Sets the reference to the ith head instruction inside the logical code block/s. */ - setChildHead: Function; - /** Returns the reference to the ith head instruction inside the logical code block/s. */ - getChildHead: (index: number) => IInstructionElement | null; - /** Initial head instruction. */ - childHead: IInstructionElement | null; - /** Triggered after block instruction is executed. */ - onExit: Function; -} diff --git a/src/archive/syntax-core/@types/symbolTable.d.ts b/src/archive/syntax-core/@types/symbolTable.d.ts deleted file mode 100644 index f487897..0000000 --- a/src/archive/syntax-core/@types/symbolTable.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TBoolean, TString } from '../primitiveElements'; -import { TPrimitive, TPrimitiveName } from './primitiveTypes'; - -export interface ISymbolTable { - symbolExists: (symbol: TString) => TBoolean; - addSymbol: (symbol: TString, data: TPrimitive) => void; - getSymbolData: (symbol: TString) => TPrimitive; -} diff --git a/src/archive/syntax-core/AST.ts b/src/archive/syntax-core/AST.ts deleted file mode 100644 index f0f7acb..0000000 --- a/src/archive/syntax-core/AST.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IStartBlock, IActionBlock, IAST } from './@types/AST'; -import { BlockElement } from './structureElements'; -import { Context } from './context'; - -// ---- Top Level Blocks (Start and Action) -------------------------------------------------------- - -export class StartBlock extends BlockElement implements IStartBlock { - private _context: Context; - - constructor() { - super('start', 1); - this._context = new Context(); - } - - get context() { - return this._context; - } - - onVisit() {} - - onExit() {} -} - -export class ActionBlock extends BlockElement implements IActionBlock { - constructor() { - super('action', 1, { - name: ['TString'] - }); - } - - onVisit() {} - - onExit() {} -} - -// ---- Abstract Syntax Tree (AST) ----------------------------------------------------------------- - -export class AST implements IAST { - private _startBlocks: StartBlock[] = []; - private _actionBlocks: ActionBlock[] = []; - - constructor() {} - - get startBlocks() { - return this._startBlocks; - } - - get actionBlocks() { - return this._actionBlocks; - } - - addStart(): StartBlock { - const startElement = new StartBlock(); - this._startBlocks.push(startElement); - return startElement; - } - - removeStart(startElement: StartBlock) { - const index = this._startBlocks.indexOf(startElement); - if (index !== -1) { - this._startBlocks.splice(index, 1); - } else { - throw Error(`Start block does not exist in AST.`); - } - } -} diff --git a/src/archive/syntax-core/context.ts b/src/archive/syntax-core/context.ts deleted file mode 100644 index 958873e..0000000 --- a/src/archive/syntax-core/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { IContext } from './@types/context'; - -export class Context implements IContext { - constructor() {} -} diff --git a/src/archive/syntax-core/primitiveElements.test.ts b/src/archive/syntax-core/primitiveElements.test.ts deleted file mode 100644 index 620cf6b..0000000 --- a/src/archive/syntax-core/primitiveElements.test.ts +++ /dev/null @@ -1,514 +0,0 @@ -import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; - -describe('initialization and value verification', () => { - test('assign 5 to TInt to equal 5', () => { - const typeObj = new TInt(5); - expect(typeObj.value).toBe(5); - }); - - test('assign Math.PI (3.1415..) to TInt to equal 3', () => { - const typeObj = new TInt(Math.PI); - expect(typeObj.value).toBe(3); - }); - - test('assign Math.E (2.7182..) to TFloat to equal Math.E', () => { - const typeObj = new TFloat(Math.E); - expect(typeObj.value).toBe(Math.E); - }); - - test('assign "mystring" to TChar to equal "m"', () => { - const typeObj = new TChar('mystring'); - expect(typeObj.value).toBe('m'); - }); - - test('assign "" to TChar to equal ASCII 0 character', () => { - const typeObj = new TChar(''); - expect(typeObj.value).toBe(String.fromCharCode(0)); - }); - - test('assign 65 to TChar to equal "A"', () => { - const typeObj = new TChar(65); - expect(typeObj.value).toBe('A'); - }); - - test('assign 500 to TChar to equal ASCII 255 character', () => { - const typeObj = new TChar(500); - expect(typeObj.value).toBe(String.fromCharCode(255)); - }); - - test('assign "mystring" to TString to equal "mystring"', () => { - const typeObj = new TString('mystring'); - expect(typeObj.value).toBe('mystring'); - }); - - test('assign true to TBoolean to equal true', () => { - const typeObj = new TBoolean(true); - expect(typeObj.value).toBe(true); - }); - - test('assign false to TBoolean to equal false', () => { - const typeObj = new TBoolean(false); - expect(typeObj.value).toBe(false); - }); -}); - -describe('type conversions', () => { - const intType = new TInt(65); - const floatType = new TFloat(3.1415); - const charType = new TChar(97); - const stringType = new TString('2.71828'); - - describe('conversion to TInt', () => { - test('convert TInt type to TInt and verify', () => { - const newType = TInt.TInt(intType); - expect(newType instanceof TInt).toBe(true); - expect(newType.type).toBe('TInt'); - expect(newType.value).toBe(65); - }); - - test('convert TFloat type to TInt and verify', () => { - const newType = TInt.TInt(floatType); - expect(newType instanceof TInt).toBe(true); - expect(newType.type).toBe('TInt'); - expect(newType.value).toBe(3); - }); - - test('convert TChar type to TInt and verify', () => { - const newType = TInt.TInt(charType); - expect(newType instanceof TInt).toBe(true); - expect(newType.type).toBe('TInt'); - expect(newType.value).toBe(97); - }); - - test('convert number-convertible TString type to TInt and verify', () => { - const newType = TInt.TInt(stringType); - expect(newType instanceof TInt).toBe(true); - expect(newType.type).toBe('TInt'); - expect(newType.value).toBe(2); - }); - - test('convert number-inconvertible TString type to TInt and expect error', () => { - expect(() => TInt.TInt(new TString('string'))).toThrowError( - 'Invalid format: TString object does not represent a number' - ); - }); - }); - - describe('conversion to TFloat', () => { - test('convert TFloat type to TFloat and verify', () => { - const newType = TFloat.TFloat(floatType); - expect(newType instanceof TFloat).toBe(true); - expect(newType.type).toBe('TFloat'); - expect(newType.value).toBe(3.1415); - }); - - test('convert TInt type to TFloat and verify', () => { - const newType = TFloat.TFloat(intType); - expect(newType instanceof TFloat).toBe(true); - expect(newType.type).toBe('TFloat'); - expect(newType.value).toBe(65); - }); - - test('convert number-convertible TString type to TFloat and verify', () => { - const newType = TFloat.TFloat(stringType); - expect(newType instanceof TFloat).toBe(true); - expect(newType.type).toBe('TFloat'); - expect(newType.value).toBe(2.71828); - }); - - test('convert number-inconvertible TString type to TFloat and expect error', () => { - expect(() => TFloat.TFloat(new TString('string'))).toThrowError( - 'Invalid format: TString object does not represent a number' - ); - }); - }); - - describe('conversion to TChar', () => { - test('convert TChar type to TChar and verify', () => { - const newType = TChar.TChar(charType); - expect(newType instanceof TChar).toBe(true); - expect(newType.type).toBe('TChar'); - expect(newType.value).toBe('a'); - }); - - test('convert TInt type to TChar and verify', () => { - const newType = TChar.TChar(intType); - expect(newType instanceof TChar).toBe(true); - expect(newType.type).toBe('TChar'); - expect(newType.value).toBe('A'); - }); - }); - - describe('conversion to TString', () => { - test('convert TString type to TString and verify', () => { - const newType = TString.TString(stringType); - expect(newType instanceof TString).toBe(true); - expect(newType.type).toBe('TString'); - expect(newType.value).toBe('2.71828'); - }); - - test('convert TInt type to TString and verify', () => { - const newType = TString.TString(intType); - expect(newType instanceof TString).toBe(true); - expect(newType.type).toBe('TString'); - expect(newType.value).toBe('65'); - }); - - test('convert TFloat type to TString and verify', () => { - const newType = TString.TString(floatType); - expect(newType instanceof TString).toBe(true); - expect(newType.type).toBe('TString'); - expect(newType.value).toBe('3.1415'); - }); - - test('convert TChar type to TString and verify', () => { - const newType = TString.TString(charType); - expect(newType instanceof TString).toBe(true); - expect(newType.type).toBe('TString'); - expect(newType.value).toBe('a'); - }); - }); -}); - -describe('operations on type elements', () => { - - describe('class TInt', () => { - test('add TInt(15) and TInt(4) and expect new element value to be 19', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - operand_1.add(operand_2); - expect(operand_1.value).toBe(19); - }); - - test('add TInt(15) and TInt(4) and expect new element value to be 19', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.add(operand_1, operand_2).value).toBe(19); - }); - - test('subtract TInt(15) and TInt(4) and expect new element value to be 11', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - operand_1.subtract(operand_2); - expect(operand_1.value).toBe(11); - }); - - test('subtract TInt(15) and TInt(4) and expect new element value to be 11', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.subtract(operand_1, operand_2).value).toBe(11); - }); - - test('multiply TInt(15) and TInt(4) and expect new element value to be 60', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - operand_1.multiply(operand_2); - expect(operand_1.value).toBe(60); - }); - - test('multiply TInt(15) and TInt(4) and expect new element value to be 60', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.multiply(operand_1, operand_2).value).toBe(60); - }); - - test('divide TInt(15) and TInt(4) and expect new element value to be 3', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - operand_1.divide(operand_2); - expect(operand_1.value).toBe(3); - }); - - test('divide TInt(15) and TInt(4) and expect new element value to be 3', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.divide(operand_1, operand_2).value).toBe(3); - }); - - test('mod TInt(15) and TInt(4) and expect new element value to be 3', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.mod(operand_1, operand_2).value).toBe(3); - }); - - test('check for equality TInt(15) and TInt(4) and expect to get False', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.equals(operand_1, operand_2).value).toBe(false); - }); - - test('check for equality TInt(4) and TInt(4) and expect to get True', () => { - const operand_1 = new TInt(4); - const operand_2 = new TInt(4); - expect(TInt.equals(operand_1, operand_2).value).toBe(true); - }); - - test('check if TInt(15) greater than TInt(4) and expect to get True', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.greaterThan(operand_1, operand_2).value).toBe(true); - }); - - test('check if TInt(15) less than TInt(4) and expect to get False', () => { - const operand_1 = new TInt(15); - const operand_2 = new TInt(4); - expect(TInt.lessThan(operand_1, operand_2).value).toBe(false); - }); - - test('increment a TInt(15) object and expect value to be 16', () => { - const operand_1 = new TInt(15); - operand_1.increment(); - expect(operand_1.value).toBe(16); - }); - - test('decrement a TInt(16) object and expect value to be 15', () => { - const operand_1 = new TInt(16); - operand_1.decrement(); - expect(operand_1.value).toBe(15); - }); - }); - - - describe('class TFloat', () => { - - test('add TFloat(15.5) and TInt(4) and expect new element value to be 19.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - operand_3.add(operand_2); - expect(operand_3.value).toBe(19.5); - }); - - test('add TFloat(15.5) and TInt(4) and expect new element value to be 19.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.add(operand_3, operand_2).value).toBe(19.5); - }); - - test('subtract TFloat(15.5) and TInt(4) and expect new element value to be 11.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - operand_3.subtract(operand_2); - expect(operand_3.value).toBe(11.5); - }); - - test('subtract TFloat(15.5) and TInt(4) and expect new element value to be 11.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.subtract(operand_3, operand_2).value).toBe(11.5); - }); - - test('multiply TFloat(15.5) and TInt(4) and expect new element value to be 62', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - operand_3.multiply(operand_2); - expect(operand_3.value).toBe(62); - }); - - test('multiply TFloat(15.5) and TInt(4) and expect new element value to be 62', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.multiply(operand_3, operand_2).value).toBe(62); - }); - - test('divide TFloat(15.5) and TInt(4) and expect new element value to be 3.875', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - operand_3.divide(operand_2); - expect(operand_3.value).toBe(3.875); - }); - - test('divide TFloat(15.5) and TInt(4) and expect new element value to be 3.875', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.divide(operand_3, operand_2).value).toBe(3.875); - }); - - test('mod TFloat(15.5) and TInt(4) and expect new element value to be 3.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - operand_3.mod(operand_2); - expect(operand_3.value).toBe(3.5); - }); - - test('mod TFloat(15.5) and TInt(4) and expect new element value to be 3.5', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.mod(operand_3, operand_2).value).toBe(3.5); - }); - - test('check for equality of TFloat(15.5) and TInt(4) and expect to get false', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.equals(operand_3, operand_2).value).toBe(false); - }); - - test('check for equality of TFloat(15.5) and TFloat(15.5) and expect to get true', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TFloat(15.5); - expect(TFloat.equals(operand_3, operand_2).value).toBe(true); - }); - - test('check if TFloat(15.5) greaterThan TInt(4) and expect to get true', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.greaterThan(operand_3, operand_2).value).toBe(true); - }); - - test('check if TFloat(15.5) lessThan TInt(4) and expect to get false', () => { - const operand_3 = new TFloat(15.5); - const operand_2 = new TInt(4); - expect(TFloat.lessThan(operand_3, operand_2).value).toBe(false); - }); - - test('increment a TFloat(15.5) object and expect value to be 16.5', () => { - const operand_3 = new TFloat(15.5); - operand_3.increment(); - expect(operand_3.value).toBe(16.5); - }); - - test('decrement a TFloat(16.5) object and expect value to be 15.5', () => { - const operand_1 = new TFloat(15.5); - operand_1.decrement(); - expect(operand_1.value).toBe(14.5); - }); - }); - - describe('class TChar', () => { - test('assign 65 and add offset of -500 to TChar to equal ASCII 0 character', () => { - const typeObj = new TChar(65); - typeObj.addOffset(-500); - expect(typeObj.value).toBe(String.fromCharCode(0)); - }); - }); - - describe('class TString', () => { - test('test to check lenghth of string `"Hello World"` to be 11', () => { - const myString = new TString("hello world"); - expect(myString.length().value).toBe(11); - }); - - test('test to find the character at index 3 for string `"hello world"`', () => { - const myString = new TString("hello world"); - const index = new TInt(3); - expect(myString.charAt(index).value).toBe("l"); - }); - - test('test to find the index of character `"e"` in string `"hello world"`', () => { - const myString = new TString("hello world"); - const indexS = new TString("e"); - expect(myString.indexOf(indexS).value).toBe(1); - }); - - test('test for substring method that starts at index 1', () => { - const myString = new TString("hello world"); - const index = new TInt(1); - expect(myString.substring(index).value).toBe("ello world"); - }); - - test('test for substring method that starts at index 1 to index 4', () => { - const myString = new TString("hello world"); - const index = new TInt(1); - const endIndex = new TInt(4); - expect(myString.substring(index, endIndex).value).toBe("ell"); - }); - - test('test to compare equality of two strings using equals method to return true', () => { - const myString = new TString("hello world"); - const MyString = new TString("hello world"); - expect(myString.equals(MyString).value).toBe(true); - }); - - test('test to compare equality of two strings using equals method to return false', () => { - const myString = new TString("hello world"); - const MyString = new TString("llo world"); - expect(myString.equals(MyString).value).toBe(false); - }); - - test('test to compare equality of two strings using equals method to return true using static method', () => { - const myString = new TString("hello world"); - const MyString = new TString("hello world"); - expect(TString.equals(myString, MyString).value).toBe(true); - }); - - test('test to compare equality of two strings using equals method to return false using static method', () => { - const myString = new TString("hello world"); - const MyString = new TString("llo world"); - expect(TString.equals(myString, MyString).value).toBe(false); - }); - - test('test to compare two strings using compareTo method and expect -2', () => { - const myString = new TString("llo world"); - const MyString = new TString("hello world"); - expect(myString.compareTo(MyString).value).toBe(-2); - }); - - test('test to compare two strings using compareTo method and expect 0', () => { - const myString = new TString("hello world"); - const MyString = new TString("hello world"); - expect(myString.compareTo(MyString).value).toBe(0); - }); - - test('test to compare two strings using compareTo method and expect 1', () => { - const myString = new TString("hello worldd"); - const MyString = new TString("hello world"); - expect(myString.compareTo(MyString).value).toBe(1); - }); - - test('test to compare two strings using static compare method and expect -2', () => { - const myString = new TString("llo world"); - const MyString = new TString("hello world"); - expect(TString.compare(myString, MyString).value).toBe(-2); - }); - - test('test to compare two strings using static compare method and expect 0', () => { - const myString = new TString("hello world"); - const MyString = new TString("hello world"); - expect(TString.compare(myString, MyString).value).toBe(0); - }); - - test('test to compare two strings using static compare method and expect 1', () => { - const myString = new TString("hello worldd"); - const MyString = new TString("hello world"); - expect(TString.compare(myString, MyString).value).toBe(1); - }); - }); - - const operand_4 = new TBoolean(true); - const operand_5 = new TBoolean(false); - - describe('class TBoolean', () => { - test('and TBoolean(true) and TBoolean(true) and expect new element value to be true', () => { - expect(TBoolean.and(operand_4, operand_4).value).toBe(true); - }); - - test('and TBoolean(true) and TBoolean(false) and expect new element value to be false', () => { - expect(TBoolean.and(operand_4, operand_5).value).toBe(false); - }); - - test('and TBoolean(false) and TBoolean(false) and expect new element value to be false', () => { - expect(TBoolean.and(operand_5, operand_5).value).toBe(false); - }); - - test('or TBoolean(true) and TBoolean(true) and expect new element value to be true', () => { - expect(TBoolean.or(operand_4, operand_4).value).toBe(true); - }); - - test('or TBoolean(true) and TBoolean(false) and expect new element value to be true', () => { - expect(TBoolean.or(operand_4, operand_5).value).toBe(true); - }); - - test('or TBoolean(false) and TBoolean(false) and expect new element value to be false', () => { - expect(TBoolean.or(operand_5, operand_5).value).toBe(false); - }); - - test('invert a TBoolean(true) and expect value to be false', () => { - operand_4.invert(); - expect(operand_4.value).toBe(false); - }); - - test('invert a TBoolean(false) and expect value to be true', () => { - operand_5.invert(); - expect(operand_5.value).toBe(true); - }); - }); -}); diff --git a/src/archive/syntax-core/primitiveElements.ts b/src/archive/syntax-core/primitiveElements.ts deleted file mode 100644 index bcea43b..0000000 --- a/src/archive/syntax-core/primitiveElements.ts +++ /dev/null @@ -1,432 +0,0 @@ -import { TPrimitiveName } from './@types/primitiveTypes'; -import { IPrimitiveElement } from './@types/primitiveElements'; - -/** - * @private - * A generic Primitive Element based on JavaScript types (number, string, boolean). The aim is to - * wrap these types to produce integer, float, character, string, boolean. Sub-classes of this shall - * be the Primitive types as far as the Music Blocks framework is concerned. The implementation of - * operations on types, however, can't be implemented trivially since JavaScript doesn't support - * operator overloading. Therefore, it is done using class methods. Not the best, but we have to - * live with that if we need the custom primitive types. - */ -abstract class PrimitiveElement implements IPrimitiveElement { - protected _value: T; - private _type: TPrimitiveName; - - constructor(type: TPrimitiveName, value: T) { - this._type = type; - this._value = value; - } - - get type() { - return this._type; - } - - set value(value: T) { - this._value = value; - } - - get value() { - return this._value; - } -} - -// ---- Primitive Type Classes --------------------------------------------------------------------- - -/** - * Integer primitive type. - * @todo add remaining operators. - */ -export class TInt extends PrimitiveElement { - constructor(value: number) { - super('TInt', value); - this.value = value; - } - - /** - * @override - * Setter for wrapped value. - */ - set value(value: number) { - this._value = TInt.toInt(value); - } - - /** - * @override - * Getter for wrapped value. - */ - get value() { - return this._value; - } - - // -- Utilities ------------------------------------------------------------ - - /** Trims decimal portion of a floating number. */ - static toInt(value: number) { - return Math.floor(value); - } - - /** - * Type casts other primitives types to TInt. - * @throws Invalid format - */ - static TInt(primitive: TInt | TFloat | TChar | TString) { - if (primitive instanceof TFloat) { - return new TInt(primitive.value); - } else if (primitive instanceof TChar) { - return new TInt((primitive.value as string).charCodeAt(0)); - } else if (primitive instanceof TString) { - const num = Number(primitive.value); - if (isNaN(num)) { - throw Error(`Invalid format: TString object does not represent a number`); - } - return new TInt(num); - } else { - return primitive; - } - } - - // -- Operators ------------------------------------------------------------ - // -- All static methods must return a TInt, non-static directly update value so return void - - add(operand: TInt) { - this.value += operand.value; - } - - /** Binary + operator. */ - static add(operand_1: TInt, operand_2: TInt) { - return new TInt(operand_1.value + operand_2.value); - } - - subtract(operand: TInt) { - this.value -= operand.value; - } - - /** Binary - operator. */ - static subtract(operand_1: TInt, operand_2: TInt) { - return new TInt(operand_1.value - operand_2.value); - } - - multiply(operand: TInt) { - this.value *= operand.value; - } - - /** Binary * operator. */ - static multiply(operand_1: TInt, operand_2: TInt) { - return new TInt(operand_1.value * operand_2.value); - } - - divide(operand: TInt) { - this.value /= operand.value; - } - - /** Binary / operator. */ - static divide(operand_1: TInt, operand_2: TInt) { - return new TInt(operand_1.value / operand_2.value); - } - - mod(operand: TInt) { - this.value %= operand.value; - } - - /** Binary % operator. */ - static mod(operand_1: TInt, operand_2: TInt) { - return new TInt(operand_1.value % operand_2.value); - } - - /** Binary == operator. */ - static equals(operand_1: TInt, operand_2: TInt) { - return new TBoolean(operand_1.value == operand_2.value); - } - - /** Binary > operator. */ - static greaterThan(operand_1: TInt, operand_2: TInt) { - return new TBoolean(operand_1.value > operand_2.value); - } - - /** Binary < operator. */ - static lessThan(operand_1: TInt, operand_2: TInt) { - return new TBoolean(operand_1.value < operand_2.value); - } - - /** Unary ++ operator. */ - increment() { - this._value++; - } - - /** Unary -- operator. */ - decrement() { - this._value--; - } -} - -/** - * Float primitive type. - * @todo add remaining operators. - */ -export class TFloat extends PrimitiveElement { - constructor(value: number) { - super('TFloat', value); - } - - // -- Utilities ------------------------------------------------------------ - - /** - * Type casts other primitives types to TFloat. - * @throws Invalid format - */ - static TFloat(primitive: TFloat | TInt | TString) { - if (primitive instanceof TInt) { - return new TFloat(primitive.value); - } else if (primitive instanceof TString) { - const num = Number(primitive.value); - if (isNaN(num)) { - throw Error(`Invalid format: TString object does not represent a number`); - } - return new TFloat(num); - } else { - return primitive; - } - } - - // -- Operators ------------------------------------------------------------ - // -- All static methods must return a TFloat, non-static directly update value so return void - - add(operand: TInt | TFloat) { - this.value += operand.value; - } - - /** Binary + operator. */ - static add(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TFloat(operand_1.value + operand_2.value); - } - - subtract(operand: TInt | TFloat) { - this.value -= operand.value; - } - - /** Binary - operator. */ - static subtract(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TFloat(operand_1.value - operand_2.value); - } - - multiply(operand: TInt | TFloat) { - this.value *= operand.value; - } - - /** Binary * operator. */ - static multiply(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TFloat(operand_1.value * operand_2.value); - } - - divide(operand: TInt | TFloat) { - this.value /= operand.value; - } - - /** Binary / operator. */ - static divide(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TFloat(operand_1.value / operand_2.value); - } - - mod(operand: TInt | TFloat) { - this.value %= operand.value; - } - - /** Binary % operator. */ - static mod(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TFloat(operand_1.value % operand_2.value); - } - - /** Binary == operator. */ - static equals(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TBoolean(operand_1.value == operand_2.value); - } - - /** Binary > operator. */ - static greaterThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TBoolean(operand_1.value > operand_2.value); - } - - /** Binary < operator. */ - static lessThan(operand_1: TFloat | TInt, operand_2: TFloat | TInt) { - return new TBoolean(operand_1.value < operand_2.value); - } - - /** Unary ++ operator. */ - increment() { - this._value++; - } - - /** Unary -- operator. */ - decrement() { - this._value--; - } -} - -/** - * Character primitive type. - * @todo add remaining operators. - */ -export class TChar extends PrimitiveElement { - constructor(value: string | number) { - super('TChar', ''); - if (typeof value === 'string') { - this.value = value; - } else { - this.valueInt = value; - } - } - - /** - * @override - * Setter for wrapped value. - */ - set value(value: string) { - this._value = value.length === 0 ? String.fromCharCode(0) : value.charAt(0); - } - - /** - * @override - * Getter for wrapped value. - */ - get value() { - return this._value; - } - - /** Setter for wrapped value (by ASCII). */ - set valueInt(value: number) { - this._value = TChar.toChar(value); - } - - // -- Utilities ------------------------------------------------------------ - - /** Returns equivalent character for ASCII (trimmed to [0, 255]). */ - static toChar(value: number) { - return String.fromCharCode(Math.min(Math.max(TInt.toInt(value), 0), 255)); - } - - /** Type casts TInt or TChar types to TChar. */ - static TChar(primitive: TChar | TInt) { - if (primitive instanceof TInt) { - return new TChar(TChar.toChar(primitive.value)); - } else { - return primitive; - } - } - - // -- Operators ------------------------------------------------------------ - // -- All static methods must return a TChar, non-static directly update value so return void - - /** Unary add ASCII operator. */ - addOffset(offset: number) { - this._value = TChar.toChar(this._value.toString().charCodeAt(0) + TInt.toInt(offset)); - } -} - -/** - * String primitive type. - * @todo add remaining operators. - */ -export class TString extends PrimitiveElement { - constructor(value: string) { - super('TString', value); - } - - // -- Utilities ------------------------------------------------------------ - - /** Type casts other primitive types to TString. */ - static TString(primitive: TString | TInt | TFloat | TChar) { - if (primitive instanceof TString) { - return primitive; - } else { - return new TString(primitive.value.toString()); - } - } - - - length(): TInt { - return new TInt(this.value.length); -} - - charAt(index: TInt): TChar { - const thisStr = this.value; - const indxInt = index.value; - if (indxInt < 0 || indxInt >= thisStr.length) { - throw Error(`String index "${indxInt}" out of bounds`); - } - return new TChar(thisStr.charAt(indxInt)); - }; - - indexOf(substring: TChar | TString): TInt { - const thisStr = this.value; - return new TInt(thisStr.indexOf(substring.value.toString())); - }; - - substring(startIndex: TInt, length?: TInt): TString { - const thisStr = this.value; - const indxInt = startIndex.value; - if (typeof length === "undefined"){ - if (indxInt < 0 || indxInt >= thisStr.length) { - throw Error(`String index "${indxInt}" out of bounds`); - } - return new TString(thisStr.substring(indxInt)); - } - else { - const endInt = length.value; - if (indxInt < 0 || endInt >= thisStr.length){ - throw Error(`String index "${endInt}" out of bounds or "${indxInt} is less than 0"`); - } - return new TString(thisStr.substring(indxInt, endInt)); - } - }; - - equals(operand: TChar | TString): TBoolean{ - const thisStr = this.value; - return new TBoolean(thisStr === operand.value.toString()); - }; - - static equals(operand_1: TChar | TString, operand_2: TChar | TString): TBoolean{ - const operand1 = operand_1.value.toString(); - const operand2 = operand_2.value.toString(); - return new TBoolean(operand1 === operand2); - }; - - compareTo(operand: TChar | TString): TInt{ - return new TInt(this.value.length - operand.value.length); - }; - - static compare(operand_1: TChar | TString, operand_2: TChar | TString): TInt{ - const operand1 = operand_1.value.toString(); - const operand2 = operand_2.value.toString(); - return new TInt(operand1.length - operand2.length); - }; -} - -/** - * Boolean primitive type. - * @todo add remaining operators. - */ -export class TBoolean extends PrimitiveElement { - constructor(value: boolean) { - super('TBoolean', value); - } - - // -- Operators ------------------------------------------------------------ - // -- All static methods must return a TBoolean, non-static directly update value so return void - - /** Binary && operator. */ - static and(operand_1: TBoolean, operand_2: TBoolean) { - return new TBoolean(operand_1.value && operand_2.value); - } - - /** Binary || operator. */ - static or(operand_1: TBoolean, operand_2: TBoolean) { - return new TBoolean(operand_1.value || operand_2.value); - } - - /** Unary ! operator. */ - invert() { - this._value = !this._value; - } -} diff --git a/src/archive/syntax-core/program-elements/conditionalElements.test.ts b/src/archive/syntax-core/program-elements/conditionalElements.test.ts deleted file mode 100644 index b25ba2f..0000000 --- a/src/archive/syntax-core/program-elements/conditionalElements.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -import { ConditionalElement } from './conditionalElements'; -import { StatementElement } from '../structureElements'; -import { ValueElement } from './valueElements'; - -/** Dummy class to extend abstract class StatementElement. */ -class CStatementElement extends StatementElement { - onVisit() {} -} - -describe('namespace ConditionalElement', () => { - const statement_1 = new CStatementElement('statement-1'); - const statement_2 = new CStatementElement('statement-2'); - - describe('class IfElseElement', () => { - const ifElseElem = new ConditionalElement.IfElseElement(); - ifElseElem.setChildHead(0, statement_1); - ifElseElem.setChildHead(1, statement_2); - - test("pass a valid true condition and expect childHead to be first block's head", () => { - const argElem = new ValueElement.TrueElement(); - ifElseElem.args.setArg('condition', argElem); - ifElseElem.onVisit({ - args: { - condition: argElem.getData({}) - } - }); - const childHead = ifElseElem.childHead; - if (childHead !== null) { - expect(childHead.elementName).toBe('statement-1'); - } else { - throw Error('Object should not be null'); - } - }); - - test("pass a valid false condition and expect childHead to be second block's head", () => { - const argElem = new ValueElement.FalseElement(); - ifElseElem.args.setArg('condition', argElem); - ifElseElem.onVisit({ - args: { - condition: argElem.getData({}) - } - }); - const childHead = ifElseElem.childHead; - if (childHead !== null) { - expect(childHead.elementName).toBe('statement-2'); - } else { - throw Error('Object should not be null'); - } - }); - - // test('pass a null as condition and expect error', () => { - // ifElseElem.args.setArg('condition', null); - // expect(() => ifElseElem.onVisit()).toThrowError( - // 'Invalid argument: condition cannot be null' - // ); - // }); - }); - - describe('class IfThenElement', () => { - const IfThenElem = new ConditionalElement.IfThenElement(); - IfThenElem.setChildHead(0, statement_1); - - test("pass a valid true condition and expect childHead to be first block's head", () => { - const argElem = new ValueElement.TrueElement(); - IfThenElem.args.setArg('condition', argElem); - IfThenElem.onVisit({ - args: { - condition: argElem.getData({}) - } - }); - const childHead = IfThenElem.childHead; - if (childHead !== null) { - expect(childHead.elementName).toBe('statement-1'); - } else { - throw Error('Object should not be null'); - } - }); - - test('pass a valid false condition and expect childHead to be null', () => { - const argElem = new ValueElement.FalseElement(); - IfThenElem.args.setArg('condition', argElem); - IfThenElem.onVisit({ - args: { - condition: argElem.getData({}) - } - }); - const childHead = IfThenElem.childHead; - expect(childHead).toBe(null); - }); - - // test('pass a null as condition and expect error', () => { - // IfThenElem.args.setArg('condition', null); - // expect(() => IfThenElem.onVisit()).toThrowError( - // 'Invalid argument: condition cannot be null' - // ); - // }); - }); -}); diff --git a/src/archive/syntax-core/program-elements/conditionalElements.ts b/src/archive/syntax-core/program-elements/conditionalElements.ts deleted file mode 100644 index 183aebb..0000000 --- a/src/archive/syntax-core/program-elements/conditionalElements.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TPrimitive } from '../@types/primitiveTypes'; -import { BlockElement } from '../structureElements'; - -export namespace ConditionalElement { - export class IfElseElement extends BlockElement { - constructor(elementName?: 'if') { - super(elementName !== undefined ? elementName : 'if-else', 2, { - condition: ['TBoolean'] - }); - } - - onVisit(props: { args: { condition: TPrimitive } }) { - this.childHead = this.getChildHead(props.args['condition'].value ? 0 : 1); - } - - onExit() {} - } - - export class IfThenElement extends IfElseElement { - constructor() { - super('if'); - } - } -} diff --git a/src/archive/syntax-core/program-elements/dataElements.test.ts b/src/archive/syntax-core/program-elements/dataElements.test.ts deleted file mode 100644 index aff464e..0000000 --- a/src/archive/syntax-core/program-elements/dataElements.test.ts +++ /dev/null @@ -1,269 +0,0 @@ -import { SymbolTable } from '../symbolTable'; -import { DataElement } from './dataElements'; -import { ValueElement } from './valueElements'; - -describe('namespace DataElement', () => { - describe('initialization and verification', () => { - test('initialize IntDataElement with IntElement object and verify', () => { - const dataElem = new DataElement.IntDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.IntElement(5)); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.getData({}).value).toBe(5); - } else { - throw Error('Object should not be null.'); - } - }); - - test('initialize IntDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { - const dataElem = new DataElement.IntDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - }).toThrowError('"TBoolean" is not a valid type for "value".'); - }); - - test('initialize FloatDataElement with FloatElement object and verify', () => { - const dataElem = new DataElement.FloatDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.FloatElement(5.234)); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.getData({}).value).toBe(5.234); - } else { - throw Error('Object should not be null.'); - } - }); - - test('initialize FloatDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { - const dataElem = new DataElement.FloatDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - }).toThrowError('"TBoolean" is not a valid type for "value".'); - }); - - test('initialize CharDataElement with CharElement object and verify', () => { - const dataElem = new DataElement.CharDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.CharElement(97)); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.getData({}).value).toBe('a'); - } else { - throw Error('Object should not be null.'); - } - }); - - test('initialize CharDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { - const dataElem = new DataElement.CharDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - }).toThrowError('"TBoolean" is not a valid type for "value".'); - }); - - test('initialize StringDataElement with StringElement object and verify', () => { - const dataElem = new DataElement.StringDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.StringElement('string')); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.getData({}).value).toBe('string'); - } else { - throw Error('Object should not be null.'); - } - }); - - test('initialize StringDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { - const dataElem = new DataElement.StringDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - }).toThrowError('"TBoolean" is not a valid type for "value".'); - }); - - test('initialize BooleanDataElement with BooleanElement object and verify', () => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.TrueElement()); - const arg = dataElem.args.getArg('value'); - if (arg !== null) { - expect(arg.getData({}).value).toBe(true); - } else { - throw Error('Object should not be null.'); - } - }); - - test('initialize BooleanDataElement with ArgumentElement object of unaccepted return-type and expect error', () => { - expect(() => { - const dataElem = new DataElement.BooleanDataElement(); - dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - dataElem.args.setArg('value', new ValueElement.IntElement(5)); - }).toThrowError('"TInt" is not a valid type for "value".'); - }); - - // test('initialize AnyDataElement with StringElement object and verify', () => { - // const dataElem = new DataElement.AnyDataElement(); - // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - // dataElem.argValue = new ValueElement.StringElement('any'); - // const arg = dataElem.args.getArg('value'); - // if (arg !== null) { - // expect(arg.data.value).toBe('any'); - // } else { - // throw Error('Object should not be null'); - // } - // }); - }); - - const symbolTable = new SymbolTable(); - - describe('value element verification', () => { - test('verify reference in created DataValueElement after assigning a IntDataElement', () => { - const dataElem = new DataElement.IntDataElement(); - const argIdentifier = new ValueElement.StringElement('myIntBox'); - const argValue = new ValueElement.IntElement(5); - dataElem.args.setArg('identifier', argIdentifier); - dataElem.args.setArg('value', argValue); - dataElem.onVisit({ - args: { - identifier: argIdentifier.getData({}), - value: argValue.getData({}) - }, - symbolTable - }); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.IntDataValueElement).toBe(true); - expect(valueElement.getData({ symbolTable }).value).toBe(5); - const dataElement = valueElement.getData({ symbolTable }); - expect(dataElement).toEqual(argValue.getData({})); - }); - - // test('attempt to fetch TInt reference while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.IntDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', null); - // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - // }); - - test('verify reference in created DataValueElement after assigning a FloatDataElement', () => { - const dataElem = new DataElement.FloatDataElement(); - const argIdentifier = new ValueElement.StringElement('myFloatBox'); - const argValue = new ValueElement.FloatElement(2.71828); - dataElem.args.setArg('identifier', argIdentifier); - dataElem.args.setArg('value', argValue); - dataElem.onVisit({ - args: { - identifier: argIdentifier.getData({}), - value: argValue.getData({}) - }, - symbolTable - }); - const valueElement = dataElem.valueElement; - expect(valueElement instanceof ValueElement.FloatDataValueElement).toBe(true); - expect(valueElement.getData({ symbolTable }).value).toBe(2.71828); - const dataElement = valueElement.getData({ symbolTable }); - expect(dataElement).toEqual(argValue.getData({})); - }); - - // test('attempt to fetch TFloat reference while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.FloatDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', null); - // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - // }); - - test('verify reference in created DataValueElement after assigning a CharDataElement', () => { - // const dataElem = new DataElement.CharDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', new ValueElement.CharElement(97)); - // dataElem.onVisit(); - // const valueElement = dataElem.valueElement; - // expect(valueElement instanceof ValueElement.CharDataValueElement).toBe(true); - // expect(valueElement.getData({ symbolTable }).value).toBe('a'); - // const dataElement = valueElement.getData({ symbolTable }); - // expect(dataElement).toEqual(dataElem.dataElementRef); - }); - - // test('attempt to fetch TChar reference while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.CharDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', null); - // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - // }); - - test('verify reference in created DataValueElement after assigning a StringDataElement', () => { - // const dataElem = new DataElement.StringDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', new ValueElement.StringElement('string')); - // dataElem.onVisit(); - // const valueElement = dataElem.valueElement; - // expect(valueElement instanceof ValueElement.StringDataValueElement).toBe(true); - // expect(valueElement.getData({ symbolTable }).value).toBe('string'); - // const dataElement = valueElement.getData({ symbolTable }); - // expect(dataElement).toEqual(dataElem.dataElementRef); - }); - - // test('attempt to fetch TString reference while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.StringDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', null); - // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - // }); - - test('verify reference in created DataValueElement after assigning a BooleanDataElement with TrueElement', () => { - // const dataElem = new DataElement.BooleanDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', new ValueElement.TrueElement()); - // dataElem.onVisit(); - // const valueElement = dataElem.valueElement; - // expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - // expect(valueElement.getData({ symbolTable }).value).toBe(true); - // const dataElement = valueElement.getData({ symbolTable }); - // expect(dataElement).toEqual(dataElem.dataElementRef); - }); - - test('verify reference in created DataValueElement after assigning a BooleanDataElement with FalseElement', () => { - // const dataElem = new DataElement.BooleanDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', new ValueElement.FalseElement()); - // dataElem.onVisit(); - // const valueElement = dataElem.valueElement; - // expect(valueElement instanceof ValueElement.BooleanDataValueElement).toBe(true); - // expect(valueElement.getData({ symbolTable }).value).toBe(false); - // const dataElement = valueElement.getData({ symbolTable }); - // expect(dataElement).toEqual(dataElem.dataElementRef); - }); - - // test('attempt to fetch TBoolean reference while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.BooleanDataElement(); - // dataElem.args.setArg('identifier', new ValueElement.StringElement('myBox')); - // dataElem.args.setArg('value', null); - // expect(() => dataElem.dataElementRef).toThrowError('Value cannot be null.'); - // }); - - // test('verify created ValueElement after executing a AnyDataElement', () => { - // const dataElem = new DataElement.AnyDataElement(); - // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - // dataElem.argValue = new ValueElement.FalseElement(); - // dataElem.onVisit(); - // const valueElement = dataElem.valueElement; - // if (valueElement !== null) { - // expect(valueElement instanceof ValueElement.FalseElement).toBe(true); - // expect(valueElement.data.value).toBe(false); - // const dataElement = valueElement.dataElement; - // expect(dataElement).toEqual(dataElem); - // } else { - // throw Error('Object should not be null'); - // } - // }); - - // test('attempt to execute a AnyDataElement while assigning a null as value and expect error', () => { - // const dataElem = new DataElement.AnyDataElement(); - // dataElem.argIdentifier = new ValueElement.StringElement('myBox'); - // dataElem.argValue = null; - // expect(() => dataElem.onVisit()).toThrowError('Invalid argument: value cannot be null'); - // }); - }); -}); diff --git a/src/archive/syntax-core/program-elements/dataElements.ts b/src/archive/syntax-core/program-elements/dataElements.ts deleted file mode 100644 index 3b79229..0000000 --- a/src/archive/syntax-core/program-elements/dataElements.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; -import { TString } from '../primitiveElements'; -import { StatementElement } from '../structureElements'; -import { SymbolTable } from '../symbolTable'; -import { ValueElement } from './valueElements'; - -type TDataValue = - | ValueElement.IntDataValueElement - | ValueElement.FloatDataValueElement - | ValueElement.CharDataValueElement - | ValueElement.StringDataValueElement - | ValueElement.BooleanDataValueElement; - -export namespace DataElement { - abstract class DataElement extends StatementElement { - private _type: TPrimitiveName; - - constructor(identifier: string, type: TPrimitiveName) { - super(identifier, { - identifier: ['TString'], - value: [type] - }); - this._type = type; - } - - get type() { - return this._type; - } - - get argIdentifier() { - const arg = this.args.getArg('identifier'); - if (arg === null) { - throw Error('Invalid data element: missing identifier.'); - } else { - return arg.getData({}) as TString; - } - } - - abstract get valueElement(): TDataValue; - - onVisit(props: { - args: { - identifier: TPrimitive; - value: TPrimitive; - }; - symbolTable: SymbolTable; - }) { - props.symbolTable.addSymbol(props.args.identifier as TString, props.args.value); - } - } - - export class IntDataElement extends DataElement { - constructor() { - super('data-int', 'TInt'); - } - - get valueElement() { - return new ValueElement.IntDataValueElement(this.argIdentifier); - } - } - - export class FloatDataElement extends DataElement { - constructor() { - super('data-float', 'TFloat'); - } - - get valueElement() { - return new ValueElement.FloatDataValueElement(this.argIdentifier); - } - } - - export class CharDataElement extends DataElement { - constructor() { - super('data-char', 'TChar'); - } - - get valueElement() { - return new ValueElement.CharDataValueElement(this.argIdentifier); - } - } - - export class StringDataElement extends DataElement { - constructor() { - super('data-string', 'TString'); - } - - get valueElement() { - return new ValueElement.StringDataValueElement(this.argIdentifier); - } - } - - export class BooleanDataElement extends DataElement { - constructor() { - super('data-boolean', 'TBoolean'); - } - - get valueElement() { - return new ValueElement.BooleanDataValueElement(this.argIdentifier); - } - } - - // export class AnyDataElement extends DataElement { - // constructor() { - // super('data-any', ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean']); - // } - - // get valueElement() { - // return new ValueElement.IntDataValueElement(this); - // } - - // get dataElementRef() { - // const argValue = this.argValue; - // if (argValue === null) { - // throw Error('Invalid argument: value cannot be null'); - // } else { - // const arg = argValue.data; - // if (arg instanceof TInt) { - // return arg as TInt; - // } else if (arg instanceof TFloat) { - // return arg as TFloat; - // } else if (arg instanceof TChar) { - // return arg as TChar; - // } else if (arg instanceof TString) { - // return arg as TString; - // } else { - // return arg as TBoolean; - // } - // } - // } - - // onVisit() {} - // } - - abstract class UpdateDataElement extends StatementElement { - constructor( - elementName: string, - constraints: { - currValue: [TPrimitiveName]; - newValue: [TPrimitiveName]; - } - ) { - super(elementName, constraints); - } - - onVisit(props: { - args: { - currValue: TPrimitive; - newValue: TPrimitive; - }; - }) { - props.args.currValue.value = props.args.newValue.value; - } - } - - export class UpdateIntDataElement extends UpdateDataElement { - constructor() { - super('update-data-int', { - currValue: ['TInt'], - newValue: ['TInt'] - }); - } - } - - export class UpdateFloatDataElement extends UpdateDataElement { - constructor() { - super('update-data-int', { - currValue: ['TFloat'], - newValue: ['TFloat'] - }); - } - } - - export class UpdateCharDataElement extends UpdateDataElement { - constructor() { - super('update-data-int', { - currValue: ['TChar'], - newValue: ['TChar'] - }); - } - } - - export class UpdateStringDataElement extends UpdateDataElement { - constructor() { - super('update-data-int', { - currValue: ['TString'], - newValue: ['TString'] - }); - } - } - - export class UpdateBooleanDataElement extends UpdateDataElement { - constructor() { - super('update-data-int', { - currValue: ['TBoolean'], - newValue: ['TBoolean'] - }); - } - } -} diff --git a/src/archive/syntax-core/program-elements/loopElements.test.ts b/src/archive/syntax-core/program-elements/loopElements.test.ts deleted file mode 100644 index 0092d97..0000000 --- a/src/archive/syntax-core/program-elements/loopElements.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { LoopElement } from './loopElements'; -import { ValueElement } from './valueElements'; - -describe('namespace LoopElement', () => { - describe('class RepeatLoopElement', () => { - const repeatElem = new LoopElement.RepeatLoopElement(); - - test('Repeat 3 times while expecting next instruction to be itself twice and null after 3rd iteration', () => { - const valueElem = new ValueElement.IntElement(3); - for (let i = 0; i < 2; i++) { - repeatElem.onVisit({ - args: { - value: valueElem.getData({}) - } - }); - repeatElem.onExit(); - expect(repeatElem.next).toEqual(repeatElem); - } - repeatElem.onVisit({ - args: { - value: valueElem.getData({}) - } - }); - repeatElem.onExit(); - expect(repeatElem.next).toBe(null); - }); - - test('Repeat with a negative value and expect error', () => { - const valueElem = new ValueElement.IntElement(-3); - expect(() => - repeatElem.onVisit({ - args: { - value: valueElem.getData({}) - } - }) - ).toThrowError('Repeat loop needs a positive value.'); - }); - }); -}); diff --git a/src/archive/syntax-core/program-elements/loopElements.ts b/src/archive/syntax-core/program-elements/loopElements.ts deleted file mode 100644 index 334152a..0000000 --- a/src/archive/syntax-core/program-elements/loopElements.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { TPrimitive } from '../@types/primitiveTypes'; -import { BlockElement, DummyElement, InstructionElement } from '../structureElements'; - -export namespace LoopElement { - export class RepeatLoopElement extends BlockElement { - private _nextStore: InstructionElement | null = new DummyElement(); - private _counter: number = 0; - - constructor() { - super('repeat', 1, { - value: ['TInt', 'TFloat'] - }); - } - - onVisit(props: { args: { value: TPrimitive } }) { - if (props.args['value'].value < 0) { - throw Error('Repeat loop needs a positive value.'); - } else { - // Not already repeating. - if (this._nextStore !== null && this._nextStore.isDummy) { - this._nextStore = this.next; - this._counter = props.args['value'].value as number; - } - } - this.childHead = this.getChildHead(0); - } - - onExit() { - this._counter--; - if (this._counter > 0) { - this.next = this; - } else { - // Reset values - repeat ended. - this.next = this._nextStore; - this._nextStore = new DummyElement(); - } - } - } -} diff --git a/src/archive/syntax-core/program-elements/miscellaneousElements.ts b/src/archive/syntax-core/program-elements/miscellaneousElements.ts deleted file mode 100644 index dc31943..0000000 --- a/src/archive/syntax-core/program-elements/miscellaneousElements.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TPrimitive } from '../@types/primitiveTypes'; -import { ArgumentElement, StatementElement } from '../structureElements'; - -export namespace MiscellaneousElement { - export class PrintElement extends StatementElement { - constructor() { - super('print', { - message: ['TInt', 'TFloat', 'TChar', 'TString', 'TBoolean'] - }); - } - - /** @todo logic to be implemented after UI is created. Currently just for demonstration. */ - onVisit(props: { args: { message: TPrimitive } }) { - console.log(`" ${props.args['message'].value} "`); - } - } -} diff --git a/src/archive/syntax-core/program-elements/operationElements.test.ts b/src/archive/syntax-core/program-elements/operationElements.test.ts deleted file mode 100644 index f46a014..0000000 --- a/src/archive/syntax-core/program-elements/operationElements.test.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { OperationElement } from './operationElements'; -import { ValueElement } from './valueElements'; - -describe('arithmetic operations', () => { - test('supply two valid ArgumentElements to AddElement and verify', () => { - const operElem = new OperationElement.AddElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(19.5); - }); - - test('supply one valid ArgumentElement and type-castable ArgumentElement to AddElement and verify', () => { - const operElem = new OperationElement.AddElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.IntElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(19.5); - }); - - // test('supply one valid ArgumentElement and a null to AddElement and verify', () => { - // const operElem = new OperationElement.AddElement(); - // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); - // }); - - test('supply two valid ArgumentElements to SubtractElement and verify', () => { - const operElem = new OperationElement.SubtractElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(11.5); - }); - - test('supply two valid ArgumentElements to MultiplyElement and verify', () => { - const operElem = new OperationElement.MultiplyElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(62); - }); - - test('supply two valid ArgumentElements to DivideElement and verify', () => { - const operElem = new OperationElement.DivideElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(3.875); - }); - - test('supply two valid ArgumentElements to ModElement and verify', () => { - const operElem = new OperationElement.ModElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TFloat'); - expect(resElem.value).toBe(3.5); - }); -}); - -describe('relation operations', () => { - test('supply two valid ArgumentElements to EqualsElement and verify', () => { - const operElem = new OperationElement.EqualsElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(15.5).getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(true); - }); - - test('supply one valid ArgumentElement and type-castable ArgumentElement to EqualsElement and verify', () => { - const operElem = new OperationElement.EqualsElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.0).getData({}), - operand_2: new ValueElement.IntElement(15).getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(true); - }); - - // test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { - // const operElem = new OperationElement.EqualsElement(); - // operElem.argOperand_1 = new ValueElement.FloatElement(15.5); - // operElem.argOperand_2 = null; - // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); - // }); - - test('supply two valid ArgumentElements to GreaterThanElement and verify', () => { - const operElem = new OperationElement.GreaterThanElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(true); - }); - - test('supply two valid ArgumentElements to LessThanElement and verify', () => { - const operElem = new OperationElement.LessThanElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.FloatElement(15.5).getData({}), - operand_2: new ValueElement.FloatElement(4).getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(false); - }); -}); - -describe('boolean operations', () => { - test('supply two valid ArgumentElements to AndElement and verify', () => { - const operElem = new OperationElement.AndElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.TrueElement().getData({}), - operand_2: new ValueElement.TrueElement().getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(true); - }); - - // test('supply one valid ArgumentElement and a null to EqualsElement and verify', () => { - // const operElem = new OperationElement.AndElement(); - // operElem.argOperand_1 = new ValueElement.TrueElement(); - // operElem.argOperand_2 = null; - // expect(() => operElem.getData({})).toThrowError('"operand_2" cannot be null.'); - // }); - - test('supply two valid ArgumentElements to OrElement and verify', () => { - const operElem = new OperationElement.OrElement(); - const resElem = operElem.getData({ - args: { - operand_1: new ValueElement.TrueElement().getData({}), - operand_2: new ValueElement.FalseElement().getData({}) - } - }); - expect(resElem.type).toBe('TBoolean'); - expect(resElem.value).toBe(true); - }); -}); diff --git a/src/archive/syntax-core/program-elements/operationElements.ts b/src/archive/syntax-core/program-elements/operationElements.ts deleted file mode 100644 index 3104055..0000000 --- a/src/archive/syntax-core/program-elements/operationElements.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { TPrimitive, TPrimitiveName } from '../@types/primitiveTypes'; -import { TBoolean, TFloat, TInt } from '../primitiveElements'; -import { ArgumentElement, ArgumentExpressionElement } from '../structureElements'; - -type TArithOp = '+' | '-' | '*' | '/' | '%'; -type TRelnOp = '==' | '>' | '<'; -type TBoolOp = '||' | '&&'; -type TArg = ArgumentElement | null; - -export namespace OperationElement { - abstract class BinaryOperationElement extends ArgumentExpressionElement { - protected _operator: TArithOp | TRelnOp | TBoolOp; - protected _operand_1: TArg = null; - protected _operand_2: TArg = null; - - constructor( - elementName: string, - type: TPrimitiveName, - operator: TArithOp | TRelnOp | TBoolOp, - constraints: { operand_1: TPrimitiveName[]; operand_2: TPrimitiveName[] } - ) { - super(elementName, type, constraints); - this._operator = operator; - } - - set argOperand_1(operand_1: TArg) { - this.args.setArg('operand_1', operand_1); - this._operand_1 = operand_1; - } - - get argOperand_1() { - return this._operand_1; - } - - set argOperand_2(operand_2: TArg) { - this.args.setArg('operand_2', operand_2); - this._operand_2 = operand_2; - } - - get argOperand_2() { - return this._operand_2; - } - - abstract getData(props: { - args: { operand_1: TPrimitive; operand_2: TPrimitive }; - }): TPrimitive; - } - - // -- Arithmetic Operators --------------------------------------------------------------------- - - abstract class ArithmeticOperationElement extends BinaryOperationElement { - constructor(elementName: string, type: TPrimitiveName, operator: TArithOp) { - super(elementName, type, operator, { - operand_1: ['TFloat'], - operand_2: ['TFloat'] - }); - } - - getData(props: { - args: { - operand_1: TPrimitive; - operand_2: TPrimitive; - }; - }): TPrimitive { - if (!(props.args.operand_1 instanceof TInt || props.args.operand_1 instanceof TFloat)) { - throw Error(`"operand_1" can only be of type TInt or TFloat.`); - } - if (!(props.args.operand_2 instanceof TInt || props.args.operand_2 instanceof TFloat)) { - throw Error(`"operand_2" can only be of type TInt or TFloat.`); - } - - switch (this._operator) { - case '+': - return TFloat.add( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '-': - return TFloat.subtract( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '*': - return TFloat.multiply( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '/': - return TFloat.divide( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '%': - return TFloat.mod( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - default: - throw Error(`Should not be reached.`); - } - } - } - - export class AddElement extends ArithmeticOperationElement { - constructor() { - super('add', 'TFloat', '+'); - } - } - - export class SubtractElement extends ArithmeticOperationElement { - constructor() { - super('subtract', 'TFloat', '-'); - } - } - - export class MultiplyElement extends ArithmeticOperationElement { - constructor() { - super('multiply', 'TFloat', '*'); - } - } - - export class DivideElement extends ArithmeticOperationElement { - constructor() { - super('divide', 'TFloat', '/'); - } - } - - export class ModElement extends ArithmeticOperationElement { - constructor() { - super('mod', 'TFloat', '%'); - } - } - - // -- Relational Operators --------------------------------------------------------------------- - - abstract class RelationOperationElement extends BinaryOperationElement { - constructor(elementName: string, operator: TRelnOp) { - super(elementName, 'TBoolean', operator, { - operand_1: ['TFloat'], - operand_2: ['TFloat'] - }); - } - - getData(props: { - args: { - operand_1: TPrimitive; - operand_2: TPrimitive; - }; - }): TPrimitive { - if (!(props.args.operand_1 instanceof TInt || props.args.operand_1 instanceof TFloat)) { - throw Error(`"operand_1" can only be of type TInt or TFloat.`); - } - if (!(props.args.operand_2 instanceof TInt || props.args.operand_2 instanceof TFloat)) { - throw Error(`"operand_2" can only be of type TInt or TFloat.`); - } - - switch (this._operator) { - case '==': - return TFloat.equals( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '>': - return TFloat.greaterThan( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - case '<': - return TFloat.lessThan( - props.args.operand_1 as TInt | TFloat, - props.args.operand_2 as TInt | TFloat - ); - default: - throw Error(`Should not be reached.`); - } - } - } - - export class EqualsElement extends RelationOperationElement { - constructor() { - super('equals', '=='); - } - } - - export class GreaterThanElement extends RelationOperationElement { - constructor() { - super('greater-than', '>'); - } - } - - export class LessThanElement extends RelationOperationElement { - constructor() { - super('less-than', '<'); - } - } - - // -- Boolean Operators ------------------------------------------------------------------------ - - abstract class BooleanOperationElement extends BinaryOperationElement { - constructor(elementName: string, operator: TBoolOp) { - super(elementName, 'TBoolean', operator, { - operand_1: ['TBoolean'], - operand_2: ['TBoolean'] - }); - } - - getData(props: { - args: { - operand_1: TPrimitive; - operand_2: TPrimitive; - }; - }): TPrimitive { - if (!(props.args.operand_1 instanceof TBoolean)) { - throw Error(`"operand_1" can only be of type TBoolean.`); - } - if (!(props.args.operand_2 instanceof TBoolean)) { - throw Error(`"operand_2" can only be of type TBoolean.`); - } - - switch (this._operator) { - case '&&': - return TBoolean.and( - props.args.operand_1 as TBoolean, - props.args.operand_2 as TBoolean - ); - case '||': - return TBoolean.or( - props.args.operand_1 as TBoolean, - props.args.operand_2 as TBoolean - ); - default: - throw Error(`Should not be reached.`); - } - } - } - - export class AndElement extends BooleanOperationElement { - constructor() { - super('and', '&&'); - } - } - - export class OrElement extends BooleanOperationElement { - constructor() { - super('or', '||'); - } - } -} diff --git a/src/archive/syntax-core/program-elements/valueElements.test.ts b/src/archive/syntax-core/program-elements/valueElements.test.ts deleted file mode 100644 index f9ee090..0000000 --- a/src/archive/syntax-core/program-elements/valueElements.test.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { ValueElement } from './valueElements'; - -describe('namespace ValueElement', () => { - let intValElem: ValueElement.IntElement; - let floatValElem: ValueElement.FloatElement; - let charValElem: ValueElement.CharElement; - let stringValElem: ValueElement.StringElement; - - describe('instantiation and value verification', () => { - test('instantiate a IntElement with 5 and expect 5 to be data', () => { - intValElem = new ValueElement.IntElement(5); - expect(intValElem.getData({}).value).toBe(5); - }); - test('instantiate a FloatElement with 2.71828 and expect 2.71828 to be data', () => { - floatValElem = new ValueElement.FloatElement(2.71828); - expect(floatValElem.getData({}).value).toBe(2.71828); - }); - test('instantiate a CharElement with 97 and expect "a" to be data', () => { - charValElem = new ValueElement.CharElement(97); - expect(charValElem.getData({}).value).toBe('a'); - }); - test('instantiate a StringElement with "string" and expect "string" to be data', () => { - stringValElem = new ValueElement.StringElement('string'); - expect(stringValElem.getData({}).value).toBe('string'); - }); - test('instantiate a TrueElement and expect true to be data', () => { - expect(new ValueElement.TrueElement().getData({}).value).toBe(true); - }); - test('instantiate a FalseElement and expect false to be data', () => { - expect(new ValueElement.FalseElement().getData({}).value).toBe(false); - }); - }); - - describe('value updation', () => { - test('update IntElement value to 2 and expect 2 to be data', () => { - intValElem.update(2); - expect(intValElem.getData({}).value).toBe(2); - }); - - test('update FloatElement value to 3.1415 and expect 3.1415 to be data', () => { - floatValElem.update(3.1415); - expect(floatValElem.getData({}).value).toBe(3.1415); - }); - - test('update CharElement value to "x" and expect "x" to be data', () => { - charValElem.update('x'); - expect(charValElem.getData({}).value).toBe('x'); - }); - - test('update StringElement value to "another" and expect "another" to be data', () => { - stringValElem.update('another'); - expect(stringValElem.getData({}).value).toBe('another'); - }); - }); -}); diff --git a/src/archive/syntax-core/program-elements/valueElements.ts b/src/archive/syntax-core/program-elements/valueElements.ts deleted file mode 100644 index a9d6b01..0000000 --- a/src/archive/syntax-core/program-elements/valueElements.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { TPrimitive } from '../@types/primitiveTypes'; -import { TInt, TFloat, TChar, TString, TBoolean } from '../primitiveElements'; -import { ArgumentDataElement } from '../structureElements'; -import { SymbolTable } from '../symbolTable'; -import { DataElement } from './dataElements'; - -type TDataElem = - | DataElement.IntDataElement - | DataElement.FloatDataElement - | DataElement.CharDataElement - | DataElement.StringDataElement - | DataElement.BooleanDataElement; -// | DataElement.AnyDataElement; - -/** - * @abstract All ValueElements are ArgumentDataElements. - */ -export namespace ValueElement { - abstract class ValueElement extends ArgumentDataElement { - protected _data: TPrimitive; - - constructor(elementName: string, data: TPrimitive) { - super(elementName, data.type); - this._data = data; - } - - /** @override */ - getData(props: { symbolTable?: SymbolTable }) { - return this._data; - } - } - - /** ArgumentDataElement wrapper for primitive TInt type. */ - export class IntElement extends ValueElement { - constructor(value: number) { - super('int', new TInt(value)); - } - - update(value: number) { - this._data.value = value; - } - } - - /** ArgumentDataElement wrapper for primitive TFloat type. */ - export class FloatElement extends ValueElement { - constructor(value: number) { - super('float', new TFloat(value)); - } - - update(value: number) { - this._data.value = value; - } - } - - /** ArgumentDataElement wrapper for primitive TChar type. */ - export class CharElement extends ValueElement { - constructor(value: string | number) { - super('char', new TChar(value)); - } - - update(value: string | number) { - this._data.value = value; - } - } - - /** ArgumentDataElement wrapper for primitive TString type. */ - export class StringElement extends ValueElement { - constructor(value: string) { - super('string', new TString(value)); - } - - update(value: string) { - this._data.value = value; - } - } - - /** ArgumentDataElement wrapper for primitive TBoolean(true) type. */ - export class TrueElement extends ValueElement { - constructor() { - super('true', new TBoolean(true)); - } - } - - /** ArgumentDataElement wrapper for primitive TBoolean(false) type. */ - export class FalseElement extends ValueElement { - constructor() { - super('false', new TBoolean(false)); - } - } - - abstract class DataValueElement extends ValueElement { - constructor(elementName: string, symbol: TString) { - super(elementName, symbol); - } - - update(value: string) { - this._data.value = value; - } - - /** @override */ - getData(props: { symbolTable: SymbolTable }) { - return props.symbolTable.getSymbolData(this._data as TString); - } - } - - export class IntDataValueElement extends DataValueElement { - constructor(symbol: TString) { - super('data-value-int', symbol); - } - } - - export class FloatDataValueElement extends DataValueElement { - constructor(symbol: TString) { - super('data-value-float', symbol); - } - } - - export class CharDataValueElement extends DataValueElement { - constructor(symbol: TString) { - super('data-value-char', symbol); - } - } - - export class StringDataValueElement extends DataValueElement { - constructor(symbol: TString) { - super('data-value-string', symbol); - } - } - - export class BooleanDataValueElement extends DataValueElement { - constructor(symbol: TString) { - super('data-value-boolean', symbol); - } - } -} diff --git a/src/archive/syntax-core/sample.ts b/src/archive/syntax-core/sample.ts deleted file mode 100644 index 555b5d4..0000000 --- a/src/archive/syntax-core/sample.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { DataElement } from './programElements/dataElements'; -import { ValueElement } from './programElements/valueElements'; -import { ConditionalElement } from './programElements/conditionalElements'; -import { OperationElement } from './programElements/operationElements'; -import { MiscellaneousElement } from './programElements/miscellaneousElements'; -import { BlockElement, InstructionElement, StatementElement } from './structureElements'; -import { LoopElement } from './programElements/loopElements'; - -// ---- Execution utilities ------------------------------------------------------------------------ - -function executeStatement(instruction: InstructionElement) { - instruction.onVisit(); -} - -function executeBlock(instruction: BlockElement) { - instruction.onVisit(); - let next: InstructionElement | null = instruction.childHead; - while (next !== null) { - if (next instanceof StatementElement) { - executeStatement(next); - } else if (next instanceof BlockElement) { - executeBlock(next); - } - next = next.next; - } - instruction.onExit(); -} - -function executeInstruction(instruction: InstructionElement | null) { - if (instruction instanceof StatementElement) { - executeStatement(instruction); - } else if (instruction instanceof BlockElement) { - executeBlock(instruction); - } else { - return; - } - executeInstruction(instruction.next); -} - -// ---- Sample program ----------------------------------------------------------------------------- - -/** - * Prints the n-th fibonacci number starting from 0 - * @param n - value of n, the required fibonacci number's index - */ -function fibN(N: number) { - /* - Implementation of: - - LINE 0: void fibN(int N) { - LINE 1: int n = N; - LINE 2: if (n == 0 || n == 1) { - LINE 3: print(n); - LINE 4: } else { - LINE 5: int a = 0; - LINE 6: int b = 1; - LINE 7: int c = 0; - LINE 8: for (int i = 1; i <= n - 1; i++) { - LINE 9: c = a + b; - LINE 10: a = b; - LINE 11: b = c; - LINE 12: } - LINE 13: print(b); - LINE 14: } - LINE 15: } - - */ - - // As per the code above, all data elements are integers, however floats have been used below - // since operator overloading hasn't been handled effectively so far. Functionality is - // effectively analogous though. - - // LINE 1: - // ------------------------------------------------------------------------- - // Create a 'data' element of type 'TFloat' - const nData = new DataElement.FloatDataElement(); - // Assign identifier as 'n' (not being used yet) - nData.argIdentifier = new ValueElement.StringElement('n'); - // Assign N (argument to function) as value argument - nData.argValue = new ValueElement.IntElement(N); - - // LINE 2: - // ------------------------------------------------------------------------- - // Create an 'if-else' block element - const ifElse = new ConditionalElement.IfElseElement(); - // Create an 'or' expression element - const orElem = new OperationElement.OrElement(); - // Create an 'equals' expression element - const eq_1 = new OperationElement.EqualsElement(); - // Create another 'equals' expression element - const eq_2 = new OperationElement.EqualsElement(); - // Assign 'value' element corresponding to 'n' as first operand of one of the 'equals' element - eq_1.argOperand_1 = nData.valueElement; - // Assign '0' as second operand of the 'equals' element - eq_1.argOperand_2 = new ValueElement.IntElement(0); - // Assign 'value' element corresponding to 'n' as first operand of the other 'equals' element - eq_2.argOperand_1 = nData.valueElement; - // Assign '1' as second operand of the 'equals' element - eq_2.argOperand_2 = new ValueElement.IntElement(1); - // Assign one of the 'equals' element as first operand of the 'or' element - orElem.argOperand_1 = eq_1; - // Assign the other 'equals' element as second operand of the 'or' element - orElem.argOperand_2 = eq_2; - // Assign the 'or' element as condition argument of the 'if-else' element - ifElse.argCondition = orElem; - - // LINE 3: - // ------------------------------------------------------------------------- - // Create a 'print' element - const print_1 = new MiscellaneousElement.PrintElement(); - // Assign 'value' element of 'n' as message argument of the 'print' element - print_1.argMessage = nData.valueElement; - - // LINE 5: - // ------------------------------------------------------------------------- - // Create a 'data' element of type 'TFloat' - const aData = new DataElement.FloatDataElement(); - // Assign identifier as 'a' (not being used yet) - aData.argIdentifier = new ValueElement.StringElement('a'); - // Assign '0' as value argument - aData.argValue = new ValueElement.IntElement(0); - - // LINE 6: - // ------------------------------------------------------------------------- - // Create a 'data' element of type 'TFloat' - const bData = new DataElement.FloatDataElement(); - // Assign identifier as 'b' (not being used yet) - bData.argIdentifier = new ValueElement.StringElement('b'); - // Assign '1' as value argument - bData.argValue = new ValueElement.IntElement(1); - - // LINE 7: - // ------------------------------------------------------------------------- - // Create a 'data' element of type 'TFloat' - const cData = new DataElement.FloatDataElement(); - // Assign identifier as 'c' (not being used yet) - cData.argIdentifier = new ValueElement.StringElement('c'); - // Assign '0' as value argument - cData.argValue = new ValueElement.IntElement(0); - - // LINE 8: - // ------------------------------------------------------------------------- - // Create a 'repeat' element - const repeat = new LoopElement.RepeatLoopElement(); - // Create a 'subtraction' expression element - const sub = new OperationElement.SubtractElement(); - // Assign 'value' element corresponding to 'n' as first operand of the 'subtraction' element - sub.argOperand_1 = nData.valueElement; - // Assign '1' as second operand of the 'subtraction' element - sub.argOperand_2 = new ValueElement.IntElement(1); - // Assign the 'subtraction' element as value argument of the 'repeat' element - repeat.argValue = sub; - - // Create a 'value' element corresponding to the data element 'a' - const a_data_value = aData.valueElement; - // Create a 'value' element corresponding to the data element 'b' - const b_data_value = bData.valueElement; - // Create a 'value' element corresponding to the data element 'c' - const c_data_value = cData.valueElement; - - // LINE 9: - // ------------------------------------------------------------------------- - // Create an 'update' data element of type 'TFloat' - const update_c = new DataElement.UpdateFloatDataElement(); - // Assign 'value' element corresponding to 'a' as current value argument of the 'update' element - update_c.argCurrValue = cData.valueElement; - // Create an 'addition' expression element - const add = new OperationElement.AddElement(); - // Assign 'value' element corresponding to 'a' as first operand of the 'addition' element - add.argOperand_1 = a_data_value; - // Assign 'value' element corresponding to 'b' as second operand of the 'addition' element - add.argOperand_2 = b_data_value; - // Assign the 'addition' element as new value argument of the 'update' element - update_c.argNewValue = add; - - // LINE 10: - // ------------------------------------------------------------------------- - // Create an 'update' data element of type 'TFloat' - const update_a = new DataElement.UpdateFloatDataElement(); - // Assign 'value' element corresponding to 'a' as current value argument of the 'update' element - update_a.argCurrValue = a_data_value; - // Assign 'value' element corresponding to 'b' as new value argument of the 'update' element - update_a.argNewValue = b_data_value; - - // LINE 11: - // ------------------------------------------------------------------------- - // Create an 'update' data element of type 'TFloat' - const update_b = new DataElement.UpdateFloatDataElement(); - // Assign 'value' element corresponding to 'b' as current value argument of the 'update' element - update_b.argCurrValue = b_data_value; - // Assign 'value' element corresponding to 'c' as new value argument of the 'update' element - update_b.argNewValue = c_data_value; - - // LINE 13: - // ------------------------------------------------------------------------- - // Create a 'print' element - const print_2 = new MiscellaneousElement.PrintElement(); - // Assign 'value' element of 'b' as message argument of the 'print' element - print_2.argMessage = bData.valueElement; - - // ------------------------------------------------------------------------- - // Connecting the elements linearly to form the instruction pipeline of the program - // ------------------------------------------------------------------------- - // LINE 1 is followed by LINE 2 - nData.next = ifElse; - // LINE 2 ('if-else' element)'s head instruction in first (of 2) block ('if') is LINE 3 - ifElse.setChildHead(0, print_1); - // LINE 2 ('if-else' element)'s head instruction in second (of 2) block ('else') is LINE 5 - ifElse.setChildHead(1, aData); - // LINE 5 is followed by LINE 6 - aData.next = bData; - // LINE 6 is followed by LINE 7 - bData.next = cData; - // LINE 7 is followed by LINE 8 - cData.next = repeat; - // LINE 8 ('repeat' element)'s head instruction in first (of 1) block is LINE 9 - repeat.setChildHead(0, update_c); - // LINE 9 is followed by LINE 10 - update_c.next = update_a; - // LINE 10 is followed by LINE 11 - update_a.next = update_b; - // LINE 11 is last instruction in its parent block - update_b.next = null; - // LINE 8 ('repeat' element) is followed by LINE 13 - repeat.next = print_2; - // LINE 13 is last instruction in its parent block - print_2.next = null; - // LINE 2 ('if-else' element)'s instruction is last instruction in its parent block - ifElse.next = null; - - // Dummy separator for readability - console.log(`----- fib(${N})`); - // Execute the pipeline starting from LINE 1 - executeInstruction(nData); -} - -// ---- Invoke the function call for the sample program -------------------------------------------- - -fibN(0); // prints the 0th fibonacci number = 0 -fibN(1); // prints the 1st fibonacci number = 1 -fibN(2); // prints the 2nd fibonacci number = 1 -fibN(3); // prints the 3rd fibonacci number = 2 -fibN(4); // prints the 4th fibonacci number = 3 -fibN(5); // prints the 5th fibonacci number = 5 -fibN(6); // prints the 6th fibonacci number = 8 -fibN(7); // prints the 7th fibonacci number = 13 -fibN(8); // prints the 8th fibonacci number = 21 -fibN(9); // prints the 9th fibonacci number = 34 diff --git a/src/archive/syntax-core/structureElements.test.ts b/src/archive/syntax-core/structureElements.test.ts deleted file mode 100644 index 4d3dc00..0000000 --- a/src/archive/syntax-core/structureElements.test.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { TInt, TFloat, TChar, TString, TBoolean } from './primitiveElements'; -import { - ArgumentDataElement, - ArgumentExpressionElement, - StatementElement, - BlockElement -} from './structureElements'; - -/** Dummy class to extend abstract class ArgumentDataElement. */ -class CArgumentDataElement extends ArgumentDataElement { - getData() { - return new TInt(5); - } -} -/** Dummy class to extend abstract class ArgumentExpressionElement. */ -class CArgumentExpressionElement extends ArgumentExpressionElement { - getData() { - return new TInt(5); - } -} -/** Dummy class to extend abstract class StatementElement. */ -class CStatementElement extends StatementElement { - onVisit() {} -} -/** Dummy class to extend abstract class BlockElement. */ -class CBlockElement extends BlockElement { - onVisit() {} - onExit() {} -} - -let argData: ArgumentDataElement; -let argExpr: ArgumentExpressionElement; - -describe('class ArgumentDataElement', () => { - test("intialize dummy ArgumentDataElement's subclass with valid arbitrary arguments and verify contents", () => { - argData = new CArgumentDataElement('myArgData', 'TInt'); - expect(argData.elementName).toBe('myArgData'); - expect(argData.type).toBe('TInt'); - expect(argData.argType).toBe('data'); - expect(argData.getData({}).value).toBe(5); - }); -}); - -describe('class ArgumentExpressionElement', () => { - test("initialize dummy ArgumentExpressionElement's subclass with valid arbitrary arguments and verify contents", () => { - argExpr = new CArgumentExpressionElement('myArgExpression', 'TInt'); - expect(argExpr.elementName).toBe('myArgExpression'); - expect(argExpr.type).toBe('TInt'); - expect(argExpr.argType).toBe('expression'); - expect(argExpr.getData({}).value).toBe(5); - }); -}); - -let stmntElem: StatementElement; - -describe('class StatementElement', () => { - test('initialize object with no argument constraints and expect error on fetching argument labels', () => { - stmntElem = new CStatementElement('yourStatement'); - expect(() => stmntElem.args.argLabels).toThrowError( - `"yourStatement" does not take arguments.` - ); - }); - - test('initialize object with argument constraints and verify initial contents', () => { - stmntElem = new CStatementElement('myStatement', { - arg_1: ['TInt', 'TChar'], - arg_2: ['TString'] - }); - try { - expect(stmntElem.args.argLabels).toEqual(['arg_1', 'arg_2']); - } catch (e) { - console.error(e); - } - }); - - test('assign valid argument for valid argument label and verify', () => { - try { - stmntElem.args.setArg('arg_1', argData); - const arg = stmntElem.args.getArg('arg_1'); - if (arg !== null) { - expect(arg.getData({}).value).toEqual(5); - } - } catch (e) { - console.error(e); - } - }); - - test('reset previous argument label with null and verify', () => { - try { - stmntElem.args.setArg('arg_1', null); - expect(stmntElem.args.getArg('arg_1')).toBe(null); - } catch (e) { - console.error(e); - } - }); - - test('try to fetch argument for invalid argument label and expect error', () => { - expect(() => stmntElem.args.getArg('arg_3')).toThrowError( - '"arg_3" does not exist for "myStatement".' - ); - }); - - test('try to assign argument for invalid argument label and expect error', () => { - expect(() => stmntElem.args.setArg('arg_3', null)).toThrowError( - '"arg_3" does not exist for "myStatement".' - ); - }); - - test('try to assign invalid return-type argument for valid argument label and expect error', () => { - expect(() => stmntElem.args.setArg('arg_2', argData)).toThrowError( - '"TInt" is not a valid type for "arg_2".' - ); - }); -}); - -describe('class BlockElement', () => { - let blockElem: BlockElement; - - test('initialize object with argument constraints and verify initial contents', () => { - blockElem = new CBlockElement('myBlock', 1, { arg_1: ['TBoolean'] }); - expect(blockElem.next).toBe(null); - if (blockElem.args !== null) { - expect(blockElem.args.argLabels).toEqual(['arg_1']); - } else { - throw Error('object should not be null'); - } - }); - - // Rest are same as (above) StatementElement tests, therefore redundant to add. - - test('assign an instruction to innerHeads and verify', () => { - blockElem.setChildHead(0, stmntElem); - const head = blockElem.getChildHead(0); - if (head !== null) { - expect(head.elementName).toBe('myStatement'); - } - }); - - test('fetch childHead and expect to be null', () => { - expect(blockElem.childHead).toBe(null); - }); -}); diff --git a/src/archive/syntax-core/structureElements.ts b/src/archive/syntax-core/structureElements.ts deleted file mode 100644 index bdc8e78..0000000 --- a/src/archive/syntax-core/structureElements.ts +++ /dev/null @@ -1,262 +0,0 @@ -import { TPrimitiveName, TPrimitive } from './@types/primitiveTypes'; -import * as TS from './@types/structureElements'; -import { Context } from './context'; -import { SymbolTable } from './symbolTable'; - -// ---- Syntax Element ----------------------------------------------------------------------------- - -/** - * Super class for all syntax elements. Holds the element name. - * Will be tied to the corresponding UI element. - */ -export abstract class SyntaxElement implements TS.ISyntaxElement { - private _elementName: string; - - constructor(elementName: string) { - this._elementName = elementName; - } - - get elementName() { - return this._elementName; - } -} - -// ---- Argument Map ------------------------------------------------------------------------------- - -/** ADT that handles the mapping and interfacing of arguments to expressions/instructions. */ -class ArgumentMap implements TS.IArgumentMap { - private _elementName: string; - private _argMap: { [key: string]: ArgumentElement | null } = {}; - private _argTypeMap: { [key: string]: TPrimitiveName[] } | null = null; - - constructor(elementName: string, constraints: { [key: string]: TPrimitiveName[] } | null) { - this._elementName = elementName; - if (constraints === null) { - return this; - } else { - this._argTypeMap = constraints; - Object.keys(this._argTypeMap).forEach((argLabel) => (this._argMap[argLabel] = null)); - } - } - - /** - * Checks if and argument label exists for the corresponding instruction/expression. - * @throws Error - */ - private _validateArgLabel(argLabel: string): void { - if (this._argTypeMap === null) { - throw Error(`"${this._elementName}" does not take arguments.`); - } - if (Object.keys(this._argTypeMap).indexOf(argLabel) === -1) { - throw Error(`"${argLabel}" does not exist for "${this._elementName}".`); - } - } - - /** - * Type-checks the type of the argument element with the constraints of the argument label. - * @throws Error - */ - private _validateArg(argLabel: string, arg: ArgumentElement | null): void { - this._validateArgLabel(argLabel); - if ( - arg !== null && - this._argTypeMap !== null && - this._argTypeMap[argLabel].indexOf(arg.type) === -1 - ) { - // Allow higher type casting. - if ( - !( - (arg.type === 'TInt' && this._argTypeMap[argLabel].indexOf('TFloat') !== -1) || - (arg.type === 'TChar' && this._argTypeMap[argLabel].indexOf('TString') !== -1) - ) - ) { - throw Error(`"${arg.type}" is not a valid type for "${argLabel}".`); - } - } - } - - /** @throws Error */ - setArg(argLabel: string, arg: ArgumentElement | null): void { - this._validateArg(argLabel, arg); - this._argMap[argLabel] = arg; - } - - /** @throws Error */ - getArg(argLabel: string): ArgumentElement | null { - this._validateArgLabel(argLabel); - return this._argMap[argLabel]; - } - - /** @throws Error */ - get argLabels(): string[] { - if (this._argTypeMap === null) { - throw Error(`"${this._elementName}" does not take arguments.`); - } - return Object.keys(this._argTypeMap); - } -} - -// ---- Argument Element --------------------------------------------------------------------------- - -export abstract class ArgumentElement extends SyntaxElement implements TS.IArgumentElement { - private _argType: 'data' | 'expression'; - private _type: TPrimitiveName; - - constructor(elementName: string, argType: 'data' | 'expression', type: TPrimitiveName) { - super(elementName); - this._argType = argType; - this._type = type; - } - - get argType() { - return this._argType; - } - - get type() { - return this._type; - } - - abstract getData(props: { - args?: { [key: string]: TPrimitive }; - context?: Context; - symbolTable?: SymbolTable; - }): TPrimitive; -} - -export abstract class ArgumentDataElement - extends ArgumentElement - implements TS.IArgumentDataElement { - constructor(elementName: string, type: TPrimitiveName) { - super(elementName, 'data', type); - } -} - -export abstract class ArgumentExpressionElement - extends ArgumentElement - implements TS.IArgumentExpressionElement { - private _args: ArgumentMap; - - constructor( - elementName: string, - type: TPrimitiveName, - // Certain argument expressions might not take arguments, instead could work on the context. - constraints?: { [key: string]: TPrimitiveName[] } - ) { - super(elementName, 'expression', type); - this._args = new ArgumentMap(elementName, !constraints ? null : constraints); - } - - get args() { - return this._args; - } -} - -// ---- Instruction Element ------------------------------------------------------------------------ - -export abstract class InstructionElement extends SyntaxElement implements TS.IInstructionElement { - private _next: InstructionElement | null = null; - private _args: ArgumentMap; - - constructor( - elementName: string, - // Certain instructions might not take arguments, instead could work on the context. - constraints?: { [key: string]: TPrimitiveName[] } - ) { - super(elementName); - this._args = new ArgumentMap(elementName, !constraints ? null : constraints); - } - - set next(next: InstructionElement | null) { - this._next = next; - } - - get next() { - return this._next; - } - - get args() { - return this._args; - } - - /** Executes when element is encountered by MB program interpretor. */ - abstract onVisit(props: { - args?: { [key: string]: TPrimitive }; - context?: Context; - symbolTable?: SymbolTable; - }): void; - - /** Whether current instruction is a dummy instruction. */ - get isDummy() { - return this.elementName === 'dummy'; - } -} - -/** To be treated as a terminating or non-existing instruction. */ -export class DummyElement extends InstructionElement { - constructor() { - super('dummy'); - } - - onVisit() {} -} - -export abstract class StatementElement extends InstructionElement implements TS.IStatementElement { - constructor(elementName: string, constraints?: { [key: string]: TPrimitiveName[] }) { - super(elementName, constraints); - } -} - -export abstract class BlockElement extends InstructionElement implements TS.IBlockElement { - private _blocksCount: number; - private _childHeads: (InstructionElement | null)[] = []; - private _childHead: InstructionElement | null; - - /** @throws Error */ - constructor( - elementName: string, - blocksCount: number, - constraints?: { [key: string]: TPrimitiveName[] } - ) { - super(elementName, constraints); - if (blocksCount < 1) { - throw Error('Number of inner blocks cannot be less than 1.'); - } - this._blocksCount = blocksCount; - for (let i = 0; i < blocksCount; i++) { - this._childHeads.push(null); - } - this._childHead = this._childHeads[0]; - } - - /** @throws Error */ - setChildHead(index: number, childHead: InstructionElement | null) { - if (index < 0 || index >= this._blocksCount) { - throw Error(`Index must lie in [0, ${this._blocksCount - 1}].`); - } - this._childHeads[index] = childHead; - } - - /** @throws Error */ - getChildHead(index: number) { - if (index < 0 || index >= this._blocksCount) { - throw Error(`Index must lie in [0, ${this._blocksCount - 1}].`); - } - return this._childHeads[index]; - } - - /** @param childHead must always be one of the values of `_childHeads`. */ - set childHead(childHead: InstructionElement | null) { - this._childHead = childHead; - } - - get childHead() { - return this._childHead; - } - - /** Executes after instructions inside the block have been executed. */ - abstract onExit(props: { - args?: { [key: string]: TPrimitive }; - context?: Context; - symbolTable?: SymbolTable; - }): void; -} diff --git a/src/archive/syntax-core/symbolTable.ts b/src/archive/syntax-core/symbolTable.ts deleted file mode 100644 index 5068ea8..0000000 --- a/src/archive/syntax-core/symbolTable.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { TPrimitive, TPrimitiveName } from './@types/primitiveTypes'; -import { ISymbolTable } from './@types/symbolTable'; -import { TBoolean, TString } from './primitiveElements'; - -export class SymbolTable implements ISymbolTable { - private _table: { - [key: string]: { - type: TPrimitiveName; - data: TPrimitive; - }; - } = {}; - - constructor() {} - - symbolExists(symbol: TString) { - return new TBoolean(symbol.value in this._table); - } - - addSymbol(symbol: TString, data: TPrimitive) { - if (symbol.value in this._table) { - throw Error(`Duplicate symbol: symbol "${symbol.value}" already exists.`); - } - this._table[symbol.value] = { - type: data.type, - data - }; - } - - getSymbolData(symbol: TString) { - if (!(symbol.value in this._table)) { - throw Error(`Invalid symbol: symbol "${symbol}" does not exist.`); - } - return (this._table[symbol.value] as { - type: TPrimitiveName; - data: TPrimitive; - }).data; - } -} diff --git a/src/archive/syntax-core/syntaxElementFactory.test.ts b/src/archive/syntax-core/syntaxElementFactory.test.ts deleted file mode 100644 index dd37ae4..0000000 --- a/src/archive/syntax-core/syntaxElementFactory.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { createSyntaxElement } from './syntaxElementFactory'; -import { ValueElement } from './program-elements/valueElements'; - -describe('createSyntaxElement utililty', () => { - test("instantiate an element that doesn't take arguments and verify object and type", () => { - const elem = createSyntaxElement('start'); - expect(elem.element.elementName).toBe('start'); - expect(elem.type).toBe('block'); - }); - - test('instantiate (with valid arguments) an element that takes arguments and verify object and type', () => { - const elem = createSyntaxElement('int', 5); - expect(elem.element.elementName).toBe('int'); - expect(elem.type).toBe('arg-data'); - expect((elem.element as ValueElement.IntElement).getData({}).value).toBe(5); - }); - - test('attempt to instantiate (with invalid arguments) an element that takes arguments and expect error', () => { - expect(() => { - const elem = createSyntaxElement('int', 'string'); - const v = (elem.element as ValueElement.IntElement).getData({}); - expect(v.value).toBe('string'); - }).toThrowError('Instantiation failed: invalid argument supplied for element "int".'); - }); - - test('attempt to instantiate (without arguments) an element that takes arguments and expect error', () => { - expect(() => createSyntaxElement('int')).toThrowError( - 'Instantiation failed: invalid argument supplied for element "int".' - ); - }); -}); diff --git a/src/archive/syntax-core/syntaxElementFactory.ts b/src/archive/syntax-core/syntaxElementFactory.ts deleted file mode 100644 index f418624..0000000 --- a/src/archive/syntax-core/syntaxElementFactory.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { - ArgumentDataElement, - InstructionElement, - StatementElement, - SyntaxElement -} from './structureElements'; - -import { ActionBlock, StartBlock } from './AST'; -import { ValueElement } from './program-elements/valueElements'; -import { DataElement } from './program-elements/dataElements'; -import { OperationElement } from './program-elements/operationElements'; -import { ConditionalElement } from './program-elements/conditionalElements'; -import { LoopElement } from './program-elements/loopElements'; -import { MiscellaneousElement } from './program-elements/miscellaneousElements'; - -export const syntaxElementMap = { - 'start': StartBlock, - 'action': ActionBlock, - // 'int': ValueElement.IntElement, - // 'float': ValueElement.FloatElement, - // 'char': ValueElement.CharElement, - // 'string': ValueElement.StringElement, - 'true': ValueElement.TrueElement, - 'false': ValueElement.FalseElement, - // 'data-value-int': ValueElement.IntDataValueElement, - // 'data-value-float': ValueElement.FloatDataValueElement, - // 'data-value-char': ValueElement.CharDataValueElement, - // 'data-value-string': ValueElement.StringDataValueElement, - // 'data-value-boolean': ValueElement.BooleanDataValueElement, - 'data-int': DataElement.IntDataElement, - 'data-float': DataElement.FloatDataElement, - 'data-char': DataElement.CharDataElement, - 'data-string': DataElement.StringDataElement, - 'data-boolean': DataElement.BooleanDataElement, - 'update-data-int': DataElement.UpdateIntDataElement, - 'update-data-float': DataElement.UpdateFloatDataElement, - 'update-data-char': DataElement.UpdateCharDataElement, - 'update-data-string': DataElement.UpdateStringDataElement, - 'update-data-boolean': DataElement.UpdateBooleanDataElement, - 'add': OperationElement.AddElement, - 'subtract': OperationElement.SubtractElement, - 'multiply': OperationElement.MultiplyElement, - 'divide': OperationElement.DivideElement, - 'mod': OperationElement.ModElement, - 'equals': OperationElement.EqualsElement, - 'greater-than': OperationElement.GreaterThanElement, - 'less-than': OperationElement.LessThanElement, - 'and': OperationElement.AndElement, - 'or': OperationElement.OrElement, - 'if': ConditionalElement.IfThenElement, - 'if-else': ConditionalElement.IfElseElement, - 'repeat': LoopElement.RepeatLoopElement, - 'print': MiscellaneousElement.PrintElement -}; - -type TValueElementName = 'int' | 'float' | 'char' | 'string'; -export type TSyntaxElementName = keyof typeof syntaxElementMap | TValueElementName; - -/** - * Instantiates a syntax element and returns the object along with its super-class type. - * @param elementName - name of the supported element. - * @param arg - parameter for instantiation (value elements require one). - */ -export function createSyntaxElement( - elementName: TSyntaxElementName, - arg?: unknown -): { - element: SyntaxElement; - type: 'statement' | 'block' | 'arg-data' | 'arg-exp'; -} { - try { - let element: SyntaxElement; - switch (elementName) { - case 'int': - if (typeof arg !== 'number') throw Error(); - element = new ValueElement.IntElement(arg as number); - break; - case 'float': - if (typeof arg !== 'number') throw Error(); - element = new ValueElement.FloatElement(arg as number); - break; - case 'char': - if (typeof arg !== 'number' && typeof arg !== 'string') throw Error(); - element = new ValueElement.CharElement(arg as number | string); - break; - case 'string': - if (typeof arg !== 'string') throw Error(); - element = new ValueElement.StringElement(arg as string); - break; - default: - element = new syntaxElementMap[elementName](); - } - const type = - element instanceof InstructionElement - ? element instanceof StatementElement - ? 'statement' - : 'block' - : element instanceof ArgumentDataElement - ? 'arg-data' - : 'arg-exp'; - return { element, type }; - } catch (e) { - throw Error( - `Instantiation failed: invalid argument supplied for element "${elementName}".` - ); - } -} diff --git a/tsconfig.json b/tsconfig.json index 43c6e04..48b4bcb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "include": ["./src/**/*"], - "exclude": ["./src/archive/*"], + "exclude": [], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From decb8269679781c1f92926afc0c6fa3b86a4b2a5 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Mon, 24 Jan 2022 23:46:44 +0530 Subject: [PATCH 159/176] refactor: aggregate modules --- src/index.ts | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index a420803..7f21145 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,49 @@ -console.log('Hello World!'); +// -- execution ------------------------------------------------------------------------------------ + +import * as interpreter from './execution/interpreter'; +import * as parser from './execution/parser'; +import * as symbolTable from './execution/symbolTable'; + +export const engine = { + interpreter, + parser, + symbolTable, +}; + +// -- syntax --------------------------------------------------------------------------------------- + +import * as warehouse from './syntax/warehouse/warehouse'; +import * as syntaxTree from './syntax/tree/syntaxTree'; +import * as specification from './syntax/specification/specification'; + +export const syntax = { + warehouse, + specification, + tree: syntaxTree, +}; + +// -- library -------------------------------------------------------------------------------------- + +import * as libSpecification from './library/specification'; +import * as elementBox from './library/elements/elementBox'; +import * as elementBoxIdentifier from './library/elements/elementBoxIdentifier'; +import * as elementConditional from './library/elements/elementConditional'; +import * as elementLoop from './library/elements/elementLoop'; +import * as elementOperatorMath from './library/elements/elementOperatorMath'; +import * as elementPrint from './library/elements/elementPrint'; +import * as elementProgram from './library/elements/elementProgram'; +import * as elementValue from './library/elements/elementValue'; + +export const library = { + specification: libSpecification, + elements: { + elementBox, + elementBoxIdentifier, + elementConditional, + elementLoop, + elementOperatorMath, + elementPrint, + elementProgram, + elementValue, + }, +}; From dfcbdbebb892b2070a15f85edbc9e54e9ac5361c Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Tue, 25 Jan 2022 01:37:45 +0530 Subject: [PATCH 160/176] workflow: [linter] use GITHUB_TOKEN --- .github/workflows/linter.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 15b6343..c7e631d 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -68,6 +68,7 @@ jobs: - name: Lint new and edited files uses: github/super-linter/slim@v4 env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEFAULT_BRANCH: develop LINTER_RULES_PATH: / JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.json From 6c18cd1e7c5a9f3d3c4ab645d90973f694534a19 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 01:46:28 +0530 Subject: [PATCH 161/176] build: export type definitions --- package.json | 2 +- src/index.ts | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 2 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5ac8c55..b755e39 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "uuid": "^8.3.2" }, "scripts": { - "build": "rm -rf dist/* && tsc -p .", + "build": "rm -rf dist/* && tsc -p . && cp -R src/@types dist/@types", "test": "jest --passWithNoTests --verbose src/syntax src/library src/execution src/library", "check": "tsc --noEmit", "lint": "eslint src/**/*.ts && textlint --rule terminology --rule no-empty-section --rule no-dead-link README.md", diff --git a/src/index.ts b/src/index.ts index 7f21145..00d15e6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,3 +47,61 @@ export const library = { elementValue, }, }; + +// -- types ---------------------------------------------------------------------------------------- + +export { TData, TDataName } from './@types/data'; +export { + IElementSyntax, + IElementArgument, + IElementData, + IElementExpression, + IElementInstruction, + IElementStatement, + IElementBlock, +} from './@types/elements'; +export { + IVariable, + IParsedElementArgument, + IParsedElementInstruction, + IParsedElement, + TPCOverride, +} from './@types/execution'; +export { + TElementKind, + TElementType, + TElementNameData, + TElementNameExpression, + TElementNameStatement, + TElementNameBlock, + TElementName, + IElementSpecificationData, + IElementSpecificationEntryData, + IElementSpecificationExpression, + IElementSpecificationEntryExpression, + IElementSpecificationInstruction, + IElementSpecificationStatement, + IElementSpecificationEntryStatement, + IElementSpecificationBlock, + IElementSpecificationEntryBlock, + IElementSpecification, +} from './@types/specification'; +export { + ITreeSnapshotDataInput, + ITreeSnapshotData, + ITreeSnapshotExpressionInput, + ITreeSnapshotExpression, + ITreeSnapshotStatementInput, + ITreeSnapshotStatement, + ITreeSnapshotBlockInput, + ITreeSnapshotBlock, + ITreeSnapshotInput, + ITreeSnapshot, + ITreeNode, + ITreeNodeArgument, + ITreeNodeData, + ITreeNodeExpression, + ITreeNodeInstruction, + ITreeNodeStatement, + ITreeNodeBlock, +} from './@types/syntaxTree'; diff --git a/tsconfig.json b/tsconfig.json index 48b4bcb..fb71558 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["./src/**/*"], + "include": ["./src/index.ts"], "exclude": [], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From 7c2ec614f0d88654225f08e9b7f4fd236bc9cc7a Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 02:36:05 +0530 Subject: [PATCH 162/176] workflow: update workflow files - remove unnecessary comments - split CI workflow into two parallel jobs: Smoke Test and Regression Test --- .github/workflows/CI.yml | 68 +++++++++++++++++------------------- .github/workflows/linter.yml | 40 +++------------------ 2 files changed, 37 insertions(+), 71 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 68df6d1..9aa0772 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -1,69 +1,65 @@ --- -####################### -####################### -## CI GitHub Actions ## -####################### -####################### -name: Continuous Integration +# Documentation:https://help.github.com/en/articles/workflow-syntax-for-github-actions -# -# Documentation: -# https://help.github.com/en/articles/workflow-syntax-for-github-actions -# +name: Continuous Integration -############################# -# Start the job on all push # -############################# on: push: branches: [develop, main] pull_request: branches: [develop, main] -############### -# Set the Job # -############### jobs: - build: - # Name the Job - name: Continuous Integration - # Set the agent to run on - runs-on: ubuntu-latest + smoke-test: + name: Smoke Test strategy: matrix: + os: [ubuntu-latest] node-version: [16.x] - ################## - # Load all steps # - ################## + runs-on: ${{ matrix.os }} + steps: - ########################## - # Checkout the code base # - ########################## - name: Checkout the code base uses: actions/checkout@v2 with: - # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 - ################# - # Setup Node.js # - ################# - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - ################### - # Run yarn scripts # - ################### - - name: Install dependencies run: yarn install --frozen-lockfile - - name: Smoke test building the project + - name: Build the project run: yarn run build + regression-test: + name: Regression Test + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout the code base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Run unit tests run: yarn run test diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index c7e631d..9904237 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -1,70 +1,40 @@ --- -########################### -########################### -## Linter GitHub Actions ## -########################### -########################### -name: Super-Linter +# Documentation:https://help.github.com/en/articles/workflow-syntax-for-github-actions -# -# Documentation: -# https://help.github.com/en/articles/workflow-syntax-for-github-actions -# +name: Super-Linter -############################# -# Start the job on all push # -############################# on: push: branches: [develop, main] pull_request: branches: [develop, main] -############### -# Set the Job # -############### jobs: build: - # Name the Job name: Lint Code Base - # Set the agent to run on - runs-on: ubuntu-latest strategy: matrix: + os: [ubuntu-latest] node-version: [16.x] - ################## - # Load all steps # - ################## + runs-on: ${{ matrix.os }} + steps: - ########################## - # Checkout the code base # - ########################## - name: Checkout the code base uses: actions/checkout@v2 with: - # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 - ################# - # Setup Node.js # - ################# - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} - ######################## - # Install dependencies # - ######################## - name: Install dependencies run: | yarn install --frozen-lockfile - #################### - # Run Super Linter # - #################### - name: Lint new and edited files uses: github/super-linter/slim@v4 env: From f9cd546eef2127130b4ac75e7ca78354ceebcb15 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 05:47:09 +0530 Subject: [PATCH 163/176] elements: [docs] add TSDoc on the constructors --- src/syntax/elements/elementArgument.ts | 41 +++++++++++++-------- src/syntax/elements/elementInstruction.ts | 45 ++++++++++++----------- src/syntax/elements/elementSyntax.ts | 14 ++++--- 3 files changed, 57 insertions(+), 43 deletions(-) diff --git a/src/syntax/elements/elementArgument.ts b/src/syntax/elements/elementArgument.ts index 6d17eb8..80b32a1 100644 --- a/src/syntax/elements/elementArgument.ts +++ b/src/syntax/elements/elementArgument.ts @@ -22,18 +22,21 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme /** Stores the value this is returned by the argument element. */ protected _value: T; + /** + * @param name name of the argument element + * @param label display name of the instruction element + * @param type type (`Data`, `Expression`) of the argument element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + * @param returnType return types of the value returned by the argument element + * @param initialValue initial return value of the argument + */ constructor( - /** Name of the argument element. */ name: TElementName, - /** Display name of the instruction element. */ label: string, - /** Type (`Data`, `Expression`) of the argument element. */ type: 'Data' | 'Expression', - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, - /** Return types of the value returned by the argument element. */ returnType: TDataName[], - /** Initial return value of the argument. */ initialValue: T ) { super(name, label, 'Argument', type, argMap); @@ -60,16 +63,19 @@ export abstract class ElementArgument extends ElementSyntax implements IEleme * Data elements return a stored value. */ export abstract class ElementData extends ElementArgument implements IElementData { + /** + * @param name - name of the data element + * @param label - display name of the instruction element + * @param argMap - an object describing the type specification of each argument as a + * `argName: type[]` pair + * @param returnType - return types of the value returned by the argument element + * @param initialValue - initial return value of the argument + */ constructor( - /** Name of the data element. */ name: TElementName, - /** Display name of the instruction element. */ label: string, - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, - /** Return types of the value returned by the argument element. */ returnType: TDataName[], - /** Initial return value of the argument. */ initialValue: T ) { super(name, label, 'Data', argMap, returnType, initialValue); @@ -91,16 +97,19 @@ export abstract class ElementExpression extends ElementArgument implements IElementExpression { + /** + * @param name name of the expression element + * @param label display name of the instruction element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + * @param returnType return types of the value returned by the argument element + * @param initialValue initial return value of the argument + */ constructor( - /** Name of the expression element. */ name: TElementName, - /** Display name of the instruction element. */ label: string, - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] }, - /** Return types of the value returned by the argument element. */ returnType: TDataName[], - /** Initial return value of the argument. */ initialValue: T ) { super(name, label, 'Expression', argMap, returnType, initialValue); diff --git a/src/syntax/elements/elementInstruction.ts b/src/syntax/elements/elementInstruction.ts index 55a8a3b..4f0f96f 100644 --- a/src/syntax/elements/elementInstruction.ts +++ b/src/syntax/elements/elementInstruction.ts @@ -12,18 +12,21 @@ import { ElementSyntax } from './elementSyntax'; * Defines a generic instruction element. * * @classdesc - * Instruction elements execute logic and may operate on the parameters passed. Every statement element - * and block element needs to extend this class. + * Instruction elements execute logic and may operate on the parameters passed. Every statement + * element and block element needs to extend this class. */ export abstract class ElementInstruction extends ElementSyntax implements IElementInstruction { + /** + * @param name name of the instruction element + * @param label display name of the instruction element + * @param type type (`Statement`, `Block`) of the instruction element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + */ constructor( - /** Name of the instruction element. */ name: TElementName, - /** Display name of the instruction element. */ label: string, - /** Type (`Statement`, `Block`) of the instruction element. */ type: 'Statement' | 'Block', - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { super(name, label, 'Instruction', type, argMap); @@ -41,14 +44,13 @@ export abstract class ElementInstruction extends ElementSyntax implements IEleme * Statement elements execute one single logic. */ export abstract class ElementStatement extends ElementInstruction implements IElementStatement { - constructor( - /** Name of the statement element. */ - name: TElementName, - /** Display name of the instruction element. */ - label: string, - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ - argMap: { [key: string]: TDataName[] } - ) { + /** + * @param name name of the statement element + * @param label display name of the instruction element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + */ + constructor(name: TElementName, label: string, argMap: { [key: string]: TDataName[] }) { super(name, label, 'Statement', argMap); } } @@ -64,14 +66,13 @@ export abstract class ElementStatement extends ElementInstruction implements IEl * visiting the block element is restored. */ export abstract class ElementBlock extends ElementInstruction implements IElementBlock { - constructor( - /** Name of the block element. */ - name: TElementName, - /** Display name of the instruction element. */ - label: string, - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ - argMap: { [key: string]: TDataName[] } - ) { + /** + * @param name name of the block element + * @param label display name of the instruction element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + */ + constructor(name: TElementName, label: string, argMap: { [key: string]: TDataName[] }) { super(name, label, 'Block', argMap); } diff --git a/src/syntax/elements/elementSyntax.ts b/src/syntax/elements/elementSyntax.ts index 69b4798..285a3a6 100644 --- a/src/syntax/elements/elementSyntax.ts +++ b/src/syntax/elements/elementSyntax.ts @@ -29,16 +29,20 @@ export abstract class ElementSyntax implements IElementSyntax { /** Stores an object describing the type specification of each argument. */ private _argMap: { [key: string]: TDataName[] }; + /** + * + * @param name name of the syntax element + * @param label display of the syntax element + * @param kind kind (`Argument`, `Instruction`) of the syntax element + * @param type type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element + * @param argMap an object describing the type specification of each argument as a + * `argName: type[]` pair + */ constructor( - /** Name of the syntax element. */ name: TElementName, - /** Display of the syntax element. */ label: string, - /** Kind (`Argument`, `Instruction`) of the syntax element. */ kind: 'Argument' | 'Instruction', - /** Type (`Data`, `Expression`, `Statement`, `Block`) of the syntax element. */ type: 'Data' | 'Expression' | 'Statement' | 'Block', - /** An object describing the type specification of each argument as a `argName: type[]` pair. */ argMap: { [key: string]: TDataName[] } ) { this._name = name; From 49e8f0d9e3fc7769027d58e1404f8faaab812197 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 05:25:38 +0530 Subject: [PATCH 164/176] specification: [docs] update argument types - replace element name argument types from TElementName to string - reorder --- src/syntax/specification/specification.ts | 67 ++++++++++++----------- 1 file changed, 36 insertions(+), 31 deletions(-) diff --git a/src/syntax/specification/specification.ts b/src/syntax/specification/specification.ts index 2a48de9..f24236b 100644 --- a/src/syntax/specification/specification.ts +++ b/src/syntax/specification/specification.ts @@ -22,8 +22,8 @@ let _elementSpecification: { /** * Registers a syntax element specification from a given specification entry data. - * @param name - name of the syntax element - * @param specification - specification entry data + * @param name name of the syntax element + * @param specification specification entry data */ export function registerElementSpecificationEntry( name: string, @@ -54,15 +54,34 @@ export function registerElementSpecificationEntry( } /** - * Returns the names of available syntax elements. - * @returns a list of syntax element names. + * Registers a syntax element specification from a given specification entry table. + * @param specification specification entry table object with key-value pairs of element name and + * corresponding specification entry data */ -export function getElementNames(): TElementName[] { - return Object.keys(_elementSpecification) as TElementName[]; +export function registerElementSpecificationEntries(specification: { + [identifier: string]: IElementSpecification; +}): void { + Object.entries(specification).forEach(([identifier, specification]) => + registerElementSpecificationEntry(identifier, specification) + ); } -export function getElementCategories(): string[] { - return [...new Set(Object.entries(_elementSpecification).map(([_, { category }]) => category))]; +/** + * Removes specification for a syntax element. + * @param name name of the syntax element + */ +export function removeElementSpecificationEntry(name: string): void { + if (name in _elementSpecification) { + delete _elementSpecification[name]; + } +} + +/** + * Removes specification for a list of syntax element. + * @param names list of names of the syntax element + */ +export function removeElementSpecificationEntries(names: string[]): void { + names.forEach((name) => removeElementSpecificationEntry(name)); } /** @@ -71,7 +90,7 @@ export function getElementCategories(): string[] { * @returns element specification if exists, else `null` */ export function queryElementSpecification( - name: TElementName + name: string ): | IElementSpecificationData | IElementSpecificationExpression @@ -82,33 +101,19 @@ export function queryElementSpecification( } /** - * Registers a syntax element specification from a given specification entry table. - * @param specification - specification entry table object with key-value pairs of element name and corresponding specification entry data - */ -export function registerElementSpecificationEntries(specification: { - [identifier: string]: IElementSpecification; -}): void { - Object.entries(specification).forEach(([identifier, specification]) => - registerElementSpecificationEntry(identifier, specification) - ); -} - -/** - * Removes specification for a syntax element. - * @param name - name of the syntax element + * Returns the names of available syntax elements. + * @returns a list of syntax element names. */ -export function removeElementSpecificationEntry(name: TElementName): void { - if (name in _elementSpecification) { - delete _elementSpecification[name]; - } +export function getElementNames(): string[] { + return Object.keys(_elementSpecification) as TElementName[]; } /** - * Removes specification for a list of syntax element. - * @param names - list of names of the syntax element + * Returns the categories of available syntax elements. + * @returns a list of syntax element categories */ -export function removeElementSpecificationEntries(names: TElementName[]): void { - names.forEach((name) => removeElementSpecificationEntry(name)); +export function getElementCategories(): string[] { + return [...new Set(Object.entries(_elementSpecification).map(([_, { category }]) => category))]; } /** From 9c848c59f59291cbaf8dcf9a7a2cc9d61b25a84d Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 05:44:04 +0530 Subject: [PATCH 165/176] syntax tree: [docs] update type definitions - replace type definition of element name in snapshot from TElementName (inherited types) to string --- src/@types/syntaxTree.d.ts | 8 ++++---- src/syntax/tree/syntaxTree.ts | 14 ++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/@types/syntaxTree.d.ts b/src/@types/syntaxTree.d.ts index a0c5d51..6056a2c 100644 --- a/src/@types/syntaxTree.d.ts +++ b/src/@types/syntaxTree.d.ts @@ -11,7 +11,7 @@ import { /** Type definition for the snapshot input of a data element. */ export interface ITreeSnapshotDataInput { /** Name of the data element. */ - elementName: TElementNameData; + elementName: string; } /** Type definition for the snapshot of a data element. */ @@ -23,7 +23,7 @@ export interface ITreeSnapshotData extends ITreeSnapshotDataInput { /** Type definition for the snapshot input of an expression element. */ export interface ITreeSnapshotExpressionInput { /** Name of the expression element. */ - elementName: TElementNameExpression; + elementName: string; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ argMap: { [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; @@ -39,7 +39,7 @@ export interface ITreeSnapshotExpression extends ITreeSnapshotExpressionInput { /** Type definition for the snapshot input of a statement element. */ export interface ITreeSnapshotStatementInput { /** Name of the statement element. */ - elementName: TElementNameStatement; + elementName: string; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ argMap: { [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; @@ -55,7 +55,7 @@ export interface ITreeSnapshotStatement extends ITreeSnapshotStatementInput { /** Type definition for the snapshot input of a block element. */ export interface ITreeSnapshotBlockInput { /** Name of the block element. */ - elementName: TElementNameBlock; + elementName: string; /** Object with key-value pairs of argument name and snapshot of the corresponding argument. */ argMap: { [argName: string]: ITreeSnapshotDataInput | ITreeSnapshotExpressionInput | null; diff --git a/src/syntax/tree/syntaxTree.ts b/src/syntax/tree/syntaxTree.ts index 64a1681..cd88587 100644 --- a/src/syntax/tree/syntaxTree.ts +++ b/src/syntax/tree/syntaxTree.ts @@ -3,8 +3,10 @@ import { v4 as uuidv4 } from 'uuid'; import { IElementSpecificationInstruction, TElementName, - TElementNameBlock, + TElementNameData, + TElementNameExpression, TElementNameStatement, + TElementNameBlock, } from '../../@types/specification'; import { @@ -69,7 +71,7 @@ function _destroyNode(nodeID: string): void { * Helper that checks whether two instruction element nodes can be connected. * @param connectorNodeID - node ID of the connector node * @param connectingNodeID - node ID of the connecting node - * @returns - `true` if node connections are valid, else `false` + * @returns `true` if node connections are valid, else `false` */ function _attachInstructionCheck(connectorNodeID: string, connectingNodeID: string): boolean { if (!(connectorNodeID in _nodeMap) || !(connectingNodeID in _nodeMap)) { @@ -644,24 +646,24 @@ export function generateFromSnapshot(snapshot: ITreeSnapshotInput): void { } function __generateFromSnapshotData(snapshot: ITreeSnapshotDataInput): string { - const nodeID = addNode(snapshot.elementName); + const nodeID = addNode(snapshot.elementName as TElementNameData); return nodeID; } function __generateFromSnapshotExpression(snapshot: ITreeSnapshotExpressionInput): string { - const nodeID = addNode(snapshot.elementName); + const nodeID = addNode(snapshot.elementName as TElementNameExpression); __generateFromSnapshotArg(nodeID, snapshot.argMap); return nodeID; } function __generateFromSnapshotStatement(snapshot: ITreeSnapshotStatementInput): string { - const nodeID = addNode(snapshot.elementName); + const nodeID = addNode(snapshot.elementName as TElementNameStatement); __generateFromSnapshotArg(nodeID, snapshot.argMap); return nodeID; } function __generateFromSnapshotBlock(snapshot: ITreeSnapshotBlockInput): string { - const nodeID = addNode(snapshot.elementName); + const nodeID = addNode(snapshot.elementName as TElementNameBlock); __generateFromSnapshotArg(nodeID, snapshot.argMap); const innerNodeID = __generateSnapshotList(snapshot.scope); if (innerNodeID !== null) { From 8513ac13a9145df053f5694441aada6cdd3da3fe Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:13:48 +0530 Subject: [PATCH 166/176] execution: [docs] minor style updates to comments --- src/execution/interpreter.ts | 10 +++++----- src/execution/parser.ts | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts index 84af453..00d3f22 100644 --- a/src/execution/interpreter.ts +++ b/src/execution/interpreter.ts @@ -13,9 +13,9 @@ import { ElementStatement, ElementBlock } from '../syntax/elements/elementInstru /** * Adds a new variable entry to the symbol table. - * @param variable - name of the variable - * @param dataType - data type of the variable - * @param value - value of the variable + * @param variable name of the variable + * @param dataType data type of the variable + * @param value value of the variable */ export function declareVariable(variable: string, dataType: 'number', value: number): void; export function declareVariable(variable: string, dataType: 'string', value: string): void; @@ -26,7 +26,7 @@ export function declareVariable(variable: string, dataType: TDataName, value: TD /** * Fetches a variable entry from the symbol table. - * @param variable - name of the variable + * @param variable name of the variable * @returns the variable entry if present, else `null` */ export function queryVariable(variable: string): IVariable | null { @@ -35,7 +35,7 @@ export function queryVariable(variable: string): IVariable | null { /** * Sets a program counter override signal for the current execution item. - * @param signal - program counter override signal + * @param signal program counter override signal */ export function overrideProgramCounter(signal: TPCOverride): void { setPCOverride(signal); diff --git a/src/execution/parser.ts b/src/execution/parser.ts index b971958..ff7de33 100644 --- a/src/execution/parser.ts +++ b/src/execution/parser.ts @@ -125,8 +125,8 @@ function _reset(): void { // -- public functions ----------------------------------------------------------------------------- /** - * Recursively validates the argument sequence for a syntax tree instruction node. Checks if there are - * `null` argument connections. + * Recursively validates the argument sequence for a syntax tree instruction node. Checks if there + * are `null` argument connections. * @param instructionNode - syntax tree instruction node * @returns `null` if valid, else an object of the invalid syntax tree non-data node and arg name. */ From 8b07d24fbce1e4ae1fe9806fc8d66a887997b859 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:14:50 +0530 Subject: [PATCH 167/176] feat: expose API in source root index --- src/index.ts | 202 +++++++++++++++++++++++++-------------------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/src/index.ts b/src/index.ts index 00d15e6..38feffb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,107 +1,107 @@ -// -- execution ------------------------------------------------------------------------------------ - -import * as interpreter from './execution/interpreter'; -import * as parser from './execution/parser'; -import * as symbolTable from './execution/symbolTable'; - -export const engine = { - interpreter, - parser, - symbolTable, -}; - -// -- syntax --------------------------------------------------------------------------------------- - -import * as warehouse from './syntax/warehouse/warehouse'; -import * as syntaxTree from './syntax/tree/syntaxTree'; -import * as specification from './syntax/specification/specification'; - -export const syntax = { - warehouse, - specification, - tree: syntaxTree, -}; - -// -- library -------------------------------------------------------------------------------------- - -import * as libSpecification from './library/specification'; -import * as elementBox from './library/elements/elementBox'; -import * as elementBoxIdentifier from './library/elements/elementBoxIdentifier'; -import * as elementConditional from './library/elements/elementConditional'; -import * as elementLoop from './library/elements/elementLoop'; -import * as elementOperatorMath from './library/elements/elementOperatorMath'; -import * as elementPrint from './library/elements/elementPrint'; -import * as elementProgram from './library/elements/elementProgram'; -import * as elementValue from './library/elements/elementValue'; - -export const library = { - specification: libSpecification, - elements: { - elementBox, - elementBoxIdentifier, - elementConditional, - elementLoop, - elementOperatorMath, - elementPrint, - elementProgram, - elementValue, - }, -}; - -// -- types ---------------------------------------------------------------------------------------- +// == SYNTAX ======================================================================================= + +// -- elements ------------------------------------------------------------------------------------- export { TData, TDataName } from './@types/data'; + +export { ElementData, ElementExpression } from './syntax/elements/elementArgument'; +export { ElementStatement, ElementBlock } from './syntax/elements/elementInstruction'; + +// -- specification -------------------------------------------------------------------------------- + +export { IElementSpecification } from './@types/specification'; + export { - IElementSyntax, - IElementArgument, - IElementData, - IElementExpression, - IElementInstruction, - IElementStatement, - IElementBlock, -} from './@types/elements'; + registerElementSpecificationEntry, + registerElementSpecificationEntries, + removeElementSpecificationEntry, + removeElementSpecificationEntries, + queryElementSpecification, + getElementNames, + getElementCategories, + resetElementSpecificationTable, +} from './syntax/specification/specification'; + +// -- syntax tree ---------------------------------------------------------------------------------- + +export { ITreeSnapshotInput } from './@types/syntaxTree'; + export { - IVariable, - IParsedElementArgument, - IParsedElementInstruction, - IParsedElement, - TPCOverride, -} from './@types/execution'; + getProcessNodes, + getRoutineNodes, + getCrumbs, + getNode, + generateSnapshot, + generateFromSnapshot, + resetSyntaxTree, +} from './syntax/tree/syntaxTree'; + +// -- warehouse ------------------------------------------------------------------------------------ + export { - TElementKind, - TElementType, - TElementNameData, - TElementNameExpression, - TElementNameStatement, - TElementNameBlock, - TElementName, - IElementSpecificationData, - IElementSpecificationEntryData, - IElementSpecificationExpression, - IElementSpecificationEntryExpression, - IElementSpecificationInstruction, - IElementSpecificationStatement, - IElementSpecificationEntryStatement, - IElementSpecificationBlock, - IElementSpecificationEntryBlock, - IElementSpecification, -} from './@types/specification'; + getInstance, + getNameCount, + getNameCountAll, + getTypeCount, + getTypeCountAll, + getKindCount, + getKindCountAll, + getCategoryCount, + getCategoryCountAll, +} from './syntax/warehouse/warehouse'; + +// == EXECUTION ==================================================================================== + +export { TPCOverride } from './@types/execution'; + export { - ITreeSnapshotDataInput, - ITreeSnapshotData, - ITreeSnapshotExpressionInput, - ITreeSnapshotExpression, - ITreeSnapshotStatementInput, - ITreeSnapshotStatement, - ITreeSnapshotBlockInput, - ITreeSnapshotBlock, - ITreeSnapshotInput, - ITreeSnapshot, - ITreeNode, - ITreeNodeArgument, - ITreeNodeData, - ITreeNodeExpression, - ITreeNodeInstruction, - ITreeNodeStatement, - ITreeNodeBlock, -} from './@types/syntaxTree'; + declareVariable, + queryVariable, + overrideProgramCounter, + releaseProgramCounter, + run, +} from './execution/interpreter'; + +// == LIBRARY ====================================================================================== + +// -- specification -------------------------------------------------------------------------------- + +export { default as librarySpecification } from './library/specification'; + +// -- elements ------------------------------------------------------------------------------------- + +export { + ElementValueBoolean, + ElementValueNumber, + ElementValueString, +} from './library/elements/elementValue'; + +export { + ElementBoxGeneric, + ElementBoxBoolean, + ElementBoxNumber, + ElementBoxString, +} from './library/elements/elementBox'; + +export { + ElementBoxIdentifierGeneric, + ElementBoxIdentifierBoolean, + ElementBoxIdentifierNumber, + ElementBoxIdentifierString, +} from './library/elements/elementBoxIdentifier'; + +export { + ElementOperatorMathPlus, + ElementOperatorMathMinus, + ElementOperatorMathTimes, + ElementOperatorMathDivide, + ElementOperatorMathModulus, +} from './library/elements/elementOperatorMath'; + +export { ElementIf } from './library/elements/elementConditional'; + +export { ElementRepeat } from './library/elements/elementLoop'; + +export { ElementPrint } from './library/elements/elementPrint'; + +export { ElementProcess, ElementRoutine } from './library/elements/elementProgram'; From a5fb996d58e46a6886a9e548ff7da9fe933aa2b0 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:22:18 +0530 Subject: [PATCH 168/176] execution: [fix] import type dependencies --- src/@types/execution.d.ts | 9 +++++++-- src/execution/interpreter.ts | 8 ++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/@types/execution.d.ts b/src/@types/execution.d.ts index bf3daf3..ee96e30 100644 --- a/src/@types/execution.d.ts +++ b/src/@types/execution.d.ts @@ -1,3 +1,8 @@ +import { TData, TDataName } from './data'; +import { IElementData, IElementExpression, IElementStatement, IElementBlock } from './elements'; + +// ------------------------------------------------------------------------------------------------- + /** Type describing a variable entry in symbol table. */ export type IVariable = { dataType: TDataName; @@ -6,14 +11,14 @@ export type IVariable = { /** Type definition of the parsed argument element entry returned on fetching next element. */ export type IParsedElementArgument = { - instance: ElementData | ElementExpression; + instance: IElementData | IElementExpression; type: 'Argument'; marker: string | null; }; /** Type definition of the parsed instruction element entry returned on fetching next element. */ export type IParsedElementInstruction = { - instance: ElementStatement | ElementBlock; + instance: IElementStatement | IElementBlock; type: 'Instruction'; marker: string | null; }; diff --git a/src/execution/interpreter.ts b/src/execution/interpreter.ts index 00d3f22..8757521 100644 --- a/src/execution/interpreter.ts +++ b/src/execution/interpreter.ts @@ -4,7 +4,11 @@ import { IVariable, TPCOverride } from '../@types/execution'; import { addGlobalVariable, getGlobalVariable } from './symbolTable'; import { setPCOverride, clearPCOverride, setExecutionItem, getNextElement } from './parser'; -import { ElementData, ElementExpression } from '../syntax/elements/elementArgument'; +import { + ElementData, + ElementExpression, + ElementArgument, +} from '../syntax/elements/elementArgument'; import { ElementStatement, ElementBlock } from '../syntax/elements/elementInstruction'; // -- private functions ---------------------------------------------------------------------------- @@ -80,7 +84,7 @@ export function run(nodeID: string): void { (instance as ElementExpressionCover).evaluate(memo); } - const value = instance.value; + const value = (instance as unknown as ElementArgument).value; if (marker !== null) { memo[marker] = value; From 32571af266efac30869f1fec923dafdd08dfa360 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:27:08 +0530 Subject: [PATCH 169/176] lint: update rules - warn on console log statements - max line length 100 including comments --- .eslintrc.json | 6 +++--- src/library/elements/elementPrint.ts | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index d74b633..7604d82 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -34,13 +34,13 @@ ], "semi": ["error", "always"], "prefer-const": ["warn"], - // "no-console": "warn", + "no-console": "warn", "max-len": [ "warn", { "code": 100, - "ignoreTrailingComments": true, - "ignoreComments": true, + "ignoreTrailingComments": false, + "ignoreComments": false, "ignoreStrings": true, "ignoreTemplateLiterals": true } diff --git a/src/library/elements/elementPrint.ts b/src/library/elements/elementPrint.ts index 40bd5f0..1135786 100644 --- a/src/library/elements/elementPrint.ts +++ b/src/library/elements/elementPrint.ts @@ -10,6 +10,7 @@ export class ElementPrint extends ElementStatement { } onVisit(params: { value: TData }): void { + // eslint-disable-next-line no-console console.log(params.value); } } From c5a0f93640894a84f35e832184b2d1fe5e58a28f Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:32:48 +0530 Subject: [PATCH 170/176] chore: bump version to 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b755e39..f4ffe40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sugarlabs/musicblocks-v4-lib", - "version": "0.1.0", + "version": "1.0.0", "description": "The core of the new Music Blocks (v4) application", "repository": { "type": "git", From d034229235b4b6e5cdfd314b945c5bfbee2a7660 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 06:59:05 +0530 Subject: [PATCH 171/176] workflow: run workflows only for develop branch --- .github/workflows/CI.yml | 4 ++-- .github/workflows/linter.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9aa0772..988cc08 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -5,9 +5,9 @@ name: Continuous Integration on: push: - branches: [develop, main] + branches: [develop] pull_request: - branches: [develop, main] + branches: [develop] jobs: smoke-test: diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 9904237..a66bb5d 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -5,9 +5,9 @@ name: Super-Linter on: push: - branches: [develop, main] + branches: [develop] pull_request: - branches: [develop, main] + branches: [develop] jobs: build: From 8e1153698985d66f01598fc9d6c0f979fc82fba3 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 07:47:42 +0530 Subject: [PATCH 172/176] workflow: [CICD] add workflow for main branch - lint - smoke-test - regression-test - deploy to registry (on successful completion of above) --- .github/workflows/CICD.yml | 147 +++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 .github/workflows/CICD.yml diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml new file mode 100644 index 0000000..c2f2a5c --- /dev/null +++ b/.github/workflows/CICD.yml @@ -0,0 +1,147 @@ +--- +# Documentation:https://help.github.com/en/articles/workflow-syntax-for-github-actions + +name: Continuous Integration - Continuous Deployment + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + lint: + name: Lint Code Base + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout the code base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: | + yarn install --frozen-lockfile + + - name: Lint new and edited files + uses: github/super-linter/slim@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DEFAULT_BRANCH: develop + LINTER_RULES_PATH: / + JAVASCRIPT_ES_CONFIG_FILE: .eslintrc.json + TYPESCRIPT_ES_CONFIG_FILE: .eslintrc.json + MARKDOWN_CONFIG_FILE: .markdownlint.jsonc + VALIDATE_ALL_CODEBASE: false + VALIDATE_DOCKERFILE: false + VALIDATE_DOCKERFILE_HADOLINT: false + VALIDATE_JAVASCRIPT_STANDARD: false + VALIDATE_TYPESCRIPT_STANDARD: false + VALIDATE_JSCPD: false + VALIDATE_PYTHON: false + VALIDATE_PYTHON_BLACK: false + VALIDATE_PYTHON_FLAKE8: false + VALIDATE_PYTHON_ISORT: false + VALIDATE_PYTHON_MYPY: false + VALIDATE_PYTHON_PYLINT: false + + smoke-test: + name: Smoke Test + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout the code base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build the project + run: yarn run build + + regression-test: + name: Regression Test + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout the code base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run unit tests + run: yarn run test + + deploy: + name: Deploy package to GitHub npm registry + needs: [lint, smoke-test, regression-test] + + strategy: + matrix: + os: [ubuntu-latest] + node-version: [16.x] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout the code base + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Deploy to registry + run: | + echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc + npm run build + cp package.json dist/package.json + cp README.md dist/README.md + cd dist + npm pack + cp ./*.tgz ../ + cd .. + npm publish "$(set -- *.tgz; echo "$1")" + rm -rf dist ./*.tgz .npmrc From 251acae7cbcbd51819d33c08b10efd6515b16702 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 09:35:11 +0530 Subject: [PATCH 173/176] workflow: [CICD] rename to Continuous Deployment --- .github/linters/.markdownlint.jsonc | 248 ------------------------- .github/workflows/{CICD.yml => CD.yml} | 2 +- 2 files changed, 1 insertion(+), 249 deletions(-) delete mode 100644 .github/linters/.markdownlint.jsonc rename .github/workflows/{CICD.yml => CD.yml} (98%) diff --git a/.github/linters/.markdownlint.jsonc b/.github/linters/.markdownlint.jsonc deleted file mode 100644 index 19f5412..0000000 --- a/.github/linters/.markdownlint.jsonc +++ /dev/null @@ -1,248 +0,0 @@ -// documentation: https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md - -{ - // Default state for all rules - // "default": true, - - // Path to configuration file to extend - // "extends": null, - - // MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time - "MD001": true, - - // MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading - "MD002": { - // Heading level - "level": 1 - }, - - // MD003/heading-style/header-style - Heading style - "MD003": { - // Heading style - "style": "consistent" - }, - - // MD004/ul-style - Unordered list style - "MD004": { - // List style - "style": "consistent" - }, - - // MD005/list-indent - Inconsistent indentation for list items at the same level - "MD005": true, - - // MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line - "MD006": true, - - // MD007/ul-indent - Unordered list indentation - "MD007": { - // Spaces for indent - "indent": 2, - // Whether to indent the first level of the list - "start_indented": false - }, - - // MD009/no-trailing-spaces - Trailing spaces - "MD009": { - // Spaces for line break - "br_spaces": 2, - // Allow spaces for empty lines in list items - "list_item_empty_lines": false, - // Include unnecessary breaks - "strict": false - }, - - // MD010/no-hard-tabs - Hard tabs - "MD010": { - // Include code blocks - "code_blocks": true - }, - - // MD011/no-reversed-links - Reversed link syntax - "MD011": true, - - // MD012/no-multiple-blanks - Multiple consecutive blank lines - "MD012": { - // Consecutive blank lines - "maximum": 1 - }, - - // MD013/line-length - Line length - "MD013": { - // Number of characters - "line_length": 100, - // Number of characters for headings - "heading_line_length": 80, - // Number of characters for code blocks - "code_block_line_length": 100, - // Include code blocks - "code_blocks": true, - // Include tables - "tables": true, - // Include headings - "headings": true, - // Include headings - "headers": true, - // Strict length checking - "strict": false, - // Stern length checking - "stern": false - }, - - // MD014/commands-show-output - Dollar signs used before commands without showing output - "MD014": true, - - // MD018/no-missing-space-atx - No space after hash on atx style heading - "MD018": true, - - // MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading - "MD019": true, - - // MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading - "MD020": true, - - // MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading - "MD021": true, - - // MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines - "MD022": { - // Blank lines above heading - "lines_above": 1, - // Blank lines below heading - "lines_below": 1 - }, - - // MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line - "MD023": true, - - // MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content - "MD024": { - // Only check sibling headings - "allow_different_nesting": true - }, - - // MD025/single-title/single-h1 - Multiple top-level headings in the same document - "MD025": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD026/no-trailing-punctuation - Trailing punctuation in heading - "MD026": { - // Punctuation characters - "punctuation": ".,;:!。,;:!" - }, - - // MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol - "MD027": true, - - // MD028/no-blanks-blockquote - Blank line inside blockquote - "MD028": true, - - // MD029/ol-prefix - Ordered list item prefix - "MD029": { - // List style - "style": "one_or_ordered" - }, - - // MD030/list-marker-space - Spaces after list markers - "MD030": { - // Spaces for single-line unordered list items - "ul_single": 1, - // Spaces for single-line ordered list items - "ol_single": 1, - // Spaces for multi-line unordered list items - "ul_multi": 1, - // Spaces for multi-line ordered list items - "ol_multi": 1 - }, - - // MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines - "MD031": { - // Include list items - "list_items": true - }, - - // MD032/blanks-around-lists - Lists should be surrounded by blank lines - "MD032": true, - - // MD033/no-inline-html - Inline HTML - "MD033": { - // Allowed elements - "allowed_elements": [] - }, - - // MD034/no-bare-urls - Bare URL used - "MD034": true, - - // MD035/hr-style - Horizontal rule style - "MD035": { - // Horizontal rule style - "style": "consistent" - }, - - // MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading - "MD036": { - // Punctuation characters - "punctuation": ".,;:!?。,;:!?" - }, - - // MD037/no-space-in-emphasis - Spaces inside emphasis markers - "MD037": true, - - // MD038/no-space-in-code - Spaces inside code span elements - "MD038": true, - - // MD039/no-space-in-links - Spaces inside link text - "MD039": true, - - // MD040/fenced-code-language - Fenced code blocks should have a language specified - "MD040": true, - - // MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading - "MD041": { - // Heading level - "level": 1, - // RegExp for matching title in front matter - "front_matter_title": "^\\s*title\\s*[:=]" - }, - - // MD042/no-empty-links - No empty links - "MD042": true, - - // MD043/required-headings/required-headers - Required heading structure - // "MD043": { - // // List of headings - // "headings": [], - // // List of headings - // "headers": [] - // }, - - // MD044/proper-names - Proper names should have the correct capitalization - // "MD044": { - // // List of proper names - // "names": [], - // // Include code blocks - // "code_blocks": true - // }, - - // MD045/no-alt-text - Images should have alternate text (alt text) - "MD045": true, - - // MD046/code-block-style - Code block style - "MD046": { - // Block style - "style": "consistent" - }, - - // MD047/single-trailing-newline - Files should end with a single newline character - "MD047": true, - - // MD048/code-fence-style - Code fence style - "MD048": { - // Code fence syle - "style": "consistent" - } -} diff --git a/.github/workflows/CICD.yml b/.github/workflows/CD.yml similarity index 98% rename from .github/workflows/CICD.yml rename to .github/workflows/CD.yml index c2f2a5c..8019e7e 100644 --- a/.github/workflows/CICD.yml +++ b/.github/workflows/CD.yml @@ -1,7 +1,7 @@ --- # Documentation:https://help.github.com/en/articles/workflow-syntax-for-github-actions -name: Continuous Integration - Continuous Deployment +name: Continuous Deployment on: push: From df972729d7bdcfe20a26360c754c3f80cb4788f6 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 09:37:00 +0530 Subject: [PATCH 174/176] workflow: [linter] rename to lint --- .github/workflows/{linter.yml => lint.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{linter.yml => lint.yml} (98%) diff --git a/.github/workflows/linter.yml b/.github/workflows/lint.yml similarity index 98% rename from .github/workflows/linter.yml rename to .github/workflows/lint.yml index a66bb5d..43306e6 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/lint.yml @@ -1,7 +1,7 @@ --- # Documentation:https://help.github.com/en/articles/workflow-syntax-for-github-actions -name: Super-Linter +name: Super Linter on: push: From efb506a107946acf2d0d2a90f986961f16729404 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 09:38:33 +0530 Subject: [PATCH 175/176] docs: add workflow status badges --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e923695..ea86f02 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Programming framework of musicblocks-v4 +[![Super Linter](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/lint.yml/badge.svg)](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/lint.yml) +[![Continuous Integration](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/CI.yml/badge.svg)](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/CI.yml) +[![Continuous Deployment](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/CD.yml/badge.svg?branch=main)](https://github.com/sugarlabs/musicblocks-v4-lib/actions/workflows/CD.yml) + This repository contains the source code for the programming framework of the new [Music Blocks (v4)](https://github.com/sugarlabs/musicblocks-v4) application. From c4e49fcda7b5038dce83d62d3f354c0391398951 Mon Sep 17 00:00:00 2001 From: Anindya Kundu Date: Wed, 26 Jan 2022 09:54:42 +0530 Subject: [PATCH 176/176] workflow: [CD] Update deploy job - add conditional for deploy job to trigger only if pull request is merged or directly pushed - install dependencies before build --- .github/workflows/CD.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index 8019e7e..3bac837 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -113,6 +113,8 @@ jobs: deploy: name: Deploy package to GitHub npm registry + + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true) needs: [lint, smoke-test, regression-test] strategy: @@ -133,6 +135,9 @@ jobs: with: node-version: ${{ matrix.node-version }} + - name: Install dependencies + run: yarn install --frozen-lockfile + - name: Deploy to registry run: | echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> .npmrc