From 2095d4705808f65e73d99e685a7dba33e2b01f29 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Wed, 9 Feb 2022 22:44:16 +0300 Subject: [PATCH 01/32] Dead code injection transformer ignores PrivateIdentifier nodes (#1057) --- CHANGELOG.md | 4 ++ package.json | 2 +- src/enums/node/NodeType.ts | 1 + .../DeadCodeInjectionTransformer.ts | 3 +- src/node/NodeGuards.ts | 8 +++ .../DeadCodeInjectionTransformer.spec.ts | 51 +++++++++++++++++++ .../fixtures/private-identifier.js | 29 +++++++++++ 7 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/private-identifier.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f92df5e1..0df82e551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v3.2.5 +--- +* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1056 + v3.2.4 --- * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1052 diff --git a/package.json b/package.json index 11227e279..eb31e247c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "3.2.4", + "version": "3.2.5", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/enums/node/NodeType.ts b/src/enums/node/NodeType.ts index 4723442d5..4d35273bc 100644 --- a/src/enums/node/NodeType.ts +++ b/src/enums/node/NodeType.ts @@ -40,6 +40,7 @@ export enum NodeType { NewExpression = 'NewExpression', ObjectExpression = 'ObjectExpression', ObjectPattern = 'ObjectPattern', + PrivateIdentifier = 'PrivateIdentifier', Program = 'Program', Property = 'Property', PropertyDefinition = 'PropertyDefinition', diff --git a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts index 46493ba62..abf6b85d0 100644 --- a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts +++ b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts @@ -107,7 +107,8 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { || NodeGuards.isAwaitExpressionNode(targetNode) || NodeGuards.isYieldExpressionNode(targetNode) || NodeGuards.isSuperNode(targetNode) - || (NodeGuards.isForOfStatementNode(targetNode) && targetNode.await); + || (NodeGuards.isForOfStatementNode(targetNode) && targetNode.await) + || NodeGuards.isPrivateIdentifierNode(targetNode); } /** diff --git a/src/node/NodeGuards.ts b/src/node/NodeGuards.ts index 2015435d6..0cec976da 100644 --- a/src/node/NodeGuards.ts +++ b/src/node/NodeGuards.ts @@ -447,6 +447,14 @@ export class NodeGuards { return node.type === NodeType.ObjectExpression; } + /** + * @param {Node} node + * @returns {boolean} + */ + public static isPrivateIdentifierNode (node: ESTree.Node): node is ESTree.PrivateIdentifier { + return node.type === NodeType.PrivateIdentifier; + } + /** * @param {Node} node * @returns {boolean} diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts index 708edee61..239f152a4 100644 --- a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts @@ -489,6 +489,57 @@ describe('DeadCodeInjectionTransformer', () => { assert.equal(awaitExpressionMatchesLength, expectedAwaitExpressionMatchesLength); }); }); + + describe('Variant #7 - private identifier in block statement', () => { + const functionRegExp: RegExp = new RegExp( + `var ${variableMatch} *= *function *\\(\\) *\\{` + + `console\\[${variableMatch}\\(${hexMatch}\\)\\]\\(${variableMatch}\\(${hexMatch}\\)\\);` + + `\\};`, + 'g' + ); + const privateIdentifierRegExp: RegExp = new RegExp( + `this\.#private *= *0x1;`, + 'g' + ); + const expectedFunctionMatchesLength: number = 4; + const expectedPrivateIdentifierMatchesLength: number = 1; + + let functionMatchesLength: number = 0, + privateIdentifierMatchesLength: number = 0; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/private-identifier.js'); + + const obfuscatedCode: string = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + deadCodeInjection: true, + deadCodeInjectionThreshold: 1, + stringArray: true, + stringArrayThreshold: 1 + } + ).getObfuscatedCode(); + const functionMatches: RegExpMatchArray = obfuscatedCode.match(functionRegExp); + const privateIdentifierMatches: RegExpMatchArray = obfuscatedCode.match(privateIdentifierRegExp); + + if (functionMatches) { + functionMatchesLength = functionMatches.length; + } + + if (privateIdentifierMatches) { + privateIdentifierMatchesLength = privateIdentifierMatches.length; + } + }); + + it('match #1: shouldn\'t add dead code', () => { + assert.equal(functionMatchesLength, expectedFunctionMatchesLength); + }); + + it('match #2: shouldn\'t add dead code', () => { + assert.equal(privateIdentifierMatchesLength, expectedPrivateIdentifierMatchesLength); + }); + }); }); describe('Variant #5 - chance of `IfStatement` variant', () => { diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/private-identifier.js b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/private-identifier.js new file mode 100644 index 000000000..4872e698b --- /dev/null +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/private-identifier.js @@ -0,0 +1,29 @@ +class Foo { + #private; + + constructor(props) { + if (true) { + var foo = function () { + console.log('abc'); + }; + var bar = function () { + console.log('def'); + }; + var baz = function () { + console.log('ghi'); + }; + var bark = function () { + console.log('jkl'); + }; + + if (true) { + this.#private = 1; + } + + foo(); + bar(); + baz(); + bark(); + } + } +} \ No newline at end of file From b99b6a46eed4698ae19b749d51b5d4331535bc82 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sat, 12 Feb 2022 20:35:31 +0300 Subject: [PATCH 02/32] Improved integration between `renameProperties` and `controlFlowFlattening` options (#1060) --- CHANGELOG.md | 4 + package.json | 2 +- src/declarations/ESTree.d.ts | 10 +- .../MangledIdentifierNamesGenerator.ts | 31 +++--- .../AbstractControlFlowReplacer.ts | 17 +-- .../CallExpressionControlFlowReplacer.ts | 2 +- .../StringArrayCallControlFlowReplacer.ts | 2 +- .../StringLiteralControlFlowReplacer.ts | 2 +- .../RenamePropertiesTransformer.ts | 104 +++++------------- src/node/NodeMetadata.ts | 11 ++ test/dev/dev.ts | 67 +++++------ .../StringLiteralControlFlowReplacer.spec.ts | 84 +++++++++----- ...same-storage-key-for-same-string-values.js | 7 ++ .../RenamePropertiesTransformer.spec.ts | 64 +++++++++++ .../control-flow-flattening-integration.js | 6 + .../transform-object-keys-integration.js | 4 + ...ringArrayRotateFunctionTransformer.spec.ts | 14 ++- .../node/node-metadata/NodeMetadata.spec.ts | 18 +++ 18 files changed, 270 insertions(+), 179 deletions(-) create mode 100644 test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/fixtures/same-storage-key-for-same-string-values.js create mode 100644 test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/control-flow-flattening-integration.js create mode 100644 test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/transform-object-keys-integration.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 0df82e551..baedc626f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v3.2.6 +--- +* Improved integration between `renameProperties` and `controlFlowFlattening` options. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053 + v3.2.5 --- * Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1056 diff --git a/package.json b/package.json index eb31e247c..d7a401967 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "3.2.5", + "version": "3.2.6", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index a73321c0e..b11c2b821 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -3,7 +3,6 @@ import * as acorn from 'acorn'; import * as escodegen from '@javascript-obfuscator/escodegen'; import * as eslintScope from 'eslint-scope'; -import { BlockStatement } from 'estree'; declare module 'estree' { /** @@ -14,8 +13,13 @@ declare module 'estree' { ignoredNode?: boolean; } + export interface IdentifierNodeMetadata extends BaseNodeMetadata { + propertyKeyToRenameNode?: boolean + } + export interface LiteralNodeMetadata extends BaseNodeMetadata { stringArrayCallLiteralNode?: boolean; + propertyKeyToRenameNode?: boolean } /** @@ -40,6 +44,10 @@ declare module 'estree' { scope?: eslintScope.Scope | null; } + interface Identifier extends BaseNode { + metadata?: IdentifierNodeMetadata; + } + interface BigIntLiteral extends BaseNode { metadata?: LiteralNodeMetadata; 'x-verbatim-property'?: escodegen.XVerbatimProperty; diff --git a/src/generators/identifier-names-generators/MangledIdentifierNamesGenerator.ts b/src/generators/identifier-names-generators/MangledIdentifierNamesGenerator.ts index 29bfd06c7..0528e895d 100644 --- a/src/generators/identifier-names-generators/MangledIdentifierNamesGenerator.ts +++ b/src/generators/identifier-names-generators/MangledIdentifierNamesGenerator.ts @@ -27,11 +27,6 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene */ private static readonly initMangledNameCharacter: string = '9'; - /** - * @type {WeakMap} - */ - private static readonly lastMangledNameInScopeMap: WeakMap = new WeakMap(); - /** * @type {string[]} */ @@ -48,14 +43,19 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene private static readonly reservedNamesSet: Set = new Set(reservedIdentifierNames); /** - * @type {WeakMap} + * @type {string} */ - private readonly lastMangledNameForLabelMap: Map = new Map(); + private lastMangledName: string = MangledIdentifierNamesGenerator.initMangledNameCharacter; /** - * @type {string} + * @type {WeakMap} */ - private previousMangledName: string = MangledIdentifierNamesGenerator.initMangledNameCharacter; + private readonly lastMangledNameForScopeMap: WeakMap = new WeakMap(); + + /** + * @type {WeakMap} + */ + private readonly lastMangledNameForLabelMap: Map = new Map(); /** * @type {ISetUtils} @@ -85,7 +85,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene * @returns {string} */ public generateNext (nameLength?: number): string { - const identifierName: string = this.generateNewMangledName(this.previousMangledName); + const identifierName: string = this.generateNewMangledName(this.lastMangledName); this.updatePreviousMangledName(identifierName); this.preserveName(identifierName); @@ -103,7 +103,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene : ''; const identifierName: string = this.generateNewMangledName( - this.previousMangledName, + this.lastMangledName, (newIdentifierName: string) => { const identifierNameWithPrefix: string = `${prefix}${newIdentifierName}`; @@ -136,7 +136,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene this.isValidIdentifierNameInLexicalScopes(newIdentifierName, lexicalScopes) ); - MangledIdentifierNamesGenerator.lastMangledNameInScopeMap.set(lexicalScopeNode, identifierName); + this.lastMangledNameForScopeMap.set(lexicalScopeNode, identifierName); this.updatePreviousMangledName(identifierName); this.preserveNameForLexicalScope(identifierName, lexicalScopeNode); @@ -216,11 +216,11 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene * @param {string} name */ protected updatePreviousMangledName (name: string): void { - if (!this.isIncrementedMangledName(name, this.previousMangledName)) { + if (!this.isIncrementedMangledName(name, this.lastMangledName)) { return; } - this.previousMangledName = name; + this.lastMangledName = name; } /** @@ -309,8 +309,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene */ private getLastMangledNameForScopes (lexicalScopeNodes: TNodeWithLexicalScope[]): string { for (const lexicalScope of lexicalScopeNodes) { - const lastMangledName: string | null = MangledIdentifierNamesGenerator.lastMangledNameInScopeMap - .get(lexicalScope) ?? null; + const lastMangledName: string | null = this.lastMangledNameForScopeMap.get(lexicalScope) ?? null; if (!lastMangledName) { continue; diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts index 4f510184c..fde1f972e 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/AbstractControlFlowReplacer.ts @@ -36,9 +36,9 @@ export abstract class AbstractControlFlowReplacer implements IControlFlowReplace protected readonly randomGenerator: IRandomGenerator; /** - * @type {Map>} + * @type {Map>} */ - protected readonly replacerDataByControlFlowStorageId: Map > = new Map(); + protected readonly replacerDataByControlFlowStorageId: Map > = new Map(); /** * @param {TControlFlowCustomNodeFactory} controlFlowCustomNodeFactory @@ -80,23 +80,23 @@ export abstract class AbstractControlFlowReplacer implements IControlFlowReplace /** * @param {ICustomNode} customNode * @param {IControlFlowStorage} controlFlowStorage - * @param {string} replacerId + * @param {string | number} replacerId * @param {number} usingExistingIdentifierChance * @returns {string} */ protected insertCustomNodeToControlFlowStorage ( customNode: ICustomNode, controlFlowStorage: IControlFlowStorage, - replacerId: string, + replacerId: string | number, usingExistingIdentifierChance: number ): string { const controlFlowStorageId: string = controlFlowStorage.getStorageId(); - const storageKeysById: Map = this.replacerDataByControlFlowStorageId.get(controlFlowStorageId) + const storageKeysById: Map = this.replacerDataByControlFlowStorageId.get(controlFlowStorageId) ?? new Map (); - const storageKeysForCurrentId: string[] | null = storageKeysById.get(replacerId) ?? null; + const storageKeysForCurrentId: string[] = storageKeysById.get(replacerId) ?? []; const shouldPickFromStorageKeysById = this.randomGenerator.getMathRandom() < usingExistingIdentifierChance - && storageKeysForCurrentId?.length; + && storageKeysForCurrentId.length; if (shouldPickFromStorageKeysById) { return this.randomGenerator.getRandomGenerator().pickone(storageKeysForCurrentId); @@ -104,7 +104,8 @@ export abstract class AbstractControlFlowReplacer implements IControlFlowReplace const storageKey: string = this.generateStorageKey(controlFlowStorage); - storageKeysById.set(replacerId, [storageKey]); + storageKeysForCurrentId.push(storageKey); + storageKeysById.set(replacerId, storageKeysForCurrentId); this.replacerDataByControlFlowStorageId.set(controlFlowStorageId, storageKeysById); controlFlowStorage.set(storageKey, customNode); diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts index 7196b4d30..61824f685 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/CallExpressionControlFlowReplacer.ts @@ -66,7 +66,7 @@ export class CallExpressionControlFlowReplacer extends AbstractControlFlowReplac return callExpressionNode; } - const replacerId: string = String(callExpressionNode.arguments.length); + const replacerId: number = callExpressionNode.arguments.length; const callExpressionFunctionCustomNode: ICustomNode> = this.controlFlowCustomNodeFactory(ControlFlowCustomNode.CallExpressionFunctionNode); const expressionArguments: (ESTree.Expression | ESTree.SpreadElement)[] = callExpressionNode.arguments; diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringArrayCallControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringArrayCallControlFlowReplacer.ts index cbe64f5e8..0c90ec330 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringArrayCallControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringArrayCallControlFlowReplacer.ts @@ -74,7 +74,7 @@ export class StringArrayCallControlFlowReplacer extends AbstractControlFlowRepla return literalNode; } - const replacerId: string = String(literalNode.value); + const replacerId: string | number = literalNode.value; const literalCustomNode: ICustomNode> = this.controlFlowCustomNodeFactory(ControlFlowCustomNode.LiteralNode); diff --git a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts index 5aa05ff65..9ed65afac 100644 --- a/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts +++ b/src/node-transformers/control-flow-transformers/control-flow-replacers/StringLiteralControlFlowReplacer.ts @@ -69,7 +69,7 @@ export class StringLiteralControlFlowReplacer extends AbstractControlFlowReplace return literalNode; } - const replacerId: string = String(literalNode.value); + const replacerId: string = literalNode.value; const literalCustomNode: ICustomNode> = this.controlFlowCustomNodeFactory(ControlFlowCustomNode.LiteralNode); diff --git a/src/node-transformers/rename-properties-transformers/RenamePropertiesTransformer.ts b/src/node-transformers/rename-properties-transformers/RenamePropertiesTransformer.ts index 1dcbfdb9b..55a321a13 100644 --- a/src/node-transformers/rename-properties-transformers/RenamePropertiesTransformer.ts +++ b/src/node-transformers/rename-properties-transformers/RenamePropertiesTransformer.ts @@ -14,7 +14,7 @@ import { RenamePropertiesMode } from '../../enums/node-transformers/rename-prope import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { NodeGuards } from '../../node/NodeGuards'; import { NodeLiteralUtils } from '../../node/NodeLiteralUtils'; -import { NodeUtils } from '../../node/NodeUtils'; +import { NodeMetadata } from '../../node/NodeMetadata'; @injectable() export class RenamePropertiesTransformer extends AbstractNodeTransformer { @@ -48,7 +48,7 @@ export class RenamePropertiesTransformer extends AbstractNodeTransformer { | ESTree.PropertyDefinition | ESTree.MemberExpression | ESTree.MethodDefinition - > ( + > ( propertyNode: TNode, propertyKeyNode: ESTree.Expression | ESTree.PrivateIdentifier ): propertyKeyNode is ESTree.Identifier | ESTree.Literal { @@ -56,7 +56,7 @@ export class RenamePropertiesTransformer extends AbstractNodeTransformer { return false; } - return NodeGuards.isIdentifierNode(propertyKeyNode) || NodeGuards.isLiteralNode(propertyKeyNode); + return true; } /** @@ -96,6 +96,15 @@ export class RenamePropertiesTransformer extends AbstractNodeTransformer { node: ESTree.Node, parentNode: ESTree.Node ): void { + if ((NodeGuards.isPropertyNode(parentNode) && parentNode.key === node) + || NodeGuards.isMemberExpressionNode(parentNode) && parentNode.property === node + || NodeGuards.isMethodDefinitionNode(parentNode) && parentNode.key === node + || NodeGuards.isPropertyDefinitionNode(parentNode) && parentNode.key === node) { + NodeMetadata.set(node, {propertyKeyToRenameNode: true}); + + return; + } + if (this.options.renamePropertiesMode === RenamePropertiesMode.Safe) { this.analyzeAutoExcludedPropertyNames(node, parentNode); } @@ -107,87 +116,35 @@ export class RenamePropertiesTransformer extends AbstractNodeTransformer { * @returns {Node} */ public transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node { - let propertyNode: ESTree.Node | null = null; - - if (NodeGuards.isPropertyNode(node)) { - propertyNode = this.transformPropertyNode(node); - } else if (NodeGuards.isPropertyDefinitionNode(node)) { - propertyNode = this.transformPropertyDefinitionNode(node); - } else if (NodeGuards.isMemberExpressionNode(node)) { - propertyNode = this.transformMemberExpressionNode(node); - } else if (NodeGuards.isMethodDefinitionNode(node)) { - propertyNode = this.transformMethodDefinitionNode(node); - } - - if (propertyNode) { - NodeUtils.parentizeNode(propertyNode, parentNode); + if (!NodeGuards.isIdentifierNode(node) && !NodeGuards.isLiteralNode(node)) { + return node; } - return node; - } - - /** - * @param {Property} propertyNode - * @returns {Property} - */ - private transformPropertyNode (propertyNode: ESTree.Property): ESTree.Property { - const propertyKeyNode: ESTree.Expression | ESTree.PrivateIdentifier = propertyNode.key; - - if (RenamePropertiesTransformer.isValidPropertyNode(propertyNode, propertyKeyNode)) { - propertyNode.key = this.renamePropertiesReplacer.replace(propertyKeyNode); - propertyNode.shorthand = false; - } - - return propertyNode; - } - - /** - * @param {PropertyDefinition} propertyNode - * @returns {PropertyDefinition} - */ - private transformPropertyDefinitionNode (propertyNode: ESTree.PropertyDefinition): ESTree.PropertyDefinition { - const propertyKeyNode: ESTree.Expression | ESTree.PrivateIdentifier = propertyNode.key; - - if (RenamePropertiesTransformer.isValidPropertyNode(propertyNode, propertyKeyNode)) { - propertyNode.key = this.renamePropertiesReplacer.replace(propertyKeyNode); + if (!NodeMetadata.isPropertyKeyToRenameNode(node)) { + return node; } - return propertyNode; - } + const isPropertyNode = NodeGuards.isPropertyNode(parentNode); + const isPropertyLikeNode = isPropertyNode + || NodeGuards.isPropertyDefinitionNode(parentNode) + || NodeGuards.isMemberExpressionNode(parentNode) + || NodeGuards.isMethodDefinitionNode(parentNode); - /** - * @param {Property} memberExpressionNode - * @returns {Property} - */ - private transformMemberExpressionNode (memberExpressionNode: ESTree.MemberExpression): ESTree.MemberExpression { - const propertyKeyNode: ESTree.Expression | ESTree.PrivateIdentifier = memberExpressionNode.property; - - if (RenamePropertiesTransformer.isValidPropertyNode(memberExpressionNode, propertyKeyNode)) { - memberExpressionNode.property = this.renamePropertiesReplacer.replace(propertyKeyNode); + if (isPropertyLikeNode && !RenamePropertiesTransformer.isValidPropertyNode(parentNode, node)) { + return node; } - return memberExpressionNode; - } - - /** - * @param {MethodDefinition} methodDefinitionNode - * @returns {MethodDefinition} - */ - private transformMethodDefinitionNode (methodDefinitionNode: ESTree.MethodDefinition): ESTree.MethodDefinition { - const propertyKeyNode: ESTree.Expression | ESTree.PrivateIdentifier = methodDefinitionNode.key; - - if (RenamePropertiesTransformer.isValidPropertyNode(methodDefinitionNode, propertyKeyNode)) { - methodDefinitionNode.key = this.renamePropertiesReplacer.replace(propertyKeyNode); + if (isPropertyNode) { + parentNode.shorthand = false; } - return methodDefinitionNode; + return this.renamePropertiesReplacer.replace(node); } /** * @param {Node} node * @param {Node} parentNode */ - // eslint-disable-next-line complexity private analyzeAutoExcludedPropertyNames ( node: ESTree.Node, parentNode: ESTree.Node @@ -196,15 +153,6 @@ export class RenamePropertiesTransformer extends AbstractNodeTransformer { return; } - if ( - (NodeGuards.isPropertyNode(parentNode) && parentNode.key === node) - || NodeGuards.isMemberExpressionNode(parentNode) && parentNode.property === node - || NodeGuards.isMethodDefinitionNode(parentNode) && parentNode.key === node - || NodeGuards.isPropertyDefinitionNode(parentNode) && parentNode.key === node - ) { - return; - } - this.renamePropertiesReplacer.excludePropertyName(node.value); } } diff --git a/src/node/NodeMetadata.ts b/src/node/NodeMetadata.ts index acb1e7e42..d3c57fb1a 100644 --- a/src/node/NodeMetadata.ts +++ b/src/node/NodeMetadata.ts @@ -39,6 +39,17 @@ export class NodeMetadata { return NodeMetadata.get(node, 'ignoredNode') === true; } + /** + * @param {Identifier | Literal} node + * @returns {boolean} + */ + public static isPropertyKeyToRenameNode (node: ESTree.Identifier | ESTree.Literal): boolean { + return NodeMetadata.get( + node, + 'propertyKeyToRenameNode' + ) === true; + } + /** * @param {Node} literalNode * @returns {boolean} diff --git a/test/dev/dev.ts b/test/dev/dev.ts index 3495e2fa8..ec778a488 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -1,55 +1,38 @@ 'use strict'; -import { StringArrayWrappersType } from '../../src/enums/node-transformers/string-array-transformers/StringArrayWrappersType'; - (function () { const JavaScriptObfuscator: any = require('../../index'); let obfuscatedCode: string = JavaScriptObfuscator.obfuscate( ` - function foo () { - function bar() { - var string1 = 'string1'; - var string2 = 'string2'; - var string3 = 'string3'; - var string4 = 'string4'; - var string5 = 'string5'; - var string6 = 'string6'; - - function bark () { - var string1 = 'string1'; - var string2 = 'string2'; - var string3 = 'string3'; - var string4 = 'string4'; - var string5 = 'string5'; - var string6 = 'string6'; - } - } - - bar() + var obj = { + foo: 1 } - - console.log(foo()); `, { - identifierNamesGenerator: 'mangled', - compact: false, - controlFlowFlattening: false, - controlFlowFlatteningThreshold: 1, - simplify: false, - stringArrayRotate: false, - stringArray: true, - stringArrayIndexesType: [ - 'hexadecimal-number', - 'hexadecimal-numeric-string' - ], - stringArrayThreshold: 1, - stringArrayCallsTransform: true, - stringArrayCallsTransformThreshold: 1, - rotateStringArray: true, - stringArrayWrappersType: StringArrayWrappersType.Function, - transformObjectKeys: false, - seed: 1 + "compact": false, + "controlFlowFlattening": true, + "controlFlowFlatteningThreshold": 1, + "disableConsoleOutput": false, + "identifierNamesGenerator": "mangled", + "log": true, + "numbersToExpressions": true, + "renameProperties": true, + "renamePropertiesMode": "safe", + "simplify": false, + "stringArray": true, + "stringArrayCallsTransform": true, + "stringArrayIndexShift": true, + "stringArrayRotate": false, + "stringArrayShuffle": false, + "stringArrayWrappersCount": 5, + "stringArrayWrappersChainedCalls": true, + "stringArrayWrappersParametersMaxCount": 5, + "stringArrayWrappersType": "function", + "stringArrayThreshold": 0, + "transformObjectKeys": true, + "unicodeEscapeSequence": false, + "ignoreRequireImports": false } ).getObfuscatedCode(); diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts index 1ab7f1adc..4ea956aa0 100644 --- a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/StringLiteralControlFlowReplacer.spec.ts @@ -3,6 +3,7 @@ import { assert } from 'chai'; import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; import { readFileAsString } from '../../../../../helpers/readFileAsString'; +import { getRegExpMatch } from '../../../../../helpers/getRegExpMatch'; import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; @@ -10,34 +11,67 @@ describe('StringLiteralControlFlowReplacer', () => { describe('replace', () => { const variableMatch: string = '_0x([a-f0-9]){4,6}'; - const controlFlowStorageStringLiteralRegExp: RegExp = new RegExp( - `var ${variableMatch} *= *\\{'\\w{5}' *: *'test'\\};` - ); - const controlFlowStorageCallRegExp: RegExp = new RegExp( - `var ${variableMatch} *= *${variableMatch}\\['\\w{5}'\\];` - ); - - let obfuscatedCode: string; - - before(() => { - const code: string = readFileAsString(__dirname + '/fixtures/input-1.js'); - - obfuscatedCode = JavaScriptObfuscator.obfuscate( - code, - { - ...NO_ADDITIONAL_NODES_PRESET, - controlFlowFlattening: true, - controlFlowFlatteningThreshold: 1 - } - ).getObfuscatedCode(); - }); + describe('Variant #1 - base behavior', () => { + + const controlFlowStorageStringLiteralRegExp: RegExp = new RegExp( + `var ${variableMatch} *= *\\{'\\w{5}' *: *'test'\\};` + ); + const controlFlowStorageCallRegExp: RegExp = new RegExp( + `var ${variableMatch} *= *${variableMatch}\\['\\w{5}'\\];` + ); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/input-1.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ).getObfuscatedCode(); + }); + + it('should add string literal node as property of control flow storage node', () => { + assert.match(obfuscatedCode, controlFlowStorageStringLiteralRegExp); + }); - it('should add string literal node as property of control flow storage node', () => { - assert.match(obfuscatedCode, controlFlowStorageStringLiteralRegExp); + it('should replace string literal node with call to control flow storage node', () => { + assert.match(obfuscatedCode, controlFlowStorageCallRegExp); + }); }); - it('should replace string literal node with call to control flow storage node', () => { - assert.match(obfuscatedCode, controlFlowStorageCallRegExp); + describe('Variant #2 - same storage key for same string values', () => { + const storageKeyRegExp: RegExp = /'(\w{5})': 'value'/; + const expectedStorageCallsMatchesCount: number = 5; + + let storageCallsMatchesCount: number; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/same-storage-key-for-same-string-values.js'); + + const obfuscatedCode: string = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + compact: false, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ).getObfuscatedCode(); + + const storageKeyMatch = getRegExpMatch(obfuscatedCode, storageKeyRegExp); + const storageCallsRegExp = new RegExp(`${variableMatch}\\[\'${storageKeyMatch}\']`, 'g') + + storageCallsMatchesCount = obfuscatedCode.match(storageCallsRegExp)?.length ?? 0; + }); + + it('should add string literal nodes with same values under same storage item', () => { + assert.equal(storageCallsMatchesCount, expectedStorageCallsMatchesCount); + }); }); }); }); diff --git a/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/fixtures/same-storage-key-for-same-string-values.js b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/fixtures/same-storage-key-for-same-string-values.js new file mode 100644 index 000000000..a1ab8e9be --- /dev/null +++ b/test/functional-tests/node-transformers/control-flow-transformers/control-flow-replacers/string-litertal-control-flow-replacer/fixtures/same-storage-key-for-same-string-values.js @@ -0,0 +1,7 @@ +(function () { + var string1 = 'value'; + var string2 = 'value'; + var string3 = 'value'; + var string4 = 'value'; + var string5 = 'value'; +})(); diff --git a/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/RenamePropertiesTransformer.spec.ts b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/RenamePropertiesTransformer.spec.ts index 49631241d..8f0a46efe 100644 --- a/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/RenamePropertiesTransformer.spec.ts +++ b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/RenamePropertiesTransformer.spec.ts @@ -411,6 +411,70 @@ describe('RenamePropertiesTransformer', () => { assert.match(obfuscatedCode, propertyRegExp); }); }); + + describe('Variant #10: integration with `controlFlowFlattening` option', () => { + const propertyRegExp: RegExp = new RegExp( + 'const b *= *{ *' + + '\'\\w{5}\' *: *\'a\' *' + + '}; *' + + 'const c *= *{' + + '\'a\': *0x1' + + '};' + + 'c\\[b\\[\'\\w{5}\']];' + ); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/control-flow-flattening-integration.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + renameProperties: true, + renamePropertiesMode: RenamePropertiesMode.Unsafe, + identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator, + controlFlowFlattening: true, + controlFlowFlatteningThreshold: 1 + } + ).getObfuscatedCode(); + }); + + it('Should correctly rename property when `controlFlowFlattening` option is enabled', () => { + assert.match(obfuscatedCode, propertyRegExp); + }); + }); + + describe('Variant #11: integration with `transformObjectKeys` option', () => { + const propertyRegExp: RegExp = new RegExp( + 'const b *= *{}; *' + + 'b\\[\'a\'] *= *0x1;' + + 'const foo *= *b;' + + 'foo\\[\'a\'];' + ); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/transform-object-keys-integration.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + renameProperties: true, + renamePropertiesMode: RenamePropertiesMode.Unsafe, + identifierNamesGenerator: IdentifierNamesGenerator.MangledIdentifierNamesGenerator, + transformObjectKeys: true + } + ).getObfuscatedCode(); + }); + + it('Should correctly rename property when `transformObjectKeys` option is enabled', () => { + assert.match(obfuscatedCode, propertyRegExp); + }); + }); }); describe('Variant #3: Ignored literal node type', () => { diff --git a/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/control-flow-flattening-integration.js b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/control-flow-flattening-integration.js new file mode 100644 index 000000000..a332d3c22 --- /dev/null +++ b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/control-flow-flattening-integration.js @@ -0,0 +1,6 @@ +(() => { + const foo = { + bar: 1 + }; + foo['bar']; +})(); \ No newline at end of file diff --git a/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/transform-object-keys-integration.js b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/transform-object-keys-integration.js new file mode 100644 index 000000000..00ecbaaed --- /dev/null +++ b/test/functional-tests/node-transformers/rename-properties-transformers/rename-properties-transformer/fixtures/transform-object-keys-integration.js @@ -0,0 +1,4 @@ +const foo = { + bar: 1 +}; +foo['bar']; \ No newline at end of file diff --git a/test/functional-tests/node-transformers/string-array-transformers/string-array-rotate-function-transformer/StringArrayRotateFunctionTransformer.spec.ts b/test/functional-tests/node-transformers/string-array-transformers/string-array-rotate-function-transformer/StringArrayRotateFunctionTransformer.spec.ts index c3176699c..a5b99b10b 100644 --- a/test/functional-tests/node-transformers/string-array-transformers/string-array-rotate-function-transformer/StringArrayRotateFunctionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/string-array-transformers/string-array-rotate-function-transformer/StringArrayRotateFunctionTransformer.spec.ts @@ -132,13 +132,14 @@ describe('StringArrayRotateFunctionTransformer', function () { }); describe('Code evaluation', function () { - this.timeout(100000); + const samplesCount: number = 50; + const evaluationTimeout: number = 5000; - const samplesCount: number = 100; + this.timeout(samplesCount * evaluationTimeout); let hasRuntimeErrors: boolean = false; - before(() => { + before(async() => { const code: string = readFileAsString(__dirname + '/fixtures/code-evaluation.js'); const obfuscateFunc = () => { @@ -186,7 +187,10 @@ describe('StringArrayRotateFunctionTransformer', function () { for (let i = 0; i < samplesCount; i++) { try { - const evaluationResult = eval(obfuscateFunc()); + const evaluationResult = await evaluateInWorker( + obfuscateFunc(), + evaluationTimeout + ); if (evaluationResult !== 'fooooooo') { hasRuntimeErrors = true; @@ -205,7 +209,7 @@ describe('StringArrayRotateFunctionTransformer', function () { }); describe('Prevent early successful comparison', () => { - const evaluationTimeout: number = 1000; + const evaluationTimeout: number = 1000; const samplesCount: number = 100; let numberNumericalExpressionAnalyzerAnalyzeStub: sinon.SinonStub; diff --git a/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts index c73a84360..2ce34c5df 100644 --- a/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts +++ b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts @@ -86,6 +86,24 @@ describe('NodeMetadata', () => { }); }); + describe('propertyKeyToRenameNode', () => { + const expectedValue: boolean = true; + + let node: ESTree.Identifier, + value: boolean | undefined; + + before(() => { + node = NodeFactory.identifierNode('foo'); + node.metadata = {}; + node.metadata.propertyKeyToRenameNode = true; + value = NodeMetadata.isPropertyKeyToRenameNode(node); + }); + + it('should return metadata value', () => { + assert.equal(value, expectedValue); + }); + }); + describe('isStringArrayCallLiteralNode', () => { const expectedValue: boolean = true; From 92535aa0c069bccfc651f16e214693348e123c4b Mon Sep 17 00:00:00 2001 From: Seho <35763284+1018715564@users.noreply.github.com> Date: Sun, 13 Feb 2022 02:51:24 +0800 Subject: [PATCH 03/32] Added .mjs and .cjs support (#1059) --- src/cli/utils/CLIUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cli/utils/CLIUtils.ts b/src/cli/utils/CLIUtils.ts index a0a1a3495..f52a3a6e0 100644 --- a/src/cli/utils/CLIUtils.ts +++ b/src/cli/utils/CLIUtils.ts @@ -10,7 +10,9 @@ export class CLIUtils { */ public static readonly allowedConfigFileExtensions: string[] = [ '.js', - '.json' + '.json', + '.mjs', + '.cjs' ]; /** @@ -24,7 +26,7 @@ export class CLIUtils { const isValidExtension: boolean = CLIUtils.allowedConfigFileExtensions.includes(configFileExtension); if (!isValidExtension) { - throw new ReferenceError('Given config path must be a valid `.js` or `.json` file path'); + throw new ReferenceError('Given config path must be a valid `.js|.mjs|.cjs` or `.json` file path'); } try { From 496a6109dc3e30c3a990f902ee118d4aa3fa795d Mon Sep 17 00:00:00 2001 From: sanex Date: Sat, 12 Feb 2022 22:01:43 +0300 Subject: [PATCH 04/32] `.cjs` file support for config files --- src/cli/utils/CLIUtils.ts | 1 - test/fixtures/config.cjs | 6 ++++++ test/unit-tests/cli/utils/CLIUtils.spec.ts | 24 +++++++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/config.cjs diff --git a/src/cli/utils/CLIUtils.ts b/src/cli/utils/CLIUtils.ts index f52a3a6e0..50ce31869 100644 --- a/src/cli/utils/CLIUtils.ts +++ b/src/cli/utils/CLIUtils.ts @@ -11,7 +11,6 @@ export class CLIUtils { public static readonly allowedConfigFileExtensions: string[] = [ '.js', '.json', - '.mjs', '.cjs' ]; diff --git a/test/fixtures/config.cjs b/test/fixtures/config.cjs new file mode 100644 index 000000000..dbc86fce1 --- /dev/null +++ b/test/fixtures/config.cjs @@ -0,0 +1,6 @@ +module.exports = { + compact: true, + exclude: ['**/foo.js'], + selfDefending: false, + sourceMap: true +}; \ No newline at end of file diff --git a/test/unit-tests/cli/utils/CLIUtils.spec.ts b/test/unit-tests/cli/utils/CLIUtils.spec.ts index 44fd15c08..30d1fa6ba 100644 --- a/test/unit-tests/cli/utils/CLIUtils.spec.ts +++ b/test/unit-tests/cli/utils/CLIUtils.spec.ts @@ -31,7 +31,29 @@ describe('CLIUtils', () => { }); }); - describe('Variant #2: json file with config', () => { + describe('Variant #2: cjs file with config', () => { + const configDirName: string = 'test/fixtures'; + const configFileName: string = 'config.cjs'; + const configFilePath: string = `../../../${configDirName}/${configFileName}`; + const expectedResult: TInputOptions = { + compact: true, + exclude: ['**/foo.js'], + selfDefending: false, + sourceMap: true + }; + + let result: Object; + + before(() => { + result = CLIUtils.getUserConfig(configFilePath); + }); + + it('should return object with user configuration', () => { + assert.deepEqual(result, expectedResult); + }); + }); + + describe('Variant #3: json file with config', () => { const configDirName: string = 'test/fixtures'; const configFileName: string = 'config.json'; const configFilePath: string = `../../../${configDirName}/${configFileName}`; From c4dae419ebbff39676d87f34508c3a74ff749411 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 12 Feb 2022 22:05:04 +0300 Subject: [PATCH 05/32] Bump ajv from 6.12.0 to 6.12.6 (#1061) --- yarn.lock | 41 ++++++++--------------------------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/yarn.lock b/yarn.lock index a5beeb577..898329c22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -876,27 +876,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0: - version "6.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - 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@^6.12.4: - version "6.12.4" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz" - integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== - 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@^6.12.5: +ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1941,16 +1921,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -fast-deep-equal@3.1.3, fast-deep-equal@^3.1.3: +fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 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== -fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== - fast-glob@^3.1.1: version "3.2.5" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" @@ -1965,7 +1940,7 @@ fast-glob@^3.1.1: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + 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: @@ -2813,7 +2788,7 @@ json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + 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: @@ -3544,7 +3519,7 @@ pseudomap@^1.0.2: punycode@^2.1.0: version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + 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: @@ -4303,9 +4278,9 @@ universalify@^2.0.0: integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + 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" From 30ba697c5511baaf5076cbf0e4f21d1313e4ae76 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Mon, 14 Feb 2022 14:34:39 +0300 Subject: [PATCH 06/32] Fixed cases when dead code is added to the inner code of `eval` expressions (#1062) Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053 --- CHANGELOG.md | 4 ++ package.json | 2 +- src/declarations/ESTree.d.ts | 8 +++ .../DeadCodeInjectionTransformer.ts | 14 ++++- .../EvalCallExpressionTransformer.ts | 63 +++++++++---------- src/node/NodeMetadata.ts | 8 +++ .../DeadCodeInjectionTransformer.spec.ts | 29 +++++++++ ...call-expression-transformer-integration.js | 25 ++++++++ .../node/node-metadata/NodeMetadata.spec.ts | 18 ++++++ 9 files changed, 135 insertions(+), 36 deletions(-) create mode 100644 test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/eval-call-expression-transformer-integration.js diff --git a/CHANGELOG.md b/CHANGELOG.md index baedc626f..ef3cad90e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v3.2.7 +--- +* Fixed cases when dead code is added to the inner code of `eval` expressions. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053 + v3.2.6 --- * Improved integration between `renameProperties` and `controlFlowFlattening` options. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053 diff --git a/package.json b/package.json index d7a401967..0b635739e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "3.2.6", + "version": "3.2.7", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/declarations/ESTree.d.ts b/src/declarations/ESTree.d.ts index b11c2b821..2b4bed810 100644 --- a/src/declarations/ESTree.d.ts +++ b/src/declarations/ESTree.d.ts @@ -13,6 +13,10 @@ declare module 'estree' { ignoredNode?: boolean; } + export interface FunctionExpressionNodeMetadata extends BaseNodeMetadata { + evalHostNode?: boolean; + } + export interface IdentifierNodeMetadata extends BaseNodeMetadata { propertyKeyToRenameNode?: boolean } @@ -40,6 +44,10 @@ declare module 'estree' { loc?: acorn.SourceLocation; } + interface FunctionExpression extends BaseFunction, BaseExpression { + metadata?: FunctionExpressionNodeMetadata; + } + interface Program extends BaseNode { scope?: eslintScope.Scope | null; } diff --git a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts index abf6b85d0..d1fd7bb15 100644 --- a/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts +++ b/src/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.ts @@ -23,6 +23,7 @@ import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { BlockStatementDeadCodeInjectionNode } from '../../custom-nodes/dead-code-injection-nodes/BlockStatementDeadCodeInjectionNode'; import { NodeFactory } from '../../node/NodeFactory'; import { NodeGuards } from '../../node/NodeGuards'; +import { NodeMetadata } from '../../node/NodeMetadata'; import { NodeStatementUtils } from '../../node/NodeStatementUtils'; import { NodeUtils } from '../../node/NodeUtils'; @@ -184,9 +185,18 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { /** * @param {BlockStatement} blockStatementNode + * @param {Node} parentNode * @returns {boolean} */ - private static isValidWrappedBlockStatementNode (blockStatementNode: ESTree.BlockStatement): boolean { + private static isValidWrappedBlockStatementNode (blockStatementNode: ESTree.BlockStatement, parentNode: ESTree.Node): boolean { + /** + * Special case for ignoring all EvalHost nodes that are added by EvalCallExpressionTransformer + * So, all content of eval expressions should not be affected by dead code injection + */ + if (NodeMetadata.isEvalHostNode(parentNode)) { + return false; + } + if (!blockStatementNode.body.length) { return false; } @@ -303,7 +313,7 @@ export class DeadCodeInjectionTransformer extends AbstractNodeTransformer { if ( this.randomGenerator.getMathRandom() > this.options.deadCodeInjectionThreshold - || !DeadCodeInjectionTransformer.isValidWrappedBlockStatementNode(blockStatementNode) + || !DeadCodeInjectionTransformer.isValidWrappedBlockStatementNode(blockStatementNode, parentNode) ) { return blockStatementNode; } diff --git a/src/node-transformers/preparing-transformers/EvalCallExpressionTransformer.ts b/src/node-transformers/preparing-transformers/EvalCallExpressionTransformer.ts index babab53cf..f762fe446 100644 --- a/src/node-transformers/preparing-transformers/EvalCallExpressionTransformer.ts +++ b/src/node-transformers/preparing-transformers/EvalCallExpressionTransformer.ts @@ -13,6 +13,7 @@ import { NodeTransformationStage } from '../../enums/node-transformers/NodeTrans import { AbstractNodeTransformer } from '../AbstractNodeTransformer'; import { NodeFactory } from '../../node/NodeFactory'; import { NodeGuards } from '../../node/NodeGuards'; +import { NodeMetadata } from '../../node/NodeMetadata'; import { NodeUtils } from '../../node/NodeUtils'; import { StringUtils } from '../../utils/StringUtils'; @@ -27,11 +28,6 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { NodeTransformer.VariablePreserveTransformer ]; - /** - * @type {Set } - */ - private readonly evalRootAstHostNodeSet: Set = new Set(); - /** * @param {IRandomGenerator} randomGenerator * @param {IOptions} options @@ -93,25 +89,16 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { case NodeTransformationStage.Preparing: return { enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => { - if ( - parentNode - && NodeGuards.isCallExpressionNode(node) - && NodeGuards.isIdentifierNode(node.callee) - && node.callee.name === 'eval' - ) { + if (parentNode) { return this.transformNode(node, parentNode); } } }; case NodeTransformationStage.Finalizing: - if (!this.evalRootAstHostNodeSet.size) { - return null; - } - return { leave: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => { - if (parentNode && this.isEvalRootAstHostNode(node)) { + if (parentNode) { return this.restoreNode(node, parentNode); } } @@ -123,22 +110,31 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { } /** - * @param {CallExpression} callExpressionNode + * @param {Node} node * @param {Node} parentNode * @returns {Node} */ - public transformNode (callExpressionNode: ESTree.CallExpression, parentNode: ESTree.Node): ESTree.Node { - const callExpressionFirstArgument: ESTree.Expression | ESTree.SpreadElement | undefined = callExpressionNode.arguments[0]; + public transformNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node { + const isEvalCallExpressionNode = parentNode + && NodeGuards.isCallExpressionNode(node) + && NodeGuards.isIdentifierNode(node.callee) + && node.callee.name === 'eval'; + + if (!isEvalCallExpressionNode) { + return node; + } + + const evalCallExpressionFirstArgument: ESTree.Expression | ESTree.SpreadElement | undefined = node.arguments[0]; - if (!callExpressionFirstArgument) { - return callExpressionNode; + if (!evalCallExpressionFirstArgument) { + return node; } const evalString: string | null = EvalCallExpressionTransformer - .extractEvalStringFromCallExpressionArgument(callExpressionFirstArgument); + .extractEvalStringFromCallExpressionArgument(evalCallExpressionFirstArgument); if (!evalString) { - return callExpressionNode; + return node; } let ast: ESTree.Statement[]; @@ -147,7 +143,7 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { try { ast = NodeUtils.convertCodeToStructure(evalString); } catch { - return callExpressionNode; + return node; } /** @@ -157,24 +153,25 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { const evalRootAstHostNode: ESTree.FunctionExpression = NodeFactory .functionExpressionNode([], NodeFactory.blockStatementNode(ast)); + NodeMetadata.set(evalRootAstHostNode, { evalHostNode: true }); + NodeUtils.parentizeAst(evalRootAstHostNode); NodeUtils.parentizeNode(evalRootAstHostNode, parentNode); - /** - * we should store that host node and then extract AST-tree on the `finalizing` stage - */ - this.evalRootAstHostNodeSet.add(evalRootAstHostNode); - return evalRootAstHostNode; } /** - * @param {FunctionExpression} evalRootAstHostNode + * @param {Node} node * @param {Node} parentNode * @returns {Node} */ - public restoreNode (evalRootAstHostNode: ESTree.FunctionExpression, parentNode: ESTree.Node): ESTree.Node { - const targetAst: ESTree.Statement[] = evalRootAstHostNode.body.body; + public restoreNode (node: ESTree.Node, parentNode: ESTree.Node): ESTree.Node { + if (!this.isEvalRootAstHostNode(node)) { + return node; + } + + const targetAst: ESTree.Statement[] = node.body.body; const obfuscatedCode: string = NodeUtils.convertStructureToCode(targetAst); return NodeFactory.callExpressionNode( @@ -190,6 +187,6 @@ export class EvalCallExpressionTransformer extends AbstractNodeTransformer { * @returns {boolean} */ private isEvalRootAstHostNode (node: ESTree.Node): node is ESTree.FunctionExpression { - return NodeGuards.isFunctionExpressionNode(node) && this.evalRootAstHostNodeSet.has(node); + return NodeMetadata.isEvalHostNode(node); } } diff --git a/src/node/NodeMetadata.ts b/src/node/NodeMetadata.ts index d3c57fb1a..aa93c85c4 100644 --- a/src/node/NodeMetadata.ts +++ b/src/node/NodeMetadata.ts @@ -23,6 +23,14 @@ export class NodeMetadata { : undefined; } + /** + * @param {Node} node + * @returns {boolean} + */ + public static isEvalHostNode (node: ESTree.Node): boolean { + return NodeMetadata.get(node, 'evalHostNode') === true; + } + /** * @param {Node} node * @returns {boolean} diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts index 239f152a4..8024e4b13 100644 --- a/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/DeadCodeInjectionTransformer.spec.ts @@ -1090,5 +1090,34 @@ describe('DeadCodeInjectionTransformer', () => { assert.equal(matchesLength, expectedMatchesLength); }); }); + + describe('Variant #13 - correct integration with `EvalCallExpressionTransformer`', () => { + const evalWithDeadCodeRegExp: RegExp = new RegExp( + `eval\\(\'if *\\(${variableMatch}`, + 'g' + ); + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/eval-call-expression-transformer-integration.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + deadCodeInjection: true, + deadCodeInjectionThreshold: 1, + stringArray: true, + stringArrayThreshold: 1 + } + ).getObfuscatedCode(); + console.log(obfuscatedCode); + }); + + it('match #1: shouldn\'t add dead code to the eval call expression', () => { + assert.notMatch(obfuscatedCode, evalWithDeadCodeRegExp); + }); + }); }); }); diff --git a/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/eval-call-expression-transformer-integration.js b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/eval-call-expression-transformer-integration.js new file mode 100644 index 000000000..ad61ed115 --- /dev/null +++ b/test/functional-tests/node-transformers/dead-code-injection-transformers/fixtures/eval-call-expression-transformer-integration.js @@ -0,0 +1,25 @@ +(function(){ + if (true) { + var foo = function () { + return true; + }; + var bar = function () { + return true; + }; + var baz = function () { + return true; + }; + var bark = function () { + return true; + }; + + if (true) { + eval('const eval = 1'); + } + + foo(); + bar(); + baz(); + bark(); + } +})(); \ No newline at end of file diff --git a/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts index 2ce34c5df..b508077b3 100644 --- a/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts +++ b/test/unit-tests/node/node-metadata/NodeMetadata.spec.ts @@ -50,6 +50,24 @@ describe('NodeMetadata', () => { }); }); + describe('isEvalHostNode', () => { + const expectedValue: boolean = true; + + let node: ESTree.FunctionExpression, + value: boolean | undefined; + + before(() => { + node = NodeFactory.functionExpressionNode([], NodeFactory.blockStatementNode([])); + node.metadata = {}; + node.metadata.evalHostNode = true; + value = NodeMetadata.isEvalHostNode(node); + }); + + it('should return metadata value', () => { + assert.equal(value, expectedValue); + }); + }); + describe('isForceTransformNode', () => { const expectedValue: boolean = true; From e8e92c601d5d6e50b36c03274f88f358a1943e18 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Mon, 14 Feb 2022 19:06:05 +0300 Subject: [PATCH 07/32] `debugProtectionInteraval` option now accepts value in milliseconds instead of `boolean` value (#1063) --- CHANGELOG.md | 4 + README.md | 16 ++-- package.json | 2 +- src/cli/JavaScriptObfuscatorCLI.ts | 6 +- ...bugProtectionFunctionIntervalCodeHelper.ts | 21 ++++- .../group/DebugProtectionCodeHelperGroup.ts | 2 +- ...DebugProtectionFunctionIntervalTemplate.ts | 8 +- .../DebugProtectionFunctionTemplate.ts | 1 - src/interfaces/options/IOptions.ts | 2 +- src/options/Options.ts | 7 +- src/options/presets/Default.ts | 2 +- src/options/presets/HighObfuscation.ts | 2 +- src/options/presets/NoCustomNodes.ts | 2 +- ...ebugProtectionFunctionCallTemplate.spec.ts | 12 +-- .../fixtures/input.js | 0 .../fixtures/single-call.js | 0 ...ProtectionFunctionIntervalTemplate.spec.ts | 90 +++++++++++++++++++ .../fixtures/input.js | 3 + .../JavaScriptObfuscator.spec.ts | 2 +- test/index.spec.ts | 3 +- .../JavaScriptObfuscatorMemory.spec.ts | 2 +- 21 files changed, 152 insertions(+), 35 deletions(-) rename test/functional-tests/custom-code-helpers/debug-protection/templates/{ => debug-protection-function-call-template}/DebugProtectionFunctionCallTemplate.spec.ts (92%) rename test/functional-tests/custom-code-helpers/debug-protection/templates/{ => debug-protection-function-call-template}/fixtures/input.js (100%) rename test/functional-tests/custom-code-helpers/debug-protection/templates/{ => debug-protection-function-call-template}/fixtures/single-call.js (100%) create mode 100644 test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/DebugProtectionFunctionIntervalTemplate.spec.ts create mode 100644 test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/fixtures/input.js diff --git a/CHANGELOG.md b/CHANGELOG.md index ef3cad90e..94cea2066 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v4.0.0 +--- +* **Breaking change:** `debugProtectionInteraval` option now accepts value in milliseconds instead of `boolean` value. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1031 + v3.2.7 --- * Fixed cases when dead code is added to the inner code of `eval` expressions. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1053 diff --git a/README.md b/README.md index e8d192981..19b21feac 100644 --- a/README.md +++ b/README.md @@ -349,7 +349,7 @@ Following options are available for the JS Obfuscator: deadCodeInjection: false, deadCodeInjectionThreshold: 0.4, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: false, domainLock: [], domainLockRedirectUrl: 'about:blank', @@ -413,7 +413,7 @@ Following options are available for the JS Obfuscator: --dead-code-injection --dead-code-injection-threshold --debug-protection - --debug-protection-interval + --debug-protection-interval --disable-console-output --domain-lock '' (comma separated) --domain-lock-redirect-url @@ -678,11 +678,11 @@ Type: `boolean` Default: `false` This option makes it almost impossible to use the `debugger` function of the Developer Tools (both on WebKit-based and Mozilla Firefox). ### `debugProtectionInterval` -Type: `boolean` Default: `false` +Type: `number` Default: `0` ##### :warning: Can freeze your browser! Use at own risk. -If checked, an interval is used to force the debug mode on the Console tab, making it harder to use other features of the Developer Tools. Works if [`debugProtection`](#debugprotection) is enabled. +If set, an interval in milliseconds is used to force the debug mode on the Console tab, making it harder to use other features of the Developer Tools. Works if [`debugProtection`](#debugprotection) is enabled. Recommended value is between `2000` and `4000` milliseconds. ### `disableConsoleOutput` Type: `boolean` Default: `false` @@ -1507,7 +1507,7 @@ The performance will be much slower than without obfuscation deadCodeInjection: true, deadCodeInjectionThreshold: 1, debugProtection: true, - debugProtectionInterval: true, + debugProtectionInterval: 4000, disableConsoleOutput: true, identifierNamesGenerator: 'hexadecimal', log: false, @@ -1545,7 +1545,7 @@ The performance will be slower than without obfuscation deadCodeInjection: true, deadCodeInjectionThreshold: 0.4, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: true, identifierNamesGenerator: 'hexadecimal', log: false, @@ -1582,7 +1582,7 @@ The performance will be at a relatively normal level controlFlowFlattening: false, deadCodeInjection: false, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: true, identifierNamesGenerator: 'hexadecimal', log: false, @@ -1614,7 +1614,7 @@ The performance will be at a relatively normal level controlFlowFlattening: false, deadCodeInjection: false, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: false, identifierNamesGenerator: 'hexadecimal', log: false, diff --git a/package.json b/package.json index 0b635739e..40cda55bc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "3.2.7", + "version": "4.0.0", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/cli/JavaScriptObfuscatorCLI.ts b/src/cli/JavaScriptObfuscatorCLI.ts index cc9428eb3..2a10bd115 100644 --- a/src/cli/JavaScriptObfuscatorCLI.ts +++ b/src/cli/JavaScriptObfuscatorCLI.ts @@ -223,9 +223,9 @@ export class JavaScriptObfuscatorCLI implements IInitializable { BooleanSanitizer ) .option( - '--debug-protection-interval ', - 'Disable browser Debug panel even after page was loaded (can cause DevTools enabled browser freeze)', - BooleanSanitizer + '--debug-protection-interval ', + 'Sets interval in milliseconds for debug protection so it is working even after page was loaded (can cause DevTools enabled browser freeze)', + parseInt ) .option( '--disable-console-output ', diff --git a/src/custom-code-helpers/debug-protection/DebugProtectionFunctionIntervalCodeHelper.ts b/src/custom-code-helpers/debug-protection/DebugProtectionFunctionIntervalCodeHelper.ts index 2fa806d5a..686d32e53 100644 --- a/src/custom-code-helpers/debug-protection/DebugProtectionFunctionIntervalCodeHelper.ts +++ b/src/custom-code-helpers/debug-protection/DebugProtectionFunctionIntervalCodeHelper.ts @@ -9,9 +9,12 @@ import { ICustomCodeHelperObfuscator } from '../../interfaces/custom-code-helper import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; +import { ObfuscationTarget } from '../../enums/ObfuscationTarget'; + import { initializable } from '../../decorators/Initializable'; import { DebugProtectionFunctionIntervalTemplate } from './templates/debug-protection-function-interval/DebugProtectionFunctionIntervalTemplate'; +import { GlobalVariableNoEvalTemplate } from '../common/templates/GlobalVariableNoEvalTemplate'; import { AbstractCustomCodeHelper } from '../AbstractCustomCodeHelper'; import { NodeUtils } from '../../node/NodeUtils'; @@ -24,6 +27,12 @@ export class DebugProtectionFunctionIntervalCodeHelper extends AbstractCustomCod @initializable() private debugProtectionFunctionName!: string; + /** + * @type {number} + */ + @initializable() + private debugProtectionInterval!: number; + /** * @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory * @param {ICustomCodeHelperFormatter} customCodeHelperFormatter @@ -50,9 +59,11 @@ export class DebugProtectionFunctionIntervalCodeHelper extends AbstractCustomCod /** * @param {string} debugProtectionFunctionName + * @param {number} debugProtectionInterval */ - public initialize (debugProtectionFunctionName: string): void { + public initialize (debugProtectionFunctionName: string, debugProtectionInterval: number): void { this.debugProtectionFunctionName = debugProtectionFunctionName; + this.debugProtectionInterval = debugProtectionInterval; } /** @@ -67,8 +78,14 @@ export class DebugProtectionFunctionIntervalCodeHelper extends AbstractCustomCod * @returns {string} */ protected override getCodeHelperTemplate (): string { + const globalVariableTemplate: string = this.options.target !== ObfuscationTarget.BrowserNoEval + ? this.getGlobalVariableTemplate() + : GlobalVariableNoEvalTemplate(); + return this.customCodeHelperFormatter.formatTemplate(DebugProtectionFunctionIntervalTemplate(), { - debugProtectionFunctionName: this.debugProtectionFunctionName + debugProtectionFunctionName: this.debugProtectionFunctionName, + debugProtectionInterval: this.debugProtectionInterval, + globalVariableTemplate }); } } diff --git a/src/custom-code-helpers/debug-protection/group/DebugProtectionCodeHelperGroup.ts b/src/custom-code-helpers/debug-protection/group/DebugProtectionCodeHelperGroup.ts index d8827a35e..cfe5e9840 100644 --- a/src/custom-code-helpers/debug-protection/group/DebugProtectionCodeHelperGroup.ts +++ b/src/custom-code-helpers/debug-protection/group/DebugProtectionCodeHelperGroup.ts @@ -124,7 +124,7 @@ export class DebugProtectionCodeHelperGroup extends AbstractCustomCodeHelperGrou : nodeWithStatements.body.length; const randomIndex: number = this.randomGenerator.getRandomInteger(0, programBodyLength); - customCodeHelper.initialize(debugProtectionFunctionName); + customCodeHelper.initialize(debugProtectionFunctionName, this.options.debugProtectionInterval); NodeAppender.insertAtIndex(nodeWithStatements, customCodeHelper.getNode(), randomIndex); } diff --git a/src/custom-code-helpers/debug-protection/templates/debug-protection-function-interval/DebugProtectionFunctionIntervalTemplate.ts b/src/custom-code-helpers/debug-protection/templates/debug-protection-function-interval/DebugProtectionFunctionIntervalTemplate.ts index d1bdb7d37..fca700e54 100644 --- a/src/custom-code-helpers/debug-protection/templates/debug-protection-function-interval/DebugProtectionFunctionIntervalTemplate.ts +++ b/src/custom-code-helpers/debug-protection/templates/debug-protection-function-interval/DebugProtectionFunctionIntervalTemplate.ts @@ -3,8 +3,10 @@ */ export function DebugProtectionFunctionIntervalTemplate (): string { return ` - setInterval(function () { - {debugProtectionFunctionName}(); - }, 4000); + (function () { + {globalVariableTemplate} + + that.setInterval({debugProtectionFunctionName}, {debugProtectionInterval}); + })(); `; } diff --git a/src/custom-code-helpers/debug-protection/templates/debug-protection-function/DebugProtectionFunctionTemplate.ts b/src/custom-code-helpers/debug-protection/templates/debug-protection-function/DebugProtectionFunctionTemplate.ts index 8f2ee49db..ef61656ff 100644 --- a/src/custom-code-helpers/debug-protection/templates/debug-protection-function/DebugProtectionFunctionTemplate.ts +++ b/src/custom-code-helpers/debug-protection/templates/debug-protection-function/DebugProtectionFunctionTemplate.ts @@ -5,7 +5,6 @@ export function DebugProtectionFunctionTemplate (): string { return ` function {debugProtectionFunctionName} (ret) { function debuggerProtection (counter) { - {debuggerTemplate} debuggerProtection(++counter); diff --git a/src/interfaces/options/IOptions.ts b/src/interfaces/options/IOptions.ts index 4675d5c7d..018909719 100644 --- a/src/interfaces/options/IOptions.ts +++ b/src/interfaces/options/IOptions.ts @@ -18,7 +18,7 @@ export interface IOptions { readonly deadCodeInjection: boolean; readonly deadCodeInjectionThreshold: number; readonly debugProtection: boolean; - readonly debugProtectionInterval: boolean; + readonly debugProtectionInterval: number; readonly disableConsoleOutput: boolean; readonly domainLock: string[]; readonly domainLockRedirectUrl: string; diff --git a/src/options/Options.ts b/src/options/Options.ts index d114fc838..234673a55 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -112,10 +112,11 @@ export class Options implements IOptions { public readonly debugProtection!: boolean; /** - * @type {boolean} + * @type {number} */ - @IsBoolean() - public readonly debugProtectionInterval!: boolean; + @IsNumber() + @Min(0) + public readonly debugProtectionInterval!: number; /** * @type {boolean} diff --git a/src/options/presets/Default.ts b/src/options/presets/Default.ts index 78b91d328..b8e059f3d 100644 --- a/src/options/presets/Default.ts +++ b/src/options/presets/Default.ts @@ -18,7 +18,7 @@ export const DEFAULT_PRESET: TInputOptions = Object.freeze({ deadCodeInjection: false, deadCodeInjectionThreshold: 0.4, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: false, domainLock: [], domainLockRedirectUrl: 'about:blank', diff --git a/src/options/presets/HighObfuscation.ts b/src/options/presets/HighObfuscation.ts index e704b8902..7dedef176 100644 --- a/src/options/presets/HighObfuscation.ts +++ b/src/options/presets/HighObfuscation.ts @@ -10,7 +10,7 @@ export const HIGH_OBFUSCATION_PRESET: TInputOptions = Object.freeze({ controlFlowFlatteningThreshold: 1, deadCodeInjectionThreshold: 1, debugProtection: true, - debugProtectionInterval: true, + debugProtectionInterval: 4000, optionsPreset: OptionsPreset.HighObfuscation, splitStringsChunkLength: 5, stringArrayCallsTransformThreshold: 1, diff --git a/src/options/presets/NoCustomNodes.ts b/src/options/presets/NoCustomNodes.ts index 2c95f930f..eb80d021b 100644 --- a/src/options/presets/NoCustomNodes.ts +++ b/src/options/presets/NoCustomNodes.ts @@ -16,7 +16,7 @@ export const NO_ADDITIONAL_NODES_PRESET: TInputOptions = Object.freeze({ deadCodeInjection: false, deadCodeInjectionThreshold: 0, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: false, domainLock: [], domainLockRedirectUrl: 'about:blank', diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts similarity index 92% rename from test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts rename to test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts index 8b8ece056..a8ebe185b 100644 --- a/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts +++ b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts @@ -1,15 +1,15 @@ import { assert } from 'chai'; -import { readFileAsString } from '../../../../helpers/readFileAsString'; +import { readFileAsString } from '../../../../../helpers/readFileAsString'; -import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../src/options/presets/NoCustomNodes'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; -import { IdentifierNamesGenerator } from '../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator'; -import { ObfuscationTarget } from '../../../../../src/enums/ObfuscationTarget'; +import { IdentifierNamesGenerator } from '../../../../../../src/enums/generators/identifier-names-generators/IdentifierNamesGenerator'; +import { ObfuscationTarget } from '../../../../../../src/enums/ObfuscationTarget'; -import { evaluateInWorker } from '../../../../helpers/evaluateInWorker'; +import { evaluateInWorker } from '../../../../../helpers/evaluateInWorker'; -import { JavaScriptObfuscator } from '../../../../../src/JavaScriptObfuscatorFacade'; +import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; describe('DebugProtectionFunctionCallTemplate', function () { const evaluationTimeout: number = 1500; diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/fixtures/input.js b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/fixtures/input.js similarity index 100% rename from test/functional-tests/custom-code-helpers/debug-protection/templates/fixtures/input.js rename to test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/fixtures/input.js diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/fixtures/single-call.js b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/fixtures/single-call.js similarity index 100% rename from test/functional-tests/custom-code-helpers/debug-protection/templates/fixtures/single-call.js rename to test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/fixtures/single-call.js diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/DebugProtectionFunctionIntervalTemplate.spec.ts b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/DebugProtectionFunctionIntervalTemplate.spec.ts new file mode 100644 index 000000000..8f6a061f5 --- /dev/null +++ b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/DebugProtectionFunctionIntervalTemplate.spec.ts @@ -0,0 +1,90 @@ +import { assert } from 'chai'; + +import { readFileAsString } from '../../../../../helpers/readFileAsString'; + +import { HIGH_OBFUSCATION_PRESET } from '../../../../../../src/options/presets/HighObfuscation'; +import { NO_ADDITIONAL_NODES_PRESET } from '../../../../../../src/options/presets/NoCustomNodes'; + +import { JavaScriptObfuscator } from '../../../../../../src/JavaScriptObfuscatorFacade'; + +describe('DebugProtectionFunctionIntervalTemplate', function () { + const variableMatch: string = '_0x([a-f0-9]){4,6}'; + + describe('Variant #1 - `high-obfuscation` preset interval', () => { + const debugProtectionIntervalRegExp: RegExp = new RegExp( + `${variableMatch}\\['setInterval'\\]\\( *` + + `${variableMatch}, *` + + '0xfa0 *' + + `\\);` + ); + + let obfuscatedCode: string; + + beforeEach(() => { + const code: string = readFileAsString(__dirname + '/fixtures/input.js'); + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + debugProtection: true, + debugProtectionInterval: HIGH_OBFUSCATION_PRESET.debugProtectionInterval + } + ).getObfuscatedCode(); + + console.log(obfuscatedCode); + }); + + it('Should add debug protection interval code with default interval value', () => { + assert.match(obfuscatedCode, debugProtectionIntervalRegExp); + }); + }); + + describe('Variant #2 - custom interval', () => { + const debugProtectionIntervalRegExp: RegExp = new RegExp( + `${variableMatch}\\['setInterval'\\]\\( *` + + `${variableMatch}, *` + + '0x64 *' + + `\\);` + ); + + let obfuscatedCode: string; + + beforeEach(() => { + const code: string = readFileAsString(__dirname + '/fixtures/input.js'); + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + debugProtection: true, + debugProtectionInterval: 100 + } + ).getObfuscatedCode(); + }); + + it('Should add debug protection interval code with default interval value', () => { + assert.match(obfuscatedCode, debugProtectionIntervalRegExp); + }); + }); + + describe('Variant #3 - no interval', () => { + const debugProtectionIntervalRegExp: RegExp = /setInterval/ + + let obfuscatedCode: string; + + beforeEach(() => { + const code: string = readFileAsString(__dirname + '/fixtures/input.js'); + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + debugProtection: true, + debugProtectionInterval: 0 + } + ).getObfuscatedCode(); + }); + + it('Should not add debug protection interval code', () => { + assert.notMatch(obfuscatedCode, debugProtectionIntervalRegExp); + }); + }); +}); diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/fixtures/input.js b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/fixtures/input.js new file mode 100644 index 000000000..2a4803318 --- /dev/null +++ b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/fixtures/input.js @@ -0,0 +1,3 @@ +(function () { + return 1; +})(); \ No newline at end of file diff --git a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts index 36088f76a..e264a30fd 100644 --- a/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts +++ b/test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts @@ -1442,7 +1442,7 @@ describe('JavaScriptObfuscator', () => { deadCodeInjection: true, deadCodeInjectionThreshold: 1, debugProtection: true, - debugProtectionInterval: true, + debugProtectionInterval: 4000, disableConsoleOutput: false, stringArrayRotate: true, selfDefending: true, diff --git a/test/index.spec.ts b/test/index.spec.ts index 5cf313d12..d8ed26ebd 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -64,7 +64,8 @@ import './functional-tests/code-transformers/preparing-transformers/hashbang-ope import './functional-tests/custom-code-helpers/common/templates/GlobalVariableNoEvalTemplate.spec'; import './functional-tests/custom-code-helpers/console-output/ConsoleOutputDisableExpressionCodeHelper.spec'; import './functional-tests/custom-code-helpers/console-output/templates/ConsoleOutputDisableTemplate.spec'; -import './functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec'; +import './functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec'; +import './functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-interval-template/DebugProtectionFunctionIntervalTemplate.spec'; import './functional-tests/custom-code-helpers/domain-lock/DomainLockCodeHelper.spec'; import './functional-tests/custom-code-helpers/domain-lock/templates/DomainLockNodeTemplate.spec'; import './functional-tests/custom-code-helpers/self-defending/SelfDefendingCodeHelper.spec'; diff --git a/test/performance-tests/JavaScriptObfuscatorMemory.spec.ts b/test/performance-tests/JavaScriptObfuscatorMemory.spec.ts index 87cb2634b..2f58cecbc 100644 --- a/test/performance-tests/JavaScriptObfuscatorMemory.spec.ts +++ b/test/performance-tests/JavaScriptObfuscatorMemory.spec.ts @@ -32,7 +32,7 @@ describe('JavaScriptObfuscator memory', function () { deadCodeInjection: true, deadCodeInjectionThreshold: 0.4, debugProtection: false, - debugProtectionInterval: false, + debugProtectionInterval: 0, disableConsoleOutput: true, identifierNamesGenerator: 'mangled', log: false, From 0f63eba210fb7cb4f1490b14dab54490be030c8c Mon Sep 17 00:00:00 2001 From: sanex Date: Mon, 14 Feb 2022 19:45:57 +0300 Subject: [PATCH 08/32] Fixed typo in CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94cea2066..0b8fb1764 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ Change Log v4.0.0 --- -* **Breaking change:** `debugProtectionInteraval` option now accepts value in milliseconds instead of `boolean` value. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1031 +* **Breaking change:** `debugProtectionInterval` option now accepts value in milliseconds instead of `boolean` value. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1031 v3.2.7 --- From 6f669f4ef8a0db266e39acac57dd8b8b94566e95 Mon Sep 17 00:00:00 2001 From: sanex Date: Mon, 14 Mar 2022 00:27:21 +0600 Subject: [PATCH 09/32] Removed some donation options --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 19b21feac..618ae76a4 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,6 @@ The example of obfuscated code: [github.com](https://github.com/javascript-obfus [![xscode](https://img.shields.io/badge/Available%20on-xs%3Acode-blue?style=?style=plastic&logo=appveyor&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7/XSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7/Xz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https://xscode.com/sanex3339/javascript-obfuscator) #### You can support this project by donating: -* (OpenCollective) https://opencollective.com/javascript-obfuscator -* PayPal credit card [https://www.paypal.com/donate](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=javascript-obfuscator@yandex.ru&lc=US&no_note=0&item_name=Support+javascript-obfuscator&cn=&curency_code=USD&bn=PP-DonationsBF:btn_donateCC_LG.gif:NonHosted) -* PayPal https://www.paypal.me/javascriptobfuscator * (Bitcoin) bc1q203p8nyrstwm7vwzjg3h9l9t6y9ka0umw0rx96 Huge thanks to all supporters! From ce5ab513dbf2c47daa3f5388f808459fa31662b5 Mon Sep 17 00:00:00 2001 From: sanex Date: Mon, 14 Mar 2022 00:39:28 +0600 Subject: [PATCH 10/32] Removed some donation options #2 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 618ae76a4..3f8ff7386 100644 --- a/README.md +++ b/README.md @@ -1674,7 +1674,7 @@ Try `renamePropertiesMode: 'safe'` option, if it still doesn't work, just disabl ## Backers -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/javascript-obfuscator#backer)] +Support us with a monthly donation and help us continue our activities. @@ -1710,7 +1710,7 @@ Support us with a monthly donation and help us continue our activities. [[Become ## Sponsors -Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/javascript-obfuscator#sponsor)] +Become a sponsor and get your logo on our README on Github with a link to your site. From 88bfc0e4b9d269cdac76548c015d79a0bcf815c1 Mon Sep 17 00:00:00 2001 From: fuka Date: Sat, 7 May 2022 21:30:30 +0200 Subject: [PATCH 11/32] Update incorrect 'ignoreRequireImports' to 'ignoreImports' (#1086) Introduced by PR#1010 --- README.md | 4 ++-- test/dev/dev.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3f8ff7386..3695adc0f 100644 --- a/README.md +++ b/README.md @@ -355,7 +355,7 @@ Following options are available for the JS Obfuscator: identifierNamesGenerator: 'hexadecimal', identifiersDictionary: [], identifiersPrefix: '', - ignoreRequireImports: false, + ignoreImports: false, inputFileName: '', log: false, numbersToExpressions: false, @@ -836,7 +836,7 @@ Sets prefix for all global identifiers. Use this option when you want to obfuscate multiple files. This option helps to avoid conflicts between global identifiers of these files. Prefix should be different for every file. -### `ignoreRequireImports` +### `ignoreImports` Type: `boolean` Default: `false` Prevents obfuscation of `require` imports. Could be helpful in some cases when for some reason runtime environment requires these imports with static strings only. diff --git a/test/dev/dev.ts b/test/dev/dev.ts index ec778a488..7190cd665 100644 --- a/test/dev/dev.ts +++ b/test/dev/dev.ts @@ -32,7 +32,7 @@ "stringArrayThreshold": 0, "transformObjectKeys": true, "unicodeEscapeSequence": false, - "ignoreRequireImports": false + "ignoreImports": false } ).getObfuscatedCode(); From 30fa60f0b1e4847e3363ef934763e2f82c2b57a5 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Tue, 9 Aug 2022 22:39:47 +0400 Subject: [PATCH 12/32] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3695adc0f..745ff8965 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Description: A powerful obfuscator for JavaScript and Node.js. Author: Timofey Kachalov --> + +# The project is on hold. Don't expect updates in the near future. # JavaScript obfuscator From fae81052960e42765e4b1f949f2c57c3726d09c5 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Wed, 25 Jan 2023 15:44:45 +0400 Subject: [PATCH 13/32] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 745ff8965..3695adc0f 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ Description: A powerful obfuscator for JavaScript and Node.js. Author: Timofey Kachalov --> - -# The project is on hold. Don't expect updates in the near future. # JavaScript obfuscator From b55c7dbb2cfcbb85e813b42045e5a73b711d1c6b Mon Sep 17 00:00:00 2001 From: billsykes Date: Fri, 10 Feb 2023 17:48:04 -0500 Subject: [PATCH 14/32] Bump class-validator from 0.13.2 to 0.14.0 (#1146) --- package.json | 2 +- .../Validation.spec.ts | 2 +- yarn.lock | 24 ++++++++++++------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 40cda55bc..feea6bab3 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "assert": "2.0.0", "chalk": "4.1.2", "chance": "1.1.8", - "class-validator": "0.13.2", + "class-validator": "0.14.0", "commander": "9.0.0", "eslint-scope": "7.1.0", "eslint-visitor-keys": "3.2.0", diff --git a/test/functional-tests/options/domain-lock-destination/Validation.spec.ts b/test/functional-tests/options/domain-lock-destination/Validation.spec.ts index c34645544..4fb8b2a8f 100644 --- a/test/functional-tests/options/domain-lock-destination/Validation.spec.ts +++ b/test/functional-tests/options/domain-lock-destination/Validation.spec.ts @@ -82,7 +82,7 @@ describe('`domainLockRedirectUrl` validation', () => { describe('Variant #2: negative validation', () => { describe('Variant #1: some non-url string', () => { - const expectedError: string = 'must be an URL address'; + const expectedError: string = 'must be a URL address'; let testFunc: () => string; beforeEach(() => { diff --git a/yarn.lock b/yarn.lock index 898329c22..90676aafc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -581,6 +581,11 @@ resolved "https://registry.npmjs.org/@types/string-template/-/string-template-1.0.2.tgz" integrity sha1-NjsnPJtFZwXjER41cekkj2R066Q= +"@types/validator@^13.7.10": + version "13.7.10" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.10.tgz#f9763dc0933f8324920afa9c0790308eedf55ca7" + integrity sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ== + "@types/webpack-env@1.16.3": version "1.16.3" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.3.tgz#b776327a73e561b71e7881d0cd6d34a1424db86a" @@ -1214,12 +1219,13 @@ ci-info@^3.3.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== -class-validator@0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.2.tgz#64b031e9f3f81a1e1dcd04a5d604734608b24143" - integrity sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw== +class-validator@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.0.tgz#40ed0ecf3c83b2a8a6a320f4edb607be0f0df159" + integrity sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A== dependencies: - libphonenumber-js "^1.9.43" + "@types/validator" "^13.7.10" + libphonenumber-js "^1.10.14" validator "^13.7.0" clean-regexp@^1.0.0: @@ -2850,10 +2856,10 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libphonenumber-js@^1.9.43: - version "1.9.44" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.9.44.tgz#d036364fe4c1e27205d1d283c7bf8fc25625200b" - integrity sha512-zhw8nUMJuQf7jG1dZfEOKKOS6M3QYIv3HnvB/vGohNd0QfxIQcObH3a6Y6s350H+9xgBeOXClOJkS0hJ0yvS3g== +libphonenumber-js@^1.10.14: + version "1.10.18" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.18.tgz#657c419071c8a02c638c0e80d9ee1232f152f280" + integrity sha512-NS4ZEgNhwbcPz1gfSXCGFnQm0xEiyTSPRthIuWytDzOiEG9xnZ2FbLyfJC4tI2BMAAXpoWbNxHYH75pa3Dq9og== lines-and-columns@^1.1.6: version "1.1.6" From 61c9fd181cfa2db7751d454b55e07c85492be49f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Feb 2023 02:49:25 +0400 Subject: [PATCH 15/32] Bump json5 from 1.0.1 to 1.0.2 (#1138) --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 90676aafc..6e682675e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2808,9 +2808,9 @@ json-stable-stringify-without-jsonify@^1.0.1: integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json5@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" @@ -3027,9 +3027,9 @@ minimatch@3.0.4, minimatch@^3.0.4: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== mkdirp@1.0.4: version "1.0.4" From 1b840faf6f3a9d7f00cae2983f4aef39c5dbc3e0 Mon Sep 17 00:00:00 2001 From: sanex Date: Sat, 11 Feb 2023 18:29:18 +0400 Subject: [PATCH 16/32] 4.0.1 version --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b8fb1764..9f6cb9cca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v4.0.1 +--- +* Update `class-validator` dependency https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1146 + v4.0.0 --- * **Breaking change:** `debugProtectionInterval` option now accepts value in milliseconds instead of `boolean` value. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1031 diff --git a/package.json b/package.json index feea6bab3..529867e0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "4.0.0", + "version": "4.0.1", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", From 0dddaa86848a61430986eb5c5cc349898677c02b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Feb 2023 21:19:28 +0400 Subject: [PATCH 17/32] Bump decode-uri-component from 0.2.0 to 0.2.2 (#1133) Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2. - [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases) - [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2) --- updated-dependencies: - dependency-name: decode-uri-component dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6e682675e..7c511c94a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1454,9 +1454,9 @@ decamelize@^4.0.0: integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 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= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== deep-eql@^3.0.1: version "3.0.1" From 1db729c525a4431ef32e740b40eb9652a4170a58 Mon Sep 17 00:00:00 2001 From: sanex Date: Sat, 11 Feb 2023 22:22:05 +0400 Subject: [PATCH 18/32] Update sponsor links --- .github/FUNDING.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index bd04da815..73e045195 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ -open_collective: javascript-obfuscator -custom: ["https://xscode.com/sanex3339/javascript-obfuscator"] \ No newline at end of file +custom: ["https://github.com/javascript-obfuscator/javascript-obfuscator#you-can-support-this-project-by-donating"] \ No newline at end of file From 2f1b2904a4deb0285840539c3653b79053d11d4c Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sun, 12 Feb 2023 22:40:54 +0400 Subject: [PATCH 19/32] Dependencies update (#1148) --- .github/workflows/ci.yml | 6 +- .mocharc.json | 3 + CHANGELOG.md | 5 + package.json | 80 +- src/ASTParserFacade.ts | 2 +- .../CommentsTransformer.ts | 2 +- src/node/NodeFactory.ts | 1 + src/node/NodeUtils.ts | 2 +- .../AbstractTransformerNamesGroupsBuilder.ts | 2 +- yarn.lock | 1780 ++++++++++------- 10 files changed, 1141 insertions(+), 742 deletions(-) create mode 100644 .mocharc.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af8517796..e45571de4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,16 +16,16 @@ jobs: fail-fast: false matrix: include: - - os: ubuntu-latest, - node-version: 12.x - os: ubuntu-latest, node-version: 14.x - os: ubuntu-latest, node-version: 16.x - os: ubuntu-latest, - node-version: 17.x + node-version: 18.x - os: windows-latest, node-version: 16.x + - os: windows-latest, + node-version: 18.x steps: - uses: actions/checkout@v2 diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 000000000..0ca796a9e --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,3 @@ +{ + "node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"] +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f6cb9cca..279789018 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ Change Log +v4.0.2 +--- +* Add support for `node@18` +* Update dependencies + v4.0.1 --- * Update `class-validator` dependency https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1146 diff --git a/package.json b/package.json index 529867e0a..35a30c2a4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "4.0.1", + "version": "4.0.2", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -12,7 +12,7 @@ "js obfuscator" ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" }, "main": "dist/index.js", "browser": "dist/index.browser.js", @@ -23,19 +23,19 @@ "dependencies": { "@javascript-obfuscator/escodegen": "2.3.0", "@javascript-obfuscator/estraverse": "5.4.0", - "acorn": "8.7.0", + "acorn": "8.8.2", "assert": "2.0.0", "chalk": "4.1.2", - "chance": "1.1.8", + "chance": "1.1.9", "class-validator": "0.14.0", - "commander": "9.0.0", - "eslint-scope": "7.1.0", - "eslint-visitor-keys": "3.2.0", + "commander": "10.0.0", + "eslint-scope": "7.1.1", + "eslint-visitor-keys": "3.3.0", "fast-deep-equal": "3.1.3", "inversify": "6.0.1", "js-string-escape": "1.0.1", "md5": "2.3.0", - "mkdirp": "1.0.4", + "mkdirp": "2.1.3", "multimatch": "5.0.0", "opencollective-postinstall": "2.0.3", "process": "0.11.10", @@ -43,57 +43,57 @@ "source-map-support": "0.5.21", "string-template": "1.0.0", "stringz": "2.1.0", - "tslib": "2.3.1" + "tslib": "2.5.0" }, "devDependencies": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@types/chai": "4.3.0", + "@types/chai": "4.3.4", "@types/chance": "1.1.3", "@types/escodegen": "0.0.7", - "@types/eslint-scope": "3.7.3", + "@types/eslint-scope": "3.7.4", "@types/eslint-visitor-keys": "1.0.0", - "@types/estraverse": "5.1.1", + "@types/estraverse": "5.1.2", "@types/estree": "0.0.51", "@types/js-beautify": "1.13.3", "@types/js-string-escape": "1.0.1", - "@types/md5": "2.3.1", + "@types/md5": "2.3.2", "@types/mkdirp": "1.0.2", - "@types/mocha": "9.1.0", + "@types/mocha": "10.0.1", "@types/multimatch": "4.0.0", - "@types/node": "17.0.15", + "@types/node": "18.13.0", "@types/rimraf": "3.0.2", - "@types/sinon": "10.0.10", + "@types/sinon": "10.0.13", "@types/string-template": "1.0.2", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.10.2", - "@typescript-eslint/parser": "5.10.2", - "chai": "4.3.6", + "@types/webpack-env": "1.18.0", + "@typescript-eslint/eslint-plugin": "5.51.0", + "@typescript-eslint/parser": "5.51.0", + "chai": "4.3.7", "chai-exclude": "2.1.0", "cross-env": "7.0.3", - "eslint": "8.8.0", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-jsdoc": "37.7.1", + "eslint": "8.34.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-jsdoc": "40.0.0", "eslint-plugin-no-null": "1.0.2", "eslint-plugin-prefer-arrow": "1.2.3", - "eslint-plugin-unicorn": "40.1.0", - "eslint-webpack-plugin": "3.1.1", - "fork-ts-checker-notifier-webpack-plugin": "4.0.0", - "fork-ts-checker-webpack-plugin": "7.0.0", - "husky": "7.0.4", - "js-beautify": "1.14.0", - "mocha": "9.2.0", + "eslint-plugin-unicorn": "45.0.2", + "eslint-webpack-plugin": "4.0.0", + "fork-ts-checker-notifier-webpack-plugin": "6.0.0", + "fork-ts-checker-webpack-plugin": "7.3.0", + "husky": "8.0.3", + "js-beautify": "1.14.7", + "mocha": "10.2.0", "nyc": "15.1.0", "pjson": "1.0.9", - "rimraf": "3.0.2", - "sinon": "13.0.1", + "rimraf": "4.1.2", + "sinon": "15.0.1", "source-map-resolve": "0.6.0", - "terser": "5.10.0", + "terser": "5.16.3", "threads": "1.7.0", - "ts-loader": "9.2.6", - "ts-node": "10.4.0", - "typescript": "4.5.5", - "webpack": "5.68.0", - "webpack-cli": "4.9.2", + "ts-loader": "9.4.2", + "ts-node": "10.9.1", + "typescript": "4.9.5", + "webpack": "5.75.0", + "webpack-cli": "5.0.1", "webpack-node-externals": "3.0.0" }, "repository": { @@ -111,10 +111,10 @@ "test:devCompilePerformance": "ts-node test/dev/dev-compile-performance.ts", "test:devRuntimePerformance": "ts-node test/dev/dev-runtime-performance.ts", "test:full": "yarn run test:dev && yarn run test:mocha-coverage && yarn run test:mocha-memory-performance", - "test:mocha": "mocha --require ts-node/register --require source-map-support/register test/index.spec.ts --exit", + "test:mocha": "mocha --require source-map-support/register test/index.spec.ts --exit", "test:mocha-coverage": "NODE_OPTIONS=--max-old-space-size=4096 nyc --reporter text-summary --no-clean yarn run test:mocha", "test:mocha-coverage:report": "nyc report --reporter=lcov", - "test:mocha-memory-performance": "cross-env NODE_OPTIONS=--max-old-space-size=240 mocha --require ts-node/register test/performance-tests/JavaScriptObfuscatorMemory.spec.ts", + "test:mocha-memory-performance": "cross-env NODE_OPTIONS=--max-old-space-size=280 mocha test/performance-tests/JavaScriptObfuscatorMemory.spec.ts", "test": "yarn run test:full", "eslint": "eslint src/**/*.ts", "git:addFiles": "git add .", diff --git a/src/ASTParserFacade.ts b/src/ASTParserFacade.ts index 94d398ea7..565a3df97 100644 --- a/src/ASTParserFacade.ts +++ b/src/ASTParserFacade.ts @@ -91,7 +91,7 @@ export class ASTParserFacade { errorMessage: string, position: ESTree.Position | null ): never { - const isMissingLocationData = !position || !position.line || !position.column; + const isMissingLocationData = !position?.line || !position.column; if (isMissingLocationData) { throw new Error(errorMessage); diff --git a/src/node-transformers/initializing-transformers/CommentsTransformer.ts b/src/node-transformers/initializing-transformers/CommentsTransformer.ts index 1e229b0e7..f3f861e6d 100644 --- a/src/node-transformers/initializing-transformers/CommentsTransformer.ts +++ b/src/node-transformers/initializing-transformers/CommentsTransformer.ts @@ -70,7 +70,7 @@ export class CommentsTransformer extends AbstractNodeTransformer { public transformNode (rootNode: ESTree.Program): ESTree.Node { rootNode = this.filterCommentsOnPrimaryTraverse(rootNode); - if (!rootNode.comments || !rootNode.comments.length) { + if (!rootNode.comments?.length) { return rootNode; } diff --git a/src/node/NodeFactory.ts b/src/node/NodeFactory.ts index cb9ff055a..09a43854f 100644 --- a/src/node/NodeFactory.ts +++ b/src/node/NodeFactory.ts @@ -410,6 +410,7 @@ export class NodeFactory { type: NodeType.Literal, value, raw, + // eslint-disable-next-line @typescript-eslint/naming-convention 'x-verbatim-property': { content: raw, precedence: escodegen.Precedence.Primary diff --git a/src/node/NodeUtils.ts b/src/node/NodeUtils.ts index f8d825ef5..22f23ed4b 100644 --- a/src/node/NodeUtils.ts +++ b/src/node/NodeUtils.ts @@ -117,7 +117,7 @@ export class NodeUtils { * @param {T} node * @returns {T} */ - private static cloneRecursive (node: T): T { + private static cloneRecursive (node: NonNullable): T { if (node === null) { return node; } diff --git a/src/utils/AbstractTransformerNamesGroupsBuilder.ts b/src/utils/AbstractTransformerNamesGroupsBuilder.ts index 45412c8cd..4a9a38a21 100644 --- a/src/utils/AbstractTransformerNamesGroupsBuilder.ts +++ b/src/utils/AbstractTransformerNamesGroupsBuilder.ts @@ -80,7 +80,7 @@ export abstract class AbstractTransformerNamesGroupsBuilder < const transformer: TTransformer = normalizedTransformers[transformerName]; const runAfterRelations: TTransformerName[] | undefined = transformer.runAfter; - const areRunAfterRelationsEmpty = !runAfterRelations || !runAfterRelations.length; + const areRunAfterRelationsEmpty = !runAfterRelations?.length; if (areRunAfterRelationsEmpty) { relationEdges.push([transformerName, null]); diff --git a/yarn.lock b/yarn.lock index 7c511c94a..561e2ce05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -123,11 +123,16 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^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-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz" @@ -198,55 +203,62 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@cspotcode/source-map-consumer" "0.8.0" + "@jridgewell/trace-mapping" "0.3.9" "@discoveryjs/json-ext@^0.5.0": 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== -"@es-joy/jsdoccomment@~0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.18.0.tgz#2532b2ecb8576d694011b157c447ed6b12534c70" - integrity sha512-TjT8KJULV4I6ZiwIoKr6eMs+XpRejqwJ/VA+QPDeFGe9j6bZFKmMJ81EeFsGm6JNZhnzm37aoxVROmTh2PZoyA== +"@es-joy/jsdoccomment@~0.36.1": + version "0.36.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz#c37db40da36e4b848da5fd427a74bae3b004a30f" + integrity sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg== dependencies: - comment-parser "1.3.0" + comment-parser "1.3.1" esquery "^1.4.0" - jsdoc-type-pratt-parser "~2.2.2" + jsdoc-type-pratt-parser "~3.1.0" -"@eslint/eslintrc@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" - integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== +"@eslint-community/eslint-utils@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz#14ca568ddaa291dd19a4a54498badc18c6cfab78" + integrity sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint/eslintrc@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" + integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.2.0" - globals "^13.9.0" - ignore "^4.0.6" + espree "^9.4.0" + globals "^13.19.0" + ignore "^5.2.0" import-fresh "^3.2.1" js-yaml "^4.1.0" - minimatch "^3.0.4" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" - integrity sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ== +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" @@ -297,6 +309,73 @@ resolved "https://registry.yarnpkg.com/@javascript-obfuscator/estraverse/-/estraverse-5.3.0.tgz#eadd3c00ede6a05b75aa585c7b7a3ac58adb1755" integrity sha512-SxIFtV5/wlXYS7G3zLVj7CddLolX8Bm/hr68fiyNL3MyG2k4FwF9B5Z5GTpVLhw2EELYNwyoYBvFlR4gGnQPdw== +"@jest/schemas@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.2.tgz#cf7cfe97c5649f518452b176c47ed07486270fc1" + integrity sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.4.2": + version "29.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.4.2.tgz#8f724a414b1246b2bfd56ca5225d9e1f39540d82" + integrity sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw== + dependencies: + "@jest/schemas" "^29.4.2" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz" @@ -305,11 +384,24 @@ "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" +"@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.4", "@nodelib/fs.stat@^2.0.2": 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== +"@nodelib/fs.stat@2.0.5": + 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.6" resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz" @@ -318,47 +410,39 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0": - version "1.7.1" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.1.tgz" - integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/commons@^1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== +"@nodelib/fs.walk@^1.2.8": + 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: - type-detect "4.0.8" + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" -"@sinonjs/fake-timers@>=5": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.0.tgz#8c92c56f195e0bed4c893ba59c8e3d55831ca0df" - integrity sha512-M8vapsv9qQupMdzrVzkn5rb9jG7aUTEPAZdMtME2PuBaefksFZVE2C1g4LBRTkF/k3nRDNbDc5tp5NFC1PEYxA== - dependencies: - "@sinonjs/commons" "^1.7.0" +"@sinclair/typebox@^0.25.16": + version "0.25.21" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.21.tgz#763b05a4b472c93a8db29b2c3e359d55b29ce272" + integrity sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g== -"@sinonjs/fake-timers@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.0.tgz#8f13af27d842cbf51ad4502e05562fe9391d084e" - integrity sha512-hAEzXi6Wbvlb67NnGMGSNOeAflLVnMa4yliPU/ty1qjgW/vAletH15/v/esJwASSIA0YlIyjnloenFbEZc9q9A== +"@sinonjs/commons@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: - "@sinonjs/commons" "^1.7.0" + type-detect "4.0.8" -"@sinonjs/fake-timers@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.0.0.tgz#6854809cd058c6e25b3da2fa063153eaea4ffc72" - integrity sha512-+shXA2X7KNP7H7qNbQTJ3SA+NQc0pZDSBrdvFSRwF8sAo/ohw+ZQFD8Moc+gnz51+1eRXtEQBpKWPiQ4jsRC/w== +"@sinonjs/fake-timers@10.0.2", "@sinonjs/fake-timers@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz#d10549ed1f423d80639c528b6c7f5a1017747d0c" + integrity sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw== dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^2.0.0" -"@sinonjs/samsam@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-6.1.1.tgz#627f7f4cbdb56e6419fa2c1a3e4751ce4f6a00b1" - integrity sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA== +"@sinonjs/samsam@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-7.0.1.tgz#5b5fa31c554636f78308439d220986b9523fc51f" + integrity sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw== dependencies: - "@sinonjs/commons" "^1.6.0" + "@sinonjs/commons" "^2.0.0" lodash.get "^4.4.2" type-detect "^4.0.8" @@ -387,10 +471,10 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== -"@types/chai@4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" - integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== +"@types/chai@4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== "@types/chance@1.1.3": version "1.1.3" @@ -407,18 +491,10 @@ resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.7.tgz#a1c3e3dfd76da89f01d7d196eebe227ebe4b6eec" integrity sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ== -"@types/eslint-scope@3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== +"@types/eslint-scope@3.7.4", "@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: "@types/eslint" "*" "@types/estree" "*" @@ -436,31 +512,26 @@ "@types/estree" "*" "@types/json-schema" "*" -"@types/eslint@^7.28.2": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" - integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== +"@types/eslint@^8.4.10": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.21.0.tgz#21724cfe12b96696feafab05829695d4d7bd7c48" + integrity sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA== dependencies: "@types/estree" "*" "@types/json-schema" "*" -"@types/estraverse@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/estraverse/-/estraverse-5.1.1.tgz#1a220a4f78c10a739496a18fa067e2a2429ae881" - integrity sha512-AUnklMz90PdmlN4TFqnHC5hP9eRwNQdXgI8aXsSVVMMr2U6Nwo7n4QJxzOiUtVZy/0JFg5oA4PxVh8UBtUELyw== +"@types/estraverse@5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/estraverse/-/estraverse-5.1.2.tgz#44672ec45591f54bad039ac243d05826b7e3d825" + integrity sha512-3Rndn7sxqRc57WCN+LEaTmwgHAxrGUylgUk5zZsKzqioCbXpk7nSBxDWjPLoE96ZeykGFORMJ45V7N1TFaPg6A== dependencies: "@types/estree" "*" -"@types/estree@*", "@types/estree@0.0.51": +"@types/estree@*", "@types/estree@0.0.51", "@types/estree@^0.0.51": version "0.0.51" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== -"@types/estree@^0.0.50": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== - "@types/events@*": version "3.0.0" resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz" @@ -475,6 +546,25 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + 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/js-beautify@1.13.3": version "1.13.3" resolved "https://registry.yarnpkg.com/@types/js-beautify/-/js-beautify-1.13.3.tgz#53839bb5b766d0fb45e87386100bb3bcbb7dca9d" @@ -510,12 +600,10 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/md5@2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.1.tgz#010bcf3bb50a2cff3a574cb1c0b4051a9c67d6bc" - integrity sha512-OK3oe+ALIoPSo262lnhAYwpqFNXbiwH2a+0+Z5YBnkQEwWD8fk5+PIeRhYA48PzvX9I4SGNpWy+9bLj8qz92RQ== - dependencies: - "@types/node" "*" +"@types/md5@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.3.2.tgz#529bb3f8a7e9e9f621094eb76a443f585d882528" + integrity sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og== "@types/minimatch@*", "@types/minimatch@^3.0.3": version "3.0.3" @@ -529,10 +617,10 @@ dependencies: "@types/node" "*" -"@types/mocha@9.1.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" - integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== +"@types/mocha@10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" + integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/multimatch@4.0.0": version "4.0.0" @@ -546,10 +634,10 @@ resolved "https://registry.npmjs.org/@types/node/-/node-13.9.3.tgz" integrity sha512-01s+ac4qerwd6RHD+mVbOEsraDHSgUaefQlEdBbUolnQFjKwCr7luvAlEwW1RFojh67u0z4OUTjPn9LEl4zIkA== -"@types/node@17.0.15": - version "17.0.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.15.tgz#97779282c09c09577120a2162e71d8380003590a" - integrity sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA== +"@types/node@18.13.0": + version "18.13.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" + integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -569,12 +657,22 @@ "@types/glob" "*" "@types/node" "*" -"@types/sinon@10.0.10": - version "10.0.10" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.10.tgz#f8acd72fbc2e87c4679f3e2c1ab3530dff1ab6e2" - integrity sha512-US5E539UfeL2DiWALzCyk0c4zKh6sCv86V/0lpda/afMJJ0oEm2SrKgedH5optvFWstnJ8e1MNYhLmPhAy4rvQ== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/sinon@10.0.13": + version "10.0.13" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.13.tgz#60a7a87a70d9372d0b7b38cc03e825f46981fb83" + integrity sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ== dependencies: - "@sinonjs/fake-timers" "^7.1.0" + "@types/sinonjs__fake-timers" "*" + +"@types/sinonjs__fake-timers@*": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" + integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== "@types/string-template@1.0.2": version "1.0.2" @@ -586,95 +684,106 @@ resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.10.tgz#f9763dc0933f8324920afa9c0790308eedf55ca7" integrity sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ== -"@types/webpack-env@1.16.3": - version "1.16.3" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.3.tgz#b776327a73e561b71e7881d0cd6d34a1424db86a" - integrity sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw== - -"@typescript-eslint/eslint-plugin@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152" - integrity sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q== - dependencies: - "@typescript-eslint/scope-manager" "5.10.2" - "@typescript-eslint/type-utils" "5.10.2" - "@typescript-eslint/utils" "5.10.2" - debug "^4.3.2" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" +"@types/webpack-env@1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.0.tgz#ed6ecaa8e5ed5dfe8b2b3d00181702c9925f13fb" + integrity sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg== + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.22" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.22.tgz#7dd37697691b5f17d020f3c63e7a45971ff71e9a" + integrity sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.51.0.tgz#da3f2819633061ced84bb82c53bba45a6fe9963a" + integrity sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ== + dependencies: + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/type-utils" "5.51.0" + "@typescript-eslint/utils" "5.51.0" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" regexpp "^3.2.0" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.2.tgz#b6076d27cc5499ce3f2c625f5ccde946ecb7db9a" - integrity sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg== +"@typescript-eslint/parser@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.51.0.tgz#2d74626652096d966ef107f44b9479f02f51f271" + integrity sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA== dependencies: - "@typescript-eslint/scope-manager" "5.10.2" - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/typescript-estree" "5.10.2" - debug "^4.3.2" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" + debug "^4.3.4" -"@typescript-eslint/scope-manager@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz#92c0bc935ec00f3d8638cdffb3d0e70c9b879639" - integrity sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw== +"@typescript-eslint/scope-manager@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.51.0.tgz#ad3e3c2ecf762d9a4196c0fbfe19b142ac498990" + integrity sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ== dependencies: - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/visitor-keys" "5.10.2" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" -"@typescript-eslint/type-utils@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz#ad5acdf98a7d2ab030bea81f17da457519101ceb" - integrity sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw== +"@typescript-eslint/type-utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.51.0.tgz#7af48005531700b62a20963501d47dfb27095988" + integrity sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ== dependencies: - "@typescript-eslint/utils" "5.10.2" - debug "^4.3.2" + "@typescript-eslint/typescript-estree" "5.51.0" + "@typescript-eslint/utils" "5.51.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.2.tgz#604d15d795c4601fffba6ecb4587ff9fdec68ce8" - integrity sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w== +"@typescript-eslint/types@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" + integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== -"@typescript-eslint/typescript-estree@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz#810906056cd3ddcb35aa333fdbbef3713b0fe4a7" - integrity sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ== +"@typescript-eslint/typescript-estree@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" + integrity sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA== dependencies: - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/visitor-keys" "5.10.2" - debug "^4.3.2" - globby "^11.0.4" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/visitor-keys" "5.51.0" + debug "^4.3.4" + globby "^11.1.0" is-glob "^4.0.3" - semver "^7.3.5" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.2.tgz#1fcd37547c32c648ab11aea7173ec30060ee87a8" - integrity sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg== +"@typescript-eslint/utils@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.51.0.tgz#074f4fabd5b12afe9c8aa6fdee881c050f8b4d47" + integrity sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.10.2" - "@typescript-eslint/types" "5.10.2" - "@typescript-eslint/typescript-estree" "5.10.2" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.51.0" + "@typescript-eslint/types" "5.51.0" + "@typescript-eslint/typescript-estree" "5.51.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.10.2": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz#fdbf272d8e61c045d865bd6c8b41bea73d222f3d" - integrity sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q== +"@typescript-eslint/visitor-keys@5.51.0": + version "5.51.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.51.0.tgz#c0147dd9a36c0de758aaebd5b48cae1ec59eba87" + integrity sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ== dependencies: - "@typescript-eslint/types" "5.10.2" - eslint-visitor-keys "^3.0.0" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + "@typescript-eslint/types" "5.51.0" + eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -797,22 +906,20 @@ "@webassemblyjs/ast" "1.11.1" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356" - integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg== +"@webpack-cli/configtest@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.0.1.tgz#a69720f6c9bad6aef54a8fa6ba9c3533e7ef4c7f" + integrity sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A== -"@webpack-cli/info@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea" - integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA== - dependencies: - envinfo "^7.7.3" +"@webpack-cli/info@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.1.tgz#eed745799c910d20081e06e5177c2b2569f166c0" + integrity sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA== -"@webpack-cli/serve@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe" - integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw== +"@webpack-cli/serve@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.1.tgz#34bdc31727a1889198855913db2f270ace6d7bf8" + integrity sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw== "@xtuc/ieee754@^1.2.0": version "1.2.0" @@ -824,7 +931,7 @@ resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abbrev@1: +abbrev@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -834,20 +941,20 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.3.1: - 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== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@8.7.0, acorn@^8.7.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== +acorn@8.8.2, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== acorn@^8.4.1: version "8.4.1" @@ -973,15 +1080,15 @@ array-filter@^1.0.0: resolved "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz" integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= -array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" is-string "^1.0.7" array-union@^2.1.0: @@ -989,14 +1096,25 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" arrify@^2.0.1: version "2.0.1" @@ -1030,6 +1148,11 @@ available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: dependencies: array-filter "^1.0.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" @@ -1048,7 +1171,14 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.1, braces@~3.0.2: +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1076,10 +1206,10 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== caching-transform@^4.0.0: version "4.0.0" @@ -1126,14 +1256,14 @@ chai-exclude@2.1.0: dependencies: fclone "^1.0.11" -chai@4.3.6: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== +chai@4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" - deep-eql "^3.0.1" + deep-eql "^4.1.2" get-func-name "^2.0.0" loupe "^2.3.1" pathval "^1.1.1" @@ -1172,10 +1302,10 @@ chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chance@1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/chance/-/chance-1.1.8.tgz#5d6c2b78c9170bf6eb9df7acdda04363085be909" - integrity sha512-v7fi5Hj2VbR6dJEGRWLmJBA83LJMS47pkAbmROFxHWd9qmE1esHRZW8Clf1Fhzr3rjxnNZVCjOEv/ivFxeIMtg== +chance@1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/chance/-/chance-1.1.9.tgz#fbf409726a956415b4bde0e8db010f60b60fc01b" + integrity sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ== char-regex@^1.0.2: version "1.0.2" @@ -1214,10 +1344,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -ci-info@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== +ci-info@^3.2.0, ci-info@^3.6.1: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== class-validator@0.14.0: version "0.14.0" @@ -1301,25 +1431,25 @@ colorette@^2.0.14: resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -commander@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.0.0.tgz#86d58f24ee98126568936bd1d3574e0308a99a40" - integrity sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw== +commander@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" + integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== commander@^2.19.0, commander@^2.20.0: 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== -commander@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz" - integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA== +commander@^9.4.1: + version "9.5.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -comment-parser@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.0.tgz#68beb7dbe0849295309b376406730cd16c719c44" - integrity sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA== +comment-parser@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== commondir@^1.0.1: version "1.0.1" @@ -1331,7 +1461,7 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -config-chain@^1.1.12: +config-chain@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== @@ -1401,20 +1531,13 @@ crypt@0.0.2: resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -debug@4.3.3, 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== +debug@4.3.4, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1458,10 +1581,10 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" @@ -1489,6 +1612,14 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + diff@5.0.0, diff@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" @@ -1548,10 +1679,10 @@ enhanced-resolve@^5.0.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enhanced-resolve@^5.8.3: - version "5.8.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" - integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -1620,7 +1751,7 @@ es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-abstract@^1.19.0, es-abstract@^1.19.1: +es-abstract@^1.19.0: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== @@ -1646,11 +1777,66 @@ es-abstract@^1.19.0, es-abstract@^1.19.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" +es-abstract@^1.20.4: + version "1.21.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" + integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.4" + is-array-buffer "^3.0.1" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" @@ -1685,53 +1871,54 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-module-utils@^2.7.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" -eslint-plugin-import@2.25.4: - version "2.25.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" - integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== +eslint-plugin-import@2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.2" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.0" + is-core-module "^2.11.0" is-glob "^4.0.3" - minimatch "^3.0.4" - object.values "^1.1.5" - resolve "^1.20.0" - tsconfig-paths "^3.12.0" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" -eslint-plugin-jsdoc@37.7.1: - version "37.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.7.1.tgz#faf2cd2c56df11f77063aef3abbe4a1932af308f" - integrity sha512-ySxDTedl6qKXT/VeTwcZlhsRtvNQZGPklyVnaL5+ge20vowzFA9CKvrY0NXRqvdIz6JBVMFpxX9DSmS3OyAUOQ== +eslint-plugin-jsdoc@40.0.0: + version "40.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-40.0.0.tgz#7f433757aa91721e4b88a527dc17ac0437c3c075" + integrity sha512-LOPyIu1vAVvGPkye3ci0moj0iNf3f8bmin6do2DYDj+77NRXWnkmhKRy8swWsatUs3mB5jYPWPUsFg9pyfEiyA== dependencies: - "@es-joy/jsdoccomment" "~0.18.0" - comment-parser "1.3.0" - debug "^4.3.3" + "@es-joy/jsdoccomment" "~0.36.1" + comment-parser "1.3.1" + debug "^4.3.4" escape-string-regexp "^4.0.0" esquery "^1.4.0" - regextras "^0.8.0" - semver "^7.3.5" + semver "^7.3.8" spdx-expression-parse "^3.0.1" eslint-plugin-no-null@1.0.2: @@ -1744,24 +1931,26 @@ eslint-plugin-prefer-arrow@1.2.3: resolved "https://registry.npmjs.org/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz" integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== -eslint-plugin-unicorn@40.1.0: - version "40.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz#48975360e39d23df726e4b33e8dd5d650e184832" - integrity sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig== +eslint-plugin-unicorn@45.0.2: + version "45.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz#d6ba704793a6909fe5dfe013900d2b05b715284c" + integrity sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - ci-info "^3.3.0" + "@babel/helper-validator-identifier" "^7.19.1" + "@eslint-community/eslint-utils" "^4.1.2" + ci-info "^3.6.1" clean-regexp "^1.0.0" - eslint-utils "^3.0.0" esquery "^1.4.0" indent-string "^4.0.0" - is-builtin-module "^3.1.0" + is-builtin-module "^3.2.0" + jsesc "^3.0.2" lodash "^4.17.21" pluralize "^8.0.0" read-pkg-up "^7.0.1" regexp-tree "^0.1.24" + regjsparser "^0.9.1" safe-regex "^2.1.1" - semver "^7.3.5" + semver "^7.3.8" strip-indent "^3.0.0" eslint-scope@5.1.1, eslint-scope@^5.1.1: @@ -1772,10 +1961,10 @@ eslint-scope@5.1.1, eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@7.1.0, eslint-scope@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" - integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== +eslint-scope@7.1.1, eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -1787,86 +1976,85 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@3.2.0, eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz#6fbb166a6798ee5991358bc2daa1ba76cc1254a1" - integrity sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ== +eslint-visitor-keys@3.3.0, eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint-visitor-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint-visitor-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" - integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== - -eslint-webpack-plugin@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz#83dad2395e5f572d6f4d919eedaa9cf902890fcb" - integrity sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg== +eslint-webpack-plugin@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-webpack-plugin/-/eslint-webpack-plugin-4.0.0.tgz#f77f37b2bbb8ad5c4197b5e55f5f2a49365a1a81" + integrity sha512-eM9ccGRWkU+btBSVfABRn8CjT7jZ2Q+UV/RfErMDVCFXpihEbvajNrLltZpwTAcEoXSqESGlEPIUxl7PoDlLWw== dependencies: - "@types/eslint" "^7.28.2" - jest-worker "^27.3.1" - micromatch "^4.0.4" + "@types/eslint" "^8.4.10" + jest-worker "^29.4.1" + micromatch "^4.0.5" normalize-path "^3.0.0" - schema-utils "^3.1.1" + schema-utils "^4.0.0" -eslint@8.8.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.8.0.tgz#9762b49abad0cb4952539ffdb0a046392e571a2d" - integrity sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ== +eslint@8.34.0: + version "8.34.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" + integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== dependencies: - "@eslint/eslintrc" "^1.0.5" - "@humanwhocodes/config-array" "^0.9.2" + "@eslint/eslintrc" "^1.4.1" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" + eslint-scope "^7.1.1" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.2.0" - espree "^9.3.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" 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 "^6.0.1" - globals "^13.6.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" regexpp "^3.2.0" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" - v8-compile-cache "^2.0.3" esm@^3.2.25: version "3.2.25" resolved "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^9.2.0, espree@^9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.0.tgz#c1240d79183b72aaee6ccfa5a90bc9111df085a8" - integrity sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^8.7.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -1912,37 +2100,21 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.2.0.tgz" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== -execa@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - 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" - fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 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== -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@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@^2.0.0: version "2.1.0" @@ -1994,21 +2166,14 @@ find-cache-dir@^3.2.0: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.1.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.npmjs.org/find-up/-/find-up-4.1.0.tgz" @@ -2035,6 +2200,13 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz" integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + foreach@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" @@ -2048,17 +2220,17 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" -fork-ts-checker-notifier-webpack-plugin@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-notifier-webpack-plugin/-/fork-ts-checker-notifier-webpack-plugin-4.0.0.tgz#0122296f8129f7e950f54802ce26afb8bbcfb4e9" - integrity sha512-UZ/oQam2i9RBuQVez1O2ypVd2QCwxFI5F5Db8F1GgZLomq0GXKVJWqmSgkTlYsIg6pKBHeI7VVi1Rt3l1TDqow== +fork-ts-checker-notifier-webpack-plugin@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-notifier-webpack-plugin/-/fork-ts-checker-notifier-webpack-plugin-6.0.0.tgz#d42447c3b02e734098cde7fa9fd02031e24adec8" + integrity sha512-Gzop95yFefJu9P68BBQ+Gsu5hjF7DQQTCcEM0Ns0WaXKD9CR0qqCJkjRrE+2gZG7PhdK8ccfxiexFvPZHbb4Tg== dependencies: - node-notifier "^6.0.0" + node-notifier "^8.0.2" -fork-ts-checker-webpack-plugin@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.0.0.tgz#c96b5879068a8735d99347976f6f32b861f48243" - integrity sha512-gEAgwrzkJPuOwir5kyxBEssr9FgrsBhqOzdz8aTYPgmgE8cJ2TUhNCtwk2uPON39qVjdbbz56GQl0yu4mg1MfQ== +fork-ts-checker-webpack-plugin@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz#a9c984a018493962360d7c7e77a67b44a2d5f3aa" + integrity sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA== dependencies: "@babel/code-frame" "^7.16.7" chalk "^4.1.2" @@ -2068,7 +2240,8 @@ fork-ts-checker-webpack-plugin@7.0.0: fs-extra "^10.0.0" memfs "^3.4.1" minimatch "^3.0.4" - schema-utils "4.0.0" + node-abort-controller "^3.0.1" + schema-utils "^3.1.1" semver "^7.3.5" tapable "^2.2.1" @@ -2106,10 +2279,20 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.1: version "1.0.0-beta.1" @@ -2135,16 +2318,20 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -2153,14 +2340,14 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, 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-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -2196,37 +2383,55 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0: - version "13.6.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz" - integrity sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globals@^13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: - type-fest "^0.20.2" + define-properties "^1.1.3" -globby@^11.0.4: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== +globby@^11.1.0: + 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.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.2.3" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz" @@ -2242,10 +2447,10 @@ graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== growly@^1.3.0: version "1.3.0" @@ -2257,6 +2462,11 @@ has-bigints@^1.0.1: resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -2267,6 +2477,18 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" @@ -2277,6 +2499,11 @@ has-symbols@^1.0.2: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has-tostringtag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" @@ -2314,25 +2541,10 @@ html-escaper@^2.0.0: resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.1.tgz" integrity sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ== -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -husky@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" - integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +husky@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== ignore@^5.2.0: version "5.2.0" @@ -2392,10 +2604,19 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +internal-slot@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== inversify@6.0.1: version "6.0.1" @@ -2407,6 +2628,15 @@ is-arguments@^1.0.4: resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz" integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== +is-array-buffer@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" + integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-typed-array "^1.1.10" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -2436,12 +2666,17 @@ is-buffer@~1.1.6: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" - integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== +is-builtin-module@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== dependencies: - builtin-modules "^3.0.0" + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" @@ -2458,6 +2693,13 @@ is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-core-module@^2.11.0, is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + is-core-module@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" @@ -2465,18 +2707,16 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" -is-core-module@^2.8.0: - 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-date-object@^1.0.1: 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== +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-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -2523,6 +2763,11 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + is-number-object@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" @@ -2538,6 +2783,11 @@ is-observable@^2.1.0: resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-2.1.0.tgz#5c8d733a0b201c80dff7bb7c0df58c6a255c7c69" integrity sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" @@ -2577,6 +2827,13 @@ is-shared-array-buffer@^1.0.1: resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + is-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" @@ -2608,6 +2865,17 @@ is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz" @@ -2635,15 +2903,24 @@ is-weakref@^1.0.1: dependencies: call-bind "^1.0.0" +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz" - integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== +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@0.0.1: version "0.0.1" @@ -2724,6 +3001,18 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +jest-util@^29.4.2: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.4.2.tgz#3db8580b295df453a97de4a1b42dd2578dabd2c2" + integrity sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g== + dependencies: + "@jest/types" "^29.4.2" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-worker@^27.0.2: version "27.0.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.0.2.tgz#4ebeb56cef48b3e7514552f80d0d80c0129f0b05" @@ -2733,24 +3022,30 @@ jest-worker@^27.0.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^27.3.1: - version "27.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.0.tgz#99ee77e4d06168107c27328bd7f54e74c3a48d59" - integrity sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg== +jest-worker@^29.4.1: + version "29.4.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.4.2.tgz#d9b2c3bafc69311d84d94e7fb45677fc8976296f" + integrity sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw== dependencies: "@types/node" "*" + jest-util "^29.4.2" merge-stream "^2.0.0" supports-color "^8.0.0" -js-beautify@1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.0.tgz#2ce790c555d53ce1e3d7363227acf5dc69024c2d" - integrity sha512-yuck9KirNSCAwyNJbqW+BxJqJ0NLJ4PwBUzQQACl5O3qHMBXVkXb/rD0ilh/Lat/tn88zSZ+CAHOlk0DsY7GuQ== +js-beautify@1.14.7: + version "1.14.7" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.14.7.tgz#9206296de33f86dc106d3e50a35b7cf8729703b2" + integrity sha512-5SOX1KXPFKx+5f6ZrPsIPEY7NwKeQz47n3jm2i+XeHx9MoRsfQenlOP13FQhWvg8JRS0+XLO6XYUQ2GX+q+T9A== dependencies: - config-chain "^1.1.12" + config-chain "^1.1.13" editorconfig "^0.15.3" - glob "^7.1.3" - nopt "^5.0.0" + glob "^8.0.3" + nopt "^6.0.0" + +js-sdsl@^4.1.4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" + integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== js-string-escape@1.0.1: version "1.0.1" @@ -2777,21 +3072,36 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdoc-type-pratt-parser@~2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.2.tgz#a85e407ac502b444dc23333aa4d6d0dc83f76187" - integrity sha512-zRokSWcPLSWkoNzsWn9pq7YYSwDhKyEe+cJYT2qaPqLOOJb5sFSi46BPj81vP+e8chvCNdQL9RG86Bi9EI6MDw== +jsdoc-type-pratt-parser@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz#a4a56bdc6e82e5865ffd9febc5b1a227ff28e67e" + integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +jsesc@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-better-errors@^1.0.1: 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== +json-parse-even-better-errors@^2.3.1: + 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" @@ -2871,14 +3181,6 @@ loader-runner@^4.2.0: resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - 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.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" @@ -2976,12 +3278,12 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.0, micromatch@^4.0.2: +micromatch@^4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== @@ -2997,6 +3299,14 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.44.0: version "1.44.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz" @@ -3009,68 +3319,81 @@ mime-types@^2.1.27: dependencies: mime-db "1.44.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@3.0.4, minimatch@^3.0.4: +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimatch@^3.0.5, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -mkdirp@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" + integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== -mocha@9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.0.tgz#2bfba73d46e392901f877ab9a47b7c9c5d0275cc" - integrity sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q== +mocha@10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== dependencies: - "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" chokidar "3.5.3" - debug "4.3.3" + debug "4.3.4" diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.2.0" - growl "1.10.5" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "3.0.4" + minimatch "5.0.1" ms "2.1.3" - nanoid "3.2.0" + nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" - which "2.0.2" - workerpool "6.2.0" + workerpool "6.2.1" yargs "16.2.0" yargs-parser "20.2.4" yargs-unparser "2.0.0" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -3103,10 +3426,15 @@ multimatch@5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -nanoid@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" @@ -3118,27 +3446,33 @@ neo-async@^2.6.2: resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nise@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.1.tgz#ac4237e0d785ecfcb83e20f389185975da5c31f3" - integrity sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A== +nise@^5.1.2: + version "5.1.4" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.4.tgz#491ce7e7307d4ec546f5a659b2efe94a18b4bbc0" + integrity sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg== dependencies: - "@sinonjs/commons" "^1.8.3" - "@sinonjs/fake-timers" ">=5" + "@sinonjs/commons" "^2.0.0" + "@sinonjs/fake-timers" "^10.0.2" "@sinonjs/text-encoding" "^0.7.1" just-extend "^4.0.2" path-to-regexp "^1.7.0" -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-6.0.0.tgz" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-notifier@^8.0.2: + 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.1.1" - semver "^6.3.0" + is-wsl "^2.2.0" + semver "^7.3.2" shellwords "^0.1.1" - which "^1.3.1" + uuid "^8.3.0" + which "^2.0.2" node-preload@^0.2.1: version "0.2.1" @@ -3152,12 +3486,12 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: - abbrev "1" + abbrev "^1.0.0" normalize-package-data@^2.5.0: version "2.5.0" @@ -3174,13 +3508,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - nyc@15.1.0: version "15.1.0" resolved "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz" @@ -3219,6 +3546,11 @@ object-inspect@^1.11.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== +object-inspect@^1.12.2: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + object-inspect@^1.7.0: version "1.7.0" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz" @@ -3272,14 +3604,24 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" observable-fns@^0.6.1: version "0.6.1" @@ -3293,13 +3635,6 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - opencollective-postinstall@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" @@ -3329,13 +3664,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.2.0: version "2.2.2" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz" @@ -3357,13 +3685,6 @@ p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" @@ -3385,11 +3706,6 @@ p-map@^3.0.0: dependencies: aggregate-error "^3.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" @@ -3422,11 +3738,6 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -3437,12 +3748,12 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, 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== @@ -3469,7 +3780,7 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.2.3: +picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -3566,12 +3877,12 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - resolve "^1.9.0" + resolve "^1.20.0" reflect-metadata@0.1.13: version "0.1.13" @@ -3588,15 +3899,26 @@ regexp-tree@~0.1.1: resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.21.tgz" integrity sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw== +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regextras@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.8.0.tgz#ec0f99853d4912839321172f608b544814b02217" - integrity sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" release-zalgo@^1.0.0: version "1.0.0" @@ -3652,19 +3974,26 @@ resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.9.0: - version "1.17.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-4.1.2.tgz#20dfbc98083bdfaa28b01183162885ef213dbf7c" + integrity sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ== + +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -3688,6 +4017,15 @@ safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz" @@ -3695,16 +4033,6 @@ safe-regex@^2.1.1: dependencies: regexp-tree "~0.1.1" -schema-utils@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz" @@ -3723,6 +4051,16 @@ schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" @@ -3733,6 +4071,13 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.3.2, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.4: version "7.3.4" resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" @@ -3809,21 +4154,16 @@ signal-exit@^3.0.2: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -sinon@13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-13.0.1.tgz#2a568beca2084c48985dd98e276e065c81738e3c" - integrity sha512-8yx2wIvkBjIq/MGY1D9h1LMraYW+z1X0mb648KZnKSdvLasvDu7maa0dFaNYdTDczFgbjNw2tOmWdTk9saVfwQ== +sinon@15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-15.0.1.tgz#ce062611a0b131892e2c18f03055b8eb6e8dc234" + integrity sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg== dependencies: - "@sinonjs/commons" "^1.8.3" - "@sinonjs/fake-timers" "^9.0.0" - "@sinonjs/samsam" "^6.1.1" + "@sinonjs/commons" "^2.0.0" + "@sinonjs/fake-timers" "10.0.2" + "@sinonjs/samsam" "^7.0.1" diff "^5.0.0" - nise "^5.1.1" + nise "^5.1.2" supports-color "^7.2.0" slash@^3.0.0: @@ -3959,6 +4299,15 @@ string.prototype.trimend@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + string.prototype.trimleft@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz" @@ -3991,6 +4340,15 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + stringz@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/stringz/-/stringz-2.1.0.tgz" @@ -4022,11 +4380,6 @@ strip-bom@^4.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -4072,6 +4425,11 @@ supports-color@^7.2.0: dependencies: has-flag "^4.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== + tapable@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/tapable/-/tapable-2.1.1.tgz" @@ -4099,13 +4457,14 @@ terser-webpack-plugin@^5.1.3: source-map "^0.6.1" terser "^5.7.0" -terser@5.10.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" - integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== +terser@5.16.3: + version "5.16.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.3.tgz#3266017a9b682edfe019b8ecddd2abaae7b39c6b" + integrity sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q== dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" terser@^5.7.0: @@ -4162,22 +4521,22 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -ts-loader@9.2.6: - version "9.2.6" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74" - integrity sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw== +ts-loader@9.4.2: + version "9.4.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.2.tgz#80a45eee92dd5170b900b3d00abcfa14949aeb78" + integrity sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" micromatch "^4.0.0" semver "^7.3.4" -ts-node@10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" - integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: - "@cspotcode/source-map-support" "0.7.0" + "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" @@ -4188,22 +4547,23 @@ ts-node@10.4.0: create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" - integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== +tsconfig-paths@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" + integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" - minimist "^1.2.0" + minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== tslib@^1.8.1, tslib@^1.9.0: version "1.11.1" @@ -4251,6 +4611,15 @@ type-fest@^0.8.0, type-fest@^0.8.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" @@ -4258,10 +4627,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@4.5.5: - version "4.5.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" - integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== unbox-primitive@^1.0.1: version "1.0.1" @@ -4273,6 +4642,16 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + universalify@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz" @@ -4307,10 +4686,15 @@ uuid@^3.3.3: resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== +uuid@^8.3.0: + 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-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate-npm-package-license@^3.0.1: version "3.0.4" @@ -4325,30 +4709,31 @@ validator@^13.7.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== -watchpack@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" - integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d" - integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ== +webpack-cli@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.0.1.tgz#95fc0495ac4065e9423a722dec9175560b6f2d9a" + integrity sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.1.1" - "@webpack-cli/info" "^1.4.1" - "@webpack-cli/serve" "^1.6.1" + "@webpack-cli/configtest" "^2.0.1" + "@webpack-cli/info" "^2.0.1" + "@webpack-cli/serve" "^2.0.1" colorette "^2.0.14" - commander "^7.0.0" - execa "^5.0.0" + commander "^9.4.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" + interpret "^3.1.1" + rechoir "^0.8.0" webpack-merge "^5.7.3" webpack-merge@^5.7.3: @@ -4369,34 +4754,34 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.68.0: - version "5.68.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.68.0.tgz#a653a58ed44280062e47257f260117e4be90d560" - integrity sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g== +webpack@5.75.0: + version "5.75.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" + integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.50" + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.8.3" + enhanced-resolve "^5.10.0" 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.9" - json-parse-better-errors "^1.0.2" + json-parse-even-better-errors "^2.3.1" 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.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" which-boxed-primitive@^1.0.2: @@ -4427,20 +4812,25 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@2.0.2, which@^2.0.1: +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - wildcard@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz" @@ -4451,10 +4841,10 @@ word-wrap@^1.2.3, word-wrap@~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== -workerpool@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.0.tgz#827d93c9ba23ee2019c3ffaff5c27fccea289e8b" - integrity sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^6.2.0: version "6.2.0" From d7f73935557b2cd15a2f7cd0b01017d9cddbd015 Mon Sep 17 00:00:00 2001 From: sanex Date: Sat, 18 Mar 2023 20:21:44 +0400 Subject: [PATCH 20/32] Remove open-collective links back --- .github/FUNDING.yml | 1 + README.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 73e045195..66c1f5458 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ +open_collective: javascript-obfuscator custom: ["https://github.com/javascript-obfuscator/javascript-obfuscator#you-can-support-this-project-by-donating"] \ No newline at end of file diff --git a/README.md b/README.md index 3695adc0f..cb95b744b 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ The example of obfuscated code: [github.com](https://github.com/javascript-obfus [![xscode](https://img.shields.io/badge/Available%20on-xs%3Acode-blue?style=?style=plastic&logo=appveyor&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7/XSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7/Xz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https://xscode.com/sanex3339/javascript-obfuscator) #### You can support this project by donating: +* (OpenCollective) https://opencollective.com/javascript-obfuscator * (Bitcoin) bc1q203p8nyrstwm7vwzjg3h9l9t6y9ka0umw0rx96 Huge thanks to all supporters! @@ -1674,7 +1675,7 @@ Try `renamePropertiesMode: 'safe'` option, if it still doesn't work, just disabl ## Backers -Support us with a monthly donation and help us continue our activities. +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/javascript-obfuscator#backer)] From 662b23977884f240cc394ddeefdabe7629c2c2db Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sun, 11 Jun 2023 12:46:25 +0400 Subject: [PATCH 21/32] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cb95b744b..5fda743ca 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ The example of obfuscated code: [github.com](https://github.com/javascript-obfus #### You can support this project by donating: * (OpenCollective) https://opencollective.com/javascript-obfuscator -* (Bitcoin) bc1q203p8nyrstwm7vwzjg3h9l9t6y9ka0umw0rx96 +* (Bitcoin) 1MNXkE3mzoicYPQv29cxvXnsz1vxxsuBRy Huge thanks to all supporters! From 26a8dd9b8bdbf813146d66a01407733602662636 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Tue, 8 Aug 2023 14:33:56 +0400 Subject: [PATCH 22/32] Update FUNDING.yml --- .github/FUNDING.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 66c1f5458..3376d72b4 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,3 @@ +github: sanex3339 open_collective: javascript-obfuscator -custom: ["https://github.com/javascript-obfuscator/javascript-obfuscator#you-can-support-this-project-by-donating"] \ No newline at end of file +custom: ["https://github.com/javascript-obfuscator/javascript-obfuscator#you-can-support-this-project-by-donating"] From c7d4f9cf26859ac3071bd11179516753883eda10 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Tue, 8 Aug 2023 14:38:23 +0400 Subject: [PATCH 23/32] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 5fda743ca..c850f60f1 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,12 @@ Author: Timofey Kachalov --> +#### You can support this project by donating: +* (Github) https://github.com/sponsors/sanex3339 +* (OpenCollective) https://opencollective.com/javascript-obfuscator + +Huge thanks to all supporters! + # JavaScript obfuscator ![logo](https://raw.githubusercontent.com/javascript-obfuscator/javascript-obfuscator/master/images/logo.png) @@ -41,12 +47,6 @@ The example of obfuscated code: [github.com](https://github.com/javascript-obfus [![Sponsors on Open Collective](https://opencollective.com/javascript-obfuscator/sponsors/badge.svg)](#sponsors) [![xscode](https://img.shields.io/badge/Available%20on-xs%3Acode-blue?style=?style=plastic&logo=appveyor&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAlUlEQVR42uzXSwqAMAwE0Mn9L+3Ggtgkk35QwcnSJo9S+yGwM9DCooCbgn4YrJ4CIPUcQF7/XSBbx2TEz4sAZ2q1RAECBAiYBlCtvwN+KiYAlG7UDGj59MViT9hOwEqAhYCtAsUZvL6I6W8c2wcbd+LIWSCHSTeSAAECngN4xxIDSK9f4B9t377Wd7H5Nt7/Xz8eAgwAvesLRjYYPuUAAAAASUVORK5CYII=)](https://xscode.com/sanex3339/javascript-obfuscator) -#### You can support this project by donating: -* (OpenCollective) https://opencollective.com/javascript-obfuscator -* (Bitcoin) 1MNXkE3mzoicYPQv29cxvXnsz1vxxsuBRy - -Huge thanks to all supporters! - #### *NOTE! the README on the master branch might not match that of the latest stable release!* #### If you have a question, check this section first: [FAQ](#frequently-asked-questions) From 54cbdf6d27041f5a3eed8d2e5a5ff04abf9e1f11 Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 5 Sep 2023 11:26:01 +0200 Subject: [PATCH 24/32] Add target 'service-worker' (#1134) --- .../AbstractCustomCodeHelper.ts | 16 +- .../GlobalVariableServiceWorkerTemplate.ts | 6 + .../ConsoleOutputDisableCodeHelper.ts | 8 +- src/enums/ObfuscationTarget.ts | 4 +- src/options/Options.ts | 2 +- ...ebugProtectionFunctionCallTemplate.spec.ts | 37 +++- .../ClassDeclaration.spec.ts | 179 ++++++++++++++++++ .../options/domain-lock/Validation.spec.ts | 42 ++-- 8 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts diff --git a/src/custom-code-helpers/AbstractCustomCodeHelper.ts b/src/custom-code-helpers/AbstractCustomCodeHelper.ts index d43325cac..a6c550134 100644 --- a/src/custom-code-helpers/AbstractCustomCodeHelper.ts +++ b/src/custom-code-helpers/AbstractCustomCodeHelper.ts @@ -13,6 +13,9 @@ import { IRandomGenerator } from '../interfaces/utils/IRandomGenerator'; import { GlobalVariableTemplate1 } from './common/templates/GlobalVariableTemplate1'; import { GlobalVariableTemplate2 } from './common/templates/GlobalVariableTemplate2'; +import { ObfuscationTarget } from '../enums/ObfuscationTarget'; +import { GlobalVariableNoEvalTemplate } from './common/templates/GlobalVariableNoEvalTemplate'; +import { GlobalVariableServiceWorkerTemplate } from './common/templates/GlobalVariableServiceWorkerTemplate'; @injectable() export abstract class AbstractCustomCodeHelper < @@ -97,9 +100,16 @@ export abstract class AbstractCustomCodeHelper < * @returns {string} */ protected getGlobalVariableTemplate (): string { - return this.randomGenerator - .getRandomGenerator() - .pickone(AbstractCustomCodeHelper.globalVariableTemplateFunctions); + switch (this.options.target) { + case ObfuscationTarget.BrowserNoEval: + return GlobalVariableNoEvalTemplate(); + case ObfuscationTarget.ServiceWorker: + return GlobalVariableServiceWorkerTemplate(); + default: + return this.randomGenerator + .getRandomGenerator() + .pickone(AbstractCustomCodeHelper.globalVariableTemplateFunctions); + } } /** diff --git a/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts b/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts new file mode 100644 index 000000000..fa07480c7 --- /dev/null +++ b/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts @@ -0,0 +1,6 @@ +/** + * @returns {string} + */ +export function GlobalVariableServiceWorkerTemplate (): string { + return `const that = typeof global === 'object' ? global : this;`; +} diff --git a/src/custom-code-helpers/console-output/ConsoleOutputDisableCodeHelper.ts b/src/custom-code-helpers/console-output/ConsoleOutputDisableCodeHelper.ts index 5c67e5e95..8f34a5bc0 100644 --- a/src/custom-code-helpers/console-output/ConsoleOutputDisableCodeHelper.ts +++ b/src/custom-code-helpers/console-output/ConsoleOutputDisableCodeHelper.ts @@ -9,10 +9,8 @@ import { ICustomCodeHelperObfuscator } from '../../interfaces/custom-code-helper import { IOptions } from '../../interfaces/options/IOptions'; import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator'; -import { ObfuscationTarget } from '../../enums/ObfuscationTarget'; import { ConsoleOutputDisableTemplate } from './templates/ConsoleOutputDisableTemplate'; -import { GlobalVariableNoEvalTemplate } from '../common/templates/GlobalVariableNoEvalTemplate'; import { initializable } from '../../decorators/Initializable'; @@ -78,14 +76,10 @@ export class ConsoleOutputDisableCodeHelper extends AbstractCustomCodeHelper { * @returns {string} */ protected override getCodeHelperTemplate (): string { - const globalVariableTemplate: string = this.options.target !== ObfuscationTarget.BrowserNoEval - ? this.getGlobalVariableTemplate() - : GlobalVariableNoEvalTemplate(); - return this.customCodeHelperFormatter.formatTemplate(ConsoleOutputDisableTemplate(), { callControllerFunctionName: this.callsControllerFunctionName, consoleLogDisableFunctionName: this.consoleOutputDisableFunctionName, - globalVariableTemplate + globalVariableTemplate: this.getGlobalVariableTemplate(), }); } } diff --git a/src/enums/ObfuscationTarget.ts b/src/enums/ObfuscationTarget.ts index b4fe42e94..7fb67763c 100644 --- a/src/enums/ObfuscationTarget.ts +++ b/src/enums/ObfuscationTarget.ts @@ -4,8 +4,10 @@ export const ObfuscationTarget: Readonly<{ Browser: 'browser'; BrowserNoEval: 'browser-no-eval'; Node: 'node'; + ServiceWorker: 'service-worker'; }> = Utils.makeEnum({ Browser: 'browser', BrowserNoEval: 'browser-no-eval', - Node: 'node' + Node: 'node', + ServiceWorker: 'service-worker', }); diff --git a/src/options/Options.ts b/src/options/Options.ts index 234673a55..c47f091d9 100644 --- a/src/options/Options.ts +++ b/src/options/Options.ts @@ -415,7 +415,7 @@ export class Options implements IOptions { /** * @type {ObfuscationTarget} */ - @IsIn([ObfuscationTarget.Browser, ObfuscationTarget.BrowserNoEval, ObfuscationTarget.Node]) + @IsIn([ObfuscationTarget.Browser, ObfuscationTarget.BrowserNoEval, ObfuscationTarget.Node, ObfuscationTarget.ServiceWorker]) public readonly target!: TTypeFromEnum; /** diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts index a8ebe185b..5a6173647 100644 --- a/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts +++ b/test/functional-tests/custom-code-helpers/debug-protection/templates/debug-protection-function-call-template/DebugProtectionFunctionCallTemplate.spec.ts @@ -149,7 +149,40 @@ describe('DebugProtectionFunctionCallTemplate', function () { }); }); - describe('Variant #5: obfuscated code with removed debug protection code', () => { + describe('Variant #5: correctly obfuscated code with target `ServiceWorker', () => { + const expectedEvaluationResult: number = 1; + + let obfuscatedCode: string, + evaluationResult: number = 0; + + beforeEach(() => { + const code: string = readFileAsString(__dirname + '/fixtures/input.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + debugProtection: true, + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); + }); + + it('should correctly evaluate code with enabled debug protection', () => { + assert.equal(evaluationResult, expectedEvaluationResult); + }); + }); + + describe('Variant #6: obfuscated code with removed debug protection code', () => { const expectedEvaluationResult: number = 0; let obfuscatedCode: string, @@ -182,7 +215,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { }); }); - describe('Variant #6: single call of debug protection code', () => { + describe('Variant #7: single call of debug protection code', () => { const expectedEvaluationResult: number = 1; let obfuscatedCode: string, diff --git a/test/functional-tests/node-transformers/rename-identifiers-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts b/test/functional-tests/node-transformers/rename-identifiers-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts index 78cbcf726..2be6ed5db 100644 --- a/test/functional-tests/node-transformers/rename-identifiers-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts +++ b/test/functional-tests/node-transformers/rename-identifiers-transformers/scope-identifiers-transformer/class-declaration/ClassDeclaration.spec.ts @@ -227,6 +227,87 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => { }); }); }); + + describe('Variant #3: target `service-worker', () => { + describe('Variant #1: correct class name references in global scope', () => { + const classNameIdentifierRegExp: RegExp = /class A *\{/; + const outerClassNameReferenceRegExp: RegExp = /console\['log']\(A\);/; + const innerClassNameReferenceRegExp: RegExp = /return A;/; + + let obfuscatedCode: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/class-name-references-global-scope.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + }); + + it('match #1: shouldn\'t transform class name', () => { + assert.match(obfuscatedCode, classNameIdentifierRegExp); + }); + + it('match #2: shouldn\'t transform class name reference outside of class', () => { + assert.match(obfuscatedCode, outerClassNameReferenceRegExp); + }); + + it('match #3: shouldn\'t transform class name reference inside class', () => { + assert.match(obfuscatedCode, innerClassNameReferenceRegExp); + }); + }); + + describe('Variant #2: correct class name references in function scope', () => { + const classNameIdentifierRegExp: RegExp = /class (_0x[a-f0-9]{4,6}) *\{/; + const outerClassNameReferenceRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/; + const innerClassNameReferenceRegExp: RegExp = /return (_0x[a-f0-9]{4,6});/; + + let obfuscatedCode: string; + let classNameIdentifier: string; + let outerClassNameReferenceIdentifierName: string; + let innerClassNameReferenceIdentifierName: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/class-name-references-function-scope.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + + classNameIdentifier = getRegExpMatch(obfuscatedCode, classNameIdentifierRegExp); + outerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, outerClassNameReferenceRegExp); + innerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #1: should transform class name', () => { + assert.match(obfuscatedCode, classNameIdentifierRegExp); + }); + + it('match #2: should transform class name reference outside of class', () => { + assert.match(obfuscatedCode, outerClassNameReferenceRegExp); + }); + + it('match #3: should transform class name reference inside class', () => { + assert.match(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #4: should generate same identifier names for class name and outer class name reference', () => { + assert.equal(classNameIdentifier, outerClassNameReferenceIdentifierName); + }); + + it('match #5: should generate same identifier names for class name and inner class name reference', () => { + assert.equal(classNameIdentifier, innerClassNameReferenceIdentifierName); + }); + }); + }); }); describe('Variant #2: `renameGlobals` option is enabled', () => { @@ -479,6 +560,104 @@ describe('ScopeIdentifiersTransformer ClassDeclaration identifiers', () => { }); }); }); + + describe('Variant #4: target: `service-worker', () => { + describe('Variant #1: correct class name references in global scope', () => { + const classNameIdentifierRegExp: RegExp = /class (_0x[a-f0-9]{4,6}) *\{/; + const outerClassNameReferenceRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/; + const innerClassNameReferenceRegExp: RegExp = /return (_0x[a-f0-9]{4,6});/; + + let obfuscatedCode: string; + let classNameIdentifier: string; + let outerClassNameReferenceIdentifierName: string; + let innerClassNameReferenceIdentifierName: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/class-name-references-global-scope.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + renameGlobals: true, + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + + classNameIdentifier = getRegExpMatch(obfuscatedCode, classNameIdentifierRegExp); + outerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, outerClassNameReferenceRegExp); + innerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #1: should transform class name', () => { + assert.match(obfuscatedCode, classNameIdentifierRegExp); + }); + + it('match #2: should transform class name reference outside of class', () => { + assert.match(obfuscatedCode, outerClassNameReferenceRegExp); + }); + + it('match #3: should transform class name reference inside class', () => { + assert.match(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #4: should generate same identifier names for class name and outer class name reference', () => { + assert.equal(classNameIdentifier, outerClassNameReferenceIdentifierName); + }); + + it('match #5: should generate same identifier names for class name and inner class name reference', () => { + assert.equal(classNameIdentifier, innerClassNameReferenceIdentifierName); + }); + }); + + describe('Variant #2: correct class name references in function scope', () => { + const classNameIdentifierRegExp: RegExp = /class (_0x[a-f0-9]{4,6}) *\{/; + const outerClassNameReferenceRegExp: RegExp = /console\['log']\((_0x[a-f0-9]{4,6})\);/; + const innerClassNameReferenceRegExp: RegExp = /return (_0x[a-f0-9]{4,6});/; + + let obfuscatedCode: string; + let classNameIdentifier: string; + let outerClassNameReferenceIdentifierName: string; + let innerClassNameReferenceIdentifierName: string; + + before(() => { + const code: string = readFileAsString(__dirname + '/fixtures/class-name-references-function-scope.js'); + + obfuscatedCode = JavaScriptObfuscator.obfuscate( + code, + { + ...NO_ADDITIONAL_NODES_PRESET, + renameGlobals: true, + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + + classNameIdentifier = getRegExpMatch(obfuscatedCode, classNameIdentifierRegExp); + outerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, outerClassNameReferenceRegExp); + innerClassNameReferenceIdentifierName = getRegExpMatch(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #1: should transform class name', () => { + assert.match(obfuscatedCode, classNameIdentifierRegExp); + }); + + it('match #2: should transform class name reference outside of class', () => { + assert.match(obfuscatedCode, outerClassNameReferenceRegExp); + }); + + it('match #3: should transform class name reference inside class', () => { + assert.match(obfuscatedCode, innerClassNameReferenceRegExp); + }); + + it('match #4: should generate same identifier names for class name and outer class name reference', () => { + assert.equal(classNameIdentifier, outerClassNameReferenceIdentifierName); + }); + + it('match #5: should generate same identifier names for class name and inner class name reference', () => { + assert.equal(classNameIdentifier, innerClassNameReferenceIdentifierName); + }); + }); + }); }); }); diff --git a/test/functional-tests/options/domain-lock/Validation.spec.ts b/test/functional-tests/options/domain-lock/Validation.spec.ts index 76bd37c76..4ec195dd7 100644 --- a/test/functional-tests/options/domain-lock/Validation.spec.ts +++ b/test/functional-tests/options/domain-lock/Validation.spec.ts @@ -50,22 +50,40 @@ describe('`domainLock` validation', () => { describe('Variant #2: negative validation', () => { const expectedError: string = 'This option allowed only for obfuscation targets'; - let testFunc: () => string; - beforeEach(() => { - testFunc = () => JavaScriptObfuscator.obfuscate( - '', - { - ...NO_ADDITIONAL_NODES_PRESET, - domainLock: ['www.example.com'], - target: ObfuscationTarget.Node - } - ).getObfuscatedCode(); + describe('Variant #1: obfuscation target: `node`', () => { + beforeEach(() => { + testFunc = () => JavaScriptObfuscator.obfuscate( + '', + { + ...NO_ADDITIONAL_NODES_PRESET, + domainLock: ['www.example.com'], + target: ObfuscationTarget.Node + } + ).getObfuscatedCode(); + }); + + it('should not pass validation when obfuscation target is `node` and value is not default', () => { + assert.throws(testFunc, expectedError); + }); }); - it('should not pass validation when obfuscation target is `node` and value is not default', () => { - assert.throws(testFunc, expectedError); + describe('Variant #1: obfuscation target: `service-worker`', () => { + beforeEach(() => { + testFunc = () => JavaScriptObfuscator.obfuscate( + '', + { + ...NO_ADDITIONAL_NODES_PRESET, + domainLock: ['www.example.com'], + target: ObfuscationTarget.ServiceWorker + } + ).getObfuscatedCode(); + }); + + it('should not pass validation when obfuscation target is `service-worker` and value is not default', () => { + assert.throws(testFunc, expectedError); + }); }); }); }); From 51540575394fdbb3737c40083b4645a896890f21 Mon Sep 17 00:00:00 2001 From: mkafrin <1360790+mkafrin@users.noreply.github.com> Date: Tue, 5 Sep 2023 05:26:41 -0400 Subject: [PATCH 25/32] Better use of cross-env (#1171) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 35a30c2a4..d19604fe0 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "test:devRuntimePerformance": "ts-node test/dev/dev-runtime-performance.ts", "test:full": "yarn run test:dev && yarn run test:mocha-coverage && yarn run test:mocha-memory-performance", "test:mocha": "mocha --require source-map-support/register test/index.spec.ts --exit", - "test:mocha-coverage": "NODE_OPTIONS=--max-old-space-size=4096 nyc --reporter text-summary --no-clean yarn run test:mocha", + "test:mocha-coverage": "cross-env NODE_OPTIONS=--max-old-space-size=4096 nyc --reporter text-summary --no-clean yarn run test:mocha", "test:mocha-coverage:report": "nyc report --reporter=lcov", "test:mocha-memory-performance": "cross-env NODE_OPTIONS=--max-old-space-size=280 mocha test/performance-tests/JavaScriptObfuscatorMemory.spec.ts", "test": "yarn run test:full", From 712c319b0dbec194c3ff6f1ed31395c0cb181d9d Mon Sep 17 00:00:00 2001 From: Mark Eriksson Date: Tue, 5 Sep 2023 10:27:01 +0100 Subject: [PATCH 26/32] add snowpack plugin link (#1064) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c850f60f1..eaf34f646 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ The example of obfuscated code: [github.com](https://github.com/javascript-obfus * Weex: [weex-devtool](https://www.npmjs.com/package/weex-devtool) * Malta: [malta-js-obfuscator](https://github.com/fedeghe/malta-js-obfuscator) * Netlify plugin: [netlify-plugin-js-obfuscator](https://www.npmjs.com/package/netlify-plugin-js-obfuscator) +* Snowpack plugin: [snowpack-javascript-obfuscator](https://www.npmjs.com/package/snowpack-javascript-obfuscator) [![npm version](https://badge.fury.io/js/javascript-obfuscator.svg)](https://badge.fury.io/js/javascript-obfuscator) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fjavascript-obfuscator%2Fjavascript-obfuscator.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fjavascript-obfuscator%2Fjavascript-obfuscator?ref=badge_shield) From 1000402f10f61bd367cd971d55f0f832d940d60e Mon Sep 17 00:00:00 2001 From: sanex Date: Tue, 5 Sep 2023 20:12:05 +0400 Subject: [PATCH 27/32] Version update to 4.1.0 --- CHANGELOG.md | 4 ++++ package.json | 2 +- .../common/templates/GlobalVariableServiceWorkerTemplate.ts | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 279789018..2021dcc59 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Change Log +v4.1.0 +--- +* Add target `service-worker` + v4.0.2 --- * Add support for `node@18` diff --git a/package.json b/package.json index d19604fe0..bfe1143ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "4.0.2", + "version": "4.1.0", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", diff --git a/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts b/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts index fa07480c7..ec5d6d99e 100644 --- a/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts +++ b/src/custom-code-helpers/common/templates/GlobalVariableServiceWorkerTemplate.ts @@ -2,5 +2,5 @@ * @returns {string} */ export function GlobalVariableServiceWorkerTemplate (): string { - return `const that = typeof global === 'object' ? global : this;`; + return 'const that = typeof global === \'object\' ? global : this;'; } From 0c1c4326ba8e5f8f065b8ef9d7aebfff2c41da0f Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sat, 15 Jun 2024 03:06:56 +0400 Subject: [PATCH 28/32] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eaf34f646..a992efdf2 100644 --- a/README.md +++ b/README.md @@ -1674,6 +1674,10 @@ See: [`Kind of variables`](#kind-of-variables) Try `renamePropertiesMode: 'safe'` option, if it still doesn't work, just disable this option. +## GitHub Sponsors + + + ## Backers Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/javascript-obfuscator#backer)] @@ -1710,7 +1714,7 @@ Support us with a monthly donation and help us continue our activities. [[Become -## Sponsors +## Open Collective Sponsors Become a sponsor and get your logo on our README on Github with a link to your site. @@ -1729,7 +1733,7 @@ Become a sponsor and get your logo on our README on Github with a link to your s ## License [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fjavascript-obfuscator%2Fjavascript-obfuscator.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fjavascript-obfuscator%2Fjavascript-obfuscator?ref=badge_large) -Copyright (C) 2016-2022 [Timofey Kachalov](http://github.com/sanex3339). +Copyright (C) 2016-2024 [Timofey Kachalov](http://github.com/sanex3339). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: From 07ec2879f177477250d2863e6f34e6d49cc44b89 Mon Sep 17 00:00:00 2001 From: Smell of curry <75345244+smell-of-curry@users.noreply.github.com> Date: Fri, 14 Jun 2024 19:09:30 -0400 Subject: [PATCH 29/32] Fixed Grammatical Error in README.md (#1249) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a992efdf2..a1dae1340 100644 --- a/README.md +++ b/README.md @@ -1188,7 +1188,7 @@ Each `stringArray` value will be encoded by the randomly picked encoding from th Available values: * `'none'` (`boolean`): doesn't encode `stringArray` value * `'base64'` (`string`): encodes `stringArray` value using `base64` -* `'rc4'` (`string`): encodes `stringArray` value using `rc4`. **About 30-50% slower than `base64`, but more harder to get initial values.** It's recommended to disable [`unicodeEscapeSequence`](#unicodeescapesequence) option when using `rc4` encoding to prevent very large size of obfuscated code. +* `'rc4'` (`string`): encodes `stringArray` value using `rc4`. **About 30-50% slower than `base64`, but harder to get initial values.** It's recommended to disable [`unicodeEscapeSequence`](#unicodeescapesequence) option when using `rc4` encoding to prevent very large size of obfuscated code. For example with the following option values some `stringArray` value won't be encoded, and some values will be encoded with `base64` and `rc4` encoding: From 4e4efb7f92bd8b345ff733d088ee8e750e845d7b Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sat, 15 Jun 2024 14:53:48 +0400 Subject: [PATCH 30/32] Support new nodejs version (#1261) --- .github/workflows/ci.yml | 12 ++-- .mocharc.json | 2 +- package.json | 10 +-- src/node/NodeFactory.ts | 6 +- yarn.lock | 135 ++++++++++++++++++++++----------------- 5 files changed, 94 insertions(+), 71 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e45571de4..a64df512a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,15 +17,17 @@ jobs: matrix: include: - os: ubuntu-latest, - node-version: 14.x + node-version: 18.x - os: ubuntu-latest, - node-version: 16.x + node-version: 20.x - os: ubuntu-latest, - node-version: 18.x + node-version: 21.x + - os: ubuntu-latest, + node-version: 22.x - os: windows-latest, - node-version: 16.x + node-version: 20.x - os: windows-latest, - node-version: 18.x + node-version: 22.x steps: - uses: actions/checkout@v2 diff --git a/.mocharc.json b/.mocharc.json index 0ca796a9e..a854da57e 100644 --- a/.mocharc.json +++ b/.mocharc.json @@ -1,3 +1,3 @@ { - "node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"] + "node-option": [] } \ No newline at end of file diff --git a/package.json b/package.json index bfe1143ba..0b8d94610 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "js obfuscator" ], "engines": { - "node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0" + "node": ">=12.22.0" }, "main": "dist/index.js", "browser": "dist/index.browser.js", @@ -72,7 +72,7 @@ "cross-env": "7.0.3", "eslint": "8.34.0", "eslint-plugin-import": "2.27.5", - "eslint-plugin-jsdoc": "40.0.0", + "eslint-plugin-jsdoc": "48.2.12", "eslint-plugin-no-null": "1.0.2", "eslint-plugin-prefer-arrow": "1.2.3", "eslint-plugin-unicorn": "45.0.2", @@ -81,7 +81,7 @@ "fork-ts-checker-webpack-plugin": "7.3.0", "husky": "8.0.3", "js-beautify": "1.14.7", - "mocha": "10.2.0", + "mocha": "10.4.0", "nyc": "15.1.0", "pjson": "1.0.9", "rimraf": "4.1.2", @@ -111,10 +111,10 @@ "test:devCompilePerformance": "ts-node test/dev/dev-compile-performance.ts", "test:devRuntimePerformance": "ts-node test/dev/dev-runtime-performance.ts", "test:full": "yarn run test:dev && yarn run test:mocha-coverage && yarn run test:mocha-memory-performance", - "test:mocha": "mocha --require source-map-support/register test/index.spec.ts --exit", + "test:mocha": "mocha --require ts-node/register --require source-map-support/register test/index.spec.ts --exit", "test:mocha-coverage": "cross-env NODE_OPTIONS=--max-old-space-size=4096 nyc --reporter text-summary --no-clean yarn run test:mocha", "test:mocha-coverage:report": "nyc report --reporter=lcov", - "test:mocha-memory-performance": "cross-env NODE_OPTIONS=--max-old-space-size=280 mocha test/performance-tests/JavaScriptObfuscatorMemory.spec.ts", + "test:mocha-memory-performance": "cross-env NODE_OPTIONS=--max-old-space-size=280 mocha --require ts-node/register test/performance-tests/JavaScriptObfuscatorMemory.spec.ts", "test": "yarn run test:full", "eslint": "eslint src/**/*.ts", "git:addFiles": "git add .", diff --git a/src/node/NodeFactory.ts b/src/node/NodeFactory.ts index 09a43854f..99c7e69ba 100644 --- a/src/node/NodeFactory.ts +++ b/src/node/NodeFactory.ts @@ -271,21 +271,21 @@ export class NodeFactory { } /** - * @param {boolean} await + * @param {boolean} asAwait * @param {VariableDeclaration | Pattern} left * @param {Expression} right * @param {Statement} body * @returns {ForOfStatement} */ public static forOfStatementNode ( - await: boolean, + asAwait: boolean, left: ESTree.VariableDeclaration | ESTree.Pattern, right: ESTree.Expression, body: ESTree.Statement ): ESTree.ForOfStatement { return { type: NodeType.ForOfStatement, - await, + await: asAwait, left, right, body, diff --git a/yarn.lock b/yarn.lock index 561e2ce05..72865b848 100644 --- a/yarn.lock +++ b/yarn.lock @@ -215,14 +215,17 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@es-joy/jsdoccomment@~0.36.1": - version "0.36.1" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.36.1.tgz#c37db40da36e4b848da5fd427a74bae3b004a30f" - integrity sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg== - dependencies: - comment-parser "1.3.1" - esquery "^1.4.0" - jsdoc-type-pratt-parser "~3.1.0" +"@es-joy/jsdoccomment@~0.43.1": + version "0.43.1" + resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz#4b1979b7b4ff8b596fb19a3aa696a438e44608d7" + integrity sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog== + dependencies: + "@types/eslint" "^8.56.5" + "@types/estree" "^1.0.5" + "@typescript-eslint/types" "^7.2.0" + comment-parser "1.4.1" + esquery "^1.5.0" + jsdoc-type-pratt-parser "~4.0.0" "@eslint-community/eslint-utils@^4.1.2": version "4.1.2" @@ -520,6 +523,14 @@ "@types/estree" "*" "@types/json-schema" "*" +"@types/eslint@^8.56.5": + version "8.56.10" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.10.tgz#eb2370a73bf04a901eeba8f22595c7ee0f7eb58d" + integrity sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + "@types/estraverse@5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/estraverse/-/estraverse-5.1.2.tgz#44672ec45591f54bad039ac243d05826b7e3d825" @@ -532,6 +543,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + "@types/events@*": version "3.0.0" resolved "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz" @@ -750,6 +766,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.51.0.tgz#e7c1622f46c7eea7e12bbf1edfb496d4dec37c90" integrity sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw== +"@typescript-eslint/types@^7.2.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.0.tgz#0cca95edf1f1fdb0cfe1bb875e121b49617477c5" + integrity sha512-QWuwm9wcGMAuTsxP+qz6LBBd3Uq8I5Nv8xb0mk54jmNoCyDspnMvVsOxI6IsMmway5d1S9Su2+sCKv1st2l6eA== + "@typescript-eslint/typescript-estree@5.51.0": version "5.51.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.51.0.tgz#0ec8170d7247a892c2b21845b06c11eb0718f8de" @@ -1053,6 +1074,11 @@ archy@^1.0.0: resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= +are-docs-informative@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== + arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -1446,10 +1472,10 @@ commander@^9.4.1: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -comment-parser@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.3.1.tgz#3d7ea3adaf9345594aedee6563f422348f165c1b" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== +comment-parser@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== commondir@^1.0.1: version "1.0.1" @@ -1908,18 +1934,19 @@ eslint-plugin-import@2.27.5: semver "^6.3.0" tsconfig-paths "^3.14.1" -eslint-plugin-jsdoc@40.0.0: - version "40.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-40.0.0.tgz#7f433757aa91721e4b88a527dc17ac0437c3c075" - integrity sha512-LOPyIu1vAVvGPkye3ci0moj0iNf3f8bmin6do2DYDj+77NRXWnkmhKRy8swWsatUs3mB5jYPWPUsFg9pyfEiyA== +eslint-plugin-jsdoc@48.2.12: + version "48.2.12" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.12.tgz#e8411c87e55db3f21a288e04bf7e1fb5fa62dfa9" + integrity sha512-sO9sKkJx5ovWoRk9hV0YiNzXQ4Z6j27CqE/po2E3wddZVuy9wvKPSTiIhpxMTrP/qURvKayJIDB2+o9kyCW1Fw== dependencies: - "@es-joy/jsdoccomment" "~0.36.1" - comment-parser "1.3.1" + "@es-joy/jsdoccomment" "~0.43.1" + are-docs-informative "^0.0.2" + comment-parser "1.4.1" debug "^4.3.4" escape-string-regexp "^4.0.0" - esquery "^1.4.0" - semver "^7.3.8" - spdx-expression-parse "^3.0.1" + esquery "^1.5.0" + semver "^7.6.2" + spdx-expression-parse "^4.0.0" eslint-plugin-no-null@1.0.2: version "1.0.2" @@ -2068,6 +2095,13 @@ esquery@^1.4.0: dependencies: estraverse "^5.1.0" +esquery@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" @@ -2359,17 +2393,16 @@ glob-to-regexp@^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== -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@8.1.0, glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" @@ -2383,17 +2416,6 @@ glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" @@ -3072,10 +3094,10 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsdoc-type-pratt-parser@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-3.1.0.tgz#a4a56bdc6e82e5865ffd9febc5b1a227ff28e67e" - integrity sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw== +jsdoc-type-pratt-parser@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== jsesc@^2.5.1: version "2.5.2" @@ -3367,10 +3389,10 @@ mkdirp@2.1.3: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== -mocha@10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -3379,13 +3401,12 @@ mocha@10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -3426,11 +3447,6 @@ multimatch@5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -4092,6 +4108,11 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.6.2: + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -4251,10 +4272,10 @@ spdx-expression-parse@^3.0.0: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" -spdx-expression-parse@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" From f886c6c044612e99e229bb03da9fcca201aa0fcd Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sat, 15 Jun 2024 17:57:23 +0400 Subject: [PATCH 31/32] Update class-validator and version (#1262) --- package.json | 4 ++-- webpack/utils/WebpackUtils.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0b8d94610..472dcb1fc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "javascript-obfuscator", - "version": "4.1.0", + "version": "4.1.1", "description": "JavaScript obfuscator", "keywords": [ "obfuscator", @@ -27,7 +27,7 @@ "assert": "2.0.0", "chalk": "4.1.2", "chance": "1.1.9", - "class-validator": "0.14.0", + "class-validator": "0.14.1", "commander": "10.0.0", "eslint-scope": "7.1.1", "eslint-visitor-keys": "3.3.0", diff --git a/webpack/utils/WebpackUtils.js b/webpack/utils/WebpackUtils.js index 637958d7e..572e41051 100644 --- a/webpack/utils/WebpackUtils.js +++ b/webpack/utils/WebpackUtils.js @@ -1,6 +1,6 @@ const fs = require('fs'); -const copyright = 'Copyright (C) 2016-2022 Timofey Kachalov '; +const copyright = 'Copyright (C) 2016-2024 Timofey Kachalov '; const sourceMapSupportRequire = 'require("source-map-support").install();'; class WebpackUtils { From 828a190cf80a86227ef77be38e99aad9838aed70 Mon Sep 17 00:00:00 2001 From: Timofey Kachalov Date: Sat, 15 Jun 2024 21:29:00 +0400 Subject: [PATCH 32/32] Update CHANGELOG.md --- CHANGELOG.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2021dcc59..8f2a55c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ Change Log +v4.1.1 +--- +* Update supported Node.js versions up to `node@22`. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/pull/1100 +* Update `class-validator` version. Fixes https://github.com/javascript-obfuscator/javascript-obfuscator/issues/1247 +* Fixed CI + v4.1.0 --- * Add target `service-worker` @@ -938,4 +944,4 @@ v0.7.0-dev.1 * **Breaking API change:** now `obfuscate(sourceCode, options)` returns `ObfuscationResult` object instead `string`. `ObfuscationResult` object contains two public methods: `getObfuscatedCode()` and `getSourceMap()`. * CLI. Now any code can be obfuscated through CLI `javascript-obfuscator` command. See `README.md` for available options. * New option `sourceMap` enables source map generation for obfuscated code. -* New option `sourceMapMode` specifies source map generation mode. \ No newline at end of file +* New option `sourceMapMode` specifies source map generation mode. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy