mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
unicodeEscapeSequence logic moved to the EscapeSequenceTransformer
This commit is contained in:
@@ -68,6 +68,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
|
||||
NodeTransformer.CommentsTransformer,
|
||||
NodeTransformer.CustomCodeHelpersTransformer,
|
||||
NodeTransformer.DeadCodeInjectionTransformer,
|
||||
NodeTransformer.EscapeSequenceTransformer,
|
||||
NodeTransformer.EvalCallExpressionTransformer,
|
||||
NodeTransformer.ExpressionStatementsMergeTransformer,
|
||||
NodeTransformer.FunctionControlFlowTransformer,
|
||||
@@ -224,7 +225,7 @@ export class JavaScriptObfuscator implements IJavaScriptObfuscator {
|
||||
|
||||
astTree = this.runNodeTransformationStage(astTree, NodeTransformationStage.Converting);
|
||||
astTree = this.runNodeTransformationStage(astTree, NodeTransformationStage.RenameIdentifiers);
|
||||
astTree = this.runNodeTransformationStage(astTree, NodeTransformationStage.StringArray);
|
||||
astTree = this.runNodeTransformationStage(astTree, NodeTransformationStage.Strings);
|
||||
|
||||
if (this.options.simplify) {
|
||||
astTree = this.runNodeTransformationStage(astTree, NodeTransformationStage.Simplifying);
|
||||
|
||||
@@ -19,7 +19,7 @@ import { renameIdentifiersTransformersModule } from './modules/node-transformers
|
||||
import { renamePropertiesTransformersModule } from './modules/node-transformers/RenamePropertiesTransformersModule';
|
||||
import { simplifyingTransformersModule } from './modules/node-transformers/SimplifyingTransformersModule';
|
||||
import { storagesModule } from './modules/storages/StoragesModule';
|
||||
import { stringArrayTransformersModule } from './modules/node-transformers/StringArrayTransformersModule';
|
||||
import { stringsTransformersModule } from './modules/node-transformers/StringsTransformersModule';
|
||||
import { utilsModule } from './modules/utils/UtilsModule';
|
||||
|
||||
import { TInputOptions } from '../types/options/TInputOptions';
|
||||
@@ -223,7 +223,7 @@ export class InversifyContainerFacade implements IInversifyContainerFacade {
|
||||
this.container.load(renamePropertiesTransformersModule);
|
||||
this.container.load(simplifyingTransformersModule);
|
||||
this.container.load(storagesModule);
|
||||
this.container.load(stringArrayTransformersModule);
|
||||
this.container.load(stringsTransformersModule);
|
||||
this.container.load(utilsModule);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ export enum ServiceIdentifiers {
|
||||
Factory__IObfuscatedCode = 'Factory<IObfuscatedCode>',
|
||||
Factory__IObjectExpressionKeysTransformerCustomNode = 'Factory<IObjectExpressionKeysTransformerCustomNode>',
|
||||
Factory__IObjectExpressionExtractor = 'Factory<IObjectExpressionExtractor>',
|
||||
Factory__IStringArrayTransformerCustomNode = 'Factory<IStringArrayTransformerCustomNode>',
|
||||
Factory__IStringArrayCustomNode = 'Factory<IStringArrayCustomNode>',
|
||||
Factory__TControlFlowStorage = 'Factory<TControlFlowStorage>',
|
||||
IArrayUtils = 'IArrayUtils',
|
||||
ICalleeDataExtractor = 'ICalleeDataExtractor',
|
||||
|
||||
@@ -7,7 +7,7 @@ import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
|
||||
import { ControlFlowCustomNode } from '../../../enums/custom-nodes/ControlFlowCustomNode';
|
||||
import { DeadCodeInjectionCustomNode } from '../../../enums/custom-nodes/DeadCodeInjectionCustomNode';
|
||||
import { ObjectExpressionKeysTransformerCustomNode } from '../../../enums/custom-nodes/ObjectExpressionKeysTransformerCustomNode';
|
||||
import { StringArrayTransformerCustomNode } from '../../../enums/custom-nodes/StringArrayTransformerCustomNode';
|
||||
import { StringArrayCustomNode } from '../../../enums/custom-nodes/StringArrayCustomNode';
|
||||
|
||||
import { ObjectExpressionVariableDeclarationHostNode } from '../../../custom-nodes/object-expression-keys-transformer-nodes/ObjectExpressionVariableDeclarationHostNode';
|
||||
import { BinaryExpressionFunctionNode } from '../../../custom-nodes/control-flow-flattening-nodes/BinaryExpressionFunctionNode';
|
||||
@@ -72,18 +72,18 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule
|
||||
.toConstructor(ObjectExpressionVariableDeclarationHostNode)
|
||||
.whenTargetNamed(ObjectExpressionKeysTransformerCustomNode.ObjectExpressionVariableDeclarationHostNode);
|
||||
|
||||
// string array transformer nodes
|
||||
// string array nodes
|
||||
bind<interfaces.Newable<ICustomNode>>(ServiceIdentifiers.Newable__ICustomNode)
|
||||
.toConstructor(StringArrayCallNode)
|
||||
.whenTargetNamed(StringArrayTransformerCustomNode.StringArrayCallNode);
|
||||
.whenTargetNamed(StringArrayCustomNode.StringArrayCallNode);
|
||||
|
||||
bind<interfaces.Newable<ICustomNode>>(ServiceIdentifiers.Newable__ICustomNode)
|
||||
.toConstructor(StringArrayScopeCallsWrapperFunctionNode)
|
||||
.whenTargetNamed(StringArrayTransformerCustomNode.StringArrayScopeCallsWrapperFunctionNode);
|
||||
.whenTargetNamed(StringArrayCustomNode.StringArrayScopeCallsWrapperFunctionNode);
|
||||
|
||||
bind<interfaces.Newable<ICustomNode>>(ServiceIdentifiers.Newable__ICustomNode)
|
||||
.toConstructor(StringArrayScopeCallsWrapperVariableNode)
|
||||
.whenTargetNamed(StringArrayTransformerCustomNode.StringArrayScopeCallsWrapperVariableNode);
|
||||
.whenTargetNamed(StringArrayCustomNode.StringArrayScopeCallsWrapperVariableNode);
|
||||
|
||||
// control flow customNode constructor factory
|
||||
bind<ICustomNode>(ServiceIdentifiers.Factory__IControlFlowCustomNode)
|
||||
@@ -118,10 +118,10 @@ export const customNodesModule: interfaces.ContainerModule = new ContainerModule
|
||||
ServiceIdentifiers.IOptions
|
||||
));
|
||||
|
||||
// string array transformer customNode constructor factory
|
||||
bind<ICustomNode>(ServiceIdentifiers.Factory__IStringArrayTransformerCustomNode)
|
||||
// string array customNode constructor factory
|
||||
bind<ICustomNode>(ServiceIdentifiers.Factory__IStringArrayCustomNode)
|
||||
.toFactory<ICustomNode>(InversifyContainerFacade
|
||||
.getConstructorFactory<StringArrayTransformerCustomNode, ICustomNode>(
|
||||
.getConstructorFactory<StringArrayCustomNode, ICustomNode>(
|
||||
ServiceIdentifiers.Newable__ICustomNode,
|
||||
ServiceIdentifiers.Factory__IIdentifierNamesGenerator,
|
||||
ServiceIdentifiers.ICustomCodeHelperFormatter,
|
||||
|
||||
+9
-4
@@ -5,11 +5,16 @@ import { INodeTransformer } from '../../../interfaces/node-transformers/INodeTra
|
||||
|
||||
import { NodeTransformer } from '../../../enums/node-transformers/NodeTransformer';
|
||||
|
||||
import { StringArrayScopeCallsWrapperTransformer } from '../../../node-transformers/string-array-transformers/StringArrayScopeCallsWrapperTransformer';
|
||||
import { StringArrayTransformer } from '../../../node-transformers/string-array-transformers/StringArrayTransformer';
|
||||
import { EscapeSequenceTransformer } from '../../../node-transformers/strings-transformers/EscapeSequenceTransformer';
|
||||
import { StringArrayScopeCallsWrapperTransformer } from '../../../node-transformers/strings-transformers/StringArrayScopeCallsWrapperTransformer';
|
||||
import { StringArrayTransformer } from '../../../node-transformers/strings-transformers/StringArrayTransformer';
|
||||
|
||||
export const stringsTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => {
|
||||
// strings transformers
|
||||
bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
|
||||
.to(EscapeSequenceTransformer)
|
||||
.whenTargetNamed(NodeTransformer.EscapeSequenceTransformer);
|
||||
|
||||
export const stringArrayTransformersModule: interfaces.ContainerModule = new ContainerModule((bind: interfaces.Bind) => {
|
||||
// string array transformers
|
||||
bind<INodeTransformer>(ServiceIdentifiers.INodeTransformer)
|
||||
.to(StringArrayScopeCallsWrapperTransformer)
|
||||
.whenTargetNamed(NodeTransformer.StringArrayScopeCallsWrapperTransformer);
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
export enum StringArrayTransformerCustomNode {
|
||||
export enum StringArrayCustomNode {
|
||||
StringArrayCallNode = 'StringArrayCallNode',
|
||||
StringArrayScopeCallsWrapperFunctionNode = 'StringArrayScopeCallsWrapperFunctionNode',
|
||||
StringArrayScopeCallsWrapperVariableNode = 'StringArrayScopeCallsWrapperVariableNode'
|
||||
@@ -8,5 +8,5 @@ export enum NodeTransformationStage {
|
||||
RenameIdentifiers = 'RenameIdentifiers',
|
||||
RenameProperties = 'RenameProperties',
|
||||
Simplifying = 'Simplifying',
|
||||
StringArray = 'StringArray'
|
||||
Strings = 'Strings'
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ export enum NodeTransformer {
|
||||
CommentsTransformer = 'CommentsTransformer',
|
||||
CustomCodeHelpersTransformer = 'CustomCodeHelpersTransformer',
|
||||
DeadCodeInjectionTransformer = 'DeadCodeInjectionTransformer',
|
||||
EscapeSequenceTransformer = 'EscapeSequenceTransformer',
|
||||
EvalCallExpressionTransformer = 'EvalCallExpressionTransformer',
|
||||
ExpressionStatementsMergeTransformer = 'ExpressionStatementsMergeTransformer',
|
||||
FunctionControlFlowTransformer = 'FunctionControlFlowTransformer',
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
import { inject, injectable, } from 'inversify';
|
||||
import { ServiceIdentifiers } from '../../container/ServiceIdentifiers';
|
||||
|
||||
import * as ESTree from 'estree';
|
||||
|
||||
import { IEscapeSequenceEncoder } from '../../interfaces/utils/IEscapeSequenceEncoder';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
import { IRandomGenerator } from '../../interfaces/utils/IRandomGenerator';
|
||||
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
||||
|
||||
import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
|
||||
import { NodeTransformer } from '../../enums/node-transformers/NodeTransformer';
|
||||
|
||||
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
|
||||
import { NodeGuards } from '../../node/NodeGuards';
|
||||
import { NodeLiteralUtils } from '../../node/NodeLiteralUtils';
|
||||
import { NodeFactory } from '../../node/NodeFactory';
|
||||
import { NodeUtils } from '../../node/NodeUtils';
|
||||
|
||||
@injectable()
|
||||
export class EscapeSequenceTransformer extends AbstractNodeTransformer {
|
||||
/**
|
||||
* @type {NodeTransformer[]}
|
||||
*/
|
||||
public readonly runAfter: NodeTransformer[] = [
|
||||
NodeTransformer.StringArrayScopeCallsWrapperTransformer,
|
||||
NodeTransformer.StringArrayTransformer
|
||||
];
|
||||
|
||||
/**
|
||||
* @type {IEscapeSequenceEncoder}
|
||||
*/
|
||||
private readonly escapeSequenceEncoder: IEscapeSequenceEncoder;
|
||||
|
||||
/**
|
||||
* @param {IRandomGenerator} randomGenerator
|
||||
* @param {IOptions} options
|
||||
* @param {IEscapeSequenceEncoder} escapeSequenceEncoder
|
||||
*/
|
||||
public constructor (
|
||||
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
|
||||
@inject(ServiceIdentifiers.IOptions) options: IOptions,
|
||||
@inject(ServiceIdentifiers.IEscapeSequenceEncoder) escapeSequenceEncoder: IEscapeSequenceEncoder
|
||||
) {
|
||||
super(randomGenerator, options);
|
||||
|
||||
this.escapeSequenceEncoder = escapeSequenceEncoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {NodeTransformationStage} nodeTransformationStage
|
||||
* @returns {IVisitor | null}
|
||||
*/
|
||||
public getVisitor (nodeTransformationStage: NodeTransformationStage): IVisitor | null {
|
||||
switch (nodeTransformationStage) {
|
||||
case NodeTransformationStage.Strings:
|
||||
return {
|
||||
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
|
||||
if (NodeGuards.isLiteralNode(node)) {
|
||||
return this.transformNode(node, parentNode);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Literal} literalNode
|
||||
* @param {Node | null} parentNode
|
||||
* @returns {Literal}
|
||||
*/
|
||||
public transformNode (literalNode: ESTree.Literal, parentNode: ESTree.Node | null): ESTree.Literal {
|
||||
if (!NodeLiteralUtils.isStringLiteralNode(literalNode)) {
|
||||
return literalNode;
|
||||
}
|
||||
|
||||
const newLiteralNode: ESTree.Literal = NodeFactory.literalNode(
|
||||
this.escapeSequenceEncoder.encode(
|
||||
literalNode.value,
|
||||
this.options.unicodeEscapeSequence
|
||||
)
|
||||
);
|
||||
|
||||
NodeUtils.parentizeNode(newLiteralNode, parentNode);
|
||||
|
||||
return newLiteralNode;
|
||||
}
|
||||
}
|
||||
+11
-11
@@ -7,7 +7,7 @@ import { TInitialData } from '../../types/TInitialData';
|
||||
import { TNodeWithLexicalScopeStatements } from '../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStatement } from '../../types/node/TStatement';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
import { TStringArrayTransformerCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayTransformerCustomNodeFactory';
|
||||
import { TStringArrayCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayCustomNodeFactory';
|
||||
|
||||
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
@@ -21,14 +21,14 @@ import { IVisitedLexicalScopeNodesStackStorage } from '../../interfaces/storages
|
||||
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
||||
|
||||
import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
|
||||
import { StringArrayTransformerCustomNode } from '../../enums/custom-nodes/StringArrayTransformerCustomNode';
|
||||
import { StringArrayCustomNode } from '../../enums/custom-nodes/StringArrayCustomNode';
|
||||
import { StringArrayWrappersType } from '../../enums/node-transformers/string-array-transformers/StringArrayWrappersType';
|
||||
|
||||
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
|
||||
import { NodeAppender } from '../../node/NodeAppender';
|
||||
import { NodeGuards } from '../../node/NodeGuards';
|
||||
import { StringArrayScopeCallsWrapperVariableNode } from '../../custom-nodes/string-array-nodes/StringArrayScopeCallsWrapperVariableNode';
|
||||
import { StringArrayScopeCallsWrapperFunctionNode } from '../../custom-nodes/string-array-nodes/StringArrayScopeCallsWrapperFunctionNode';
|
||||
import { StringArrayScopeCallsWrapperVariableNode } from '../../custom-nodes/string-array-nodes/StringArrayScopeCallsWrapperVariableNode';
|
||||
|
||||
@injectable()
|
||||
export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransformer {
|
||||
@@ -48,9 +48,9 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
private readonly stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage;
|
||||
|
||||
/**
|
||||
* @type {TStringArrayTransformerCustomNodeFactory}
|
||||
* @type {TStringArrayCustomNodeFactory}
|
||||
*/
|
||||
private readonly stringArrayTransformerCustomNodeFactory: TStringArrayTransformerCustomNodeFactory;
|
||||
private readonly stringArrayTransformerCustomNodeFactory: TStringArrayCustomNodeFactory;
|
||||
|
||||
/**
|
||||
* @type {IVisitedLexicalScopeNodesStackStorage}
|
||||
@@ -64,7 +64,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
* @param {IStringArrayStorage} stringArrayStorage
|
||||
* @param {IStringArrayScopeCallsWrapperNamesDataStorage} stringArrayScopeCallsWrapperNamesDataStorage
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeDataStorage} stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
||||
* @param {TStringArrayTransformerCustomNodeFactory} stringArrayTransformerCustomNodeFactory
|
||||
* @param {TStringArrayCustomNodeFactory} stringArrayTransformerCustomNodeFactory
|
||||
*/
|
||||
public constructor (
|
||||
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
|
||||
@@ -73,8 +73,8 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
@inject(ServiceIdentifiers.IStringArrayStorage) stringArrayStorage: IStringArrayStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperNamesDataStorage) stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayScopeCallsWrapperLexicalScopeDataStorage) stringArrayScopeCallsWrapperLexicalScopeDataStorage: IStringArrayScopeCallsWrapperLexicalScopeDataStorage,
|
||||
@inject(ServiceIdentifiers.Factory__IStringArrayTransformerCustomNode)
|
||||
stringArrayTransformerCustomNodeFactory: TStringArrayTransformerCustomNodeFactory
|
||||
@inject(ServiceIdentifiers.Factory__IStringArrayCustomNode)
|
||||
stringArrayTransformerCustomNodeFactory: TStringArrayCustomNodeFactory
|
||||
) {
|
||||
super(randomGenerator, options);
|
||||
|
||||
@@ -95,7 +95,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
}
|
||||
|
||||
switch (nodeTransformationStage) {
|
||||
case NodeTransformationStage.StringArray:
|
||||
case NodeTransformationStage.Strings:
|
||||
return {
|
||||
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): void => {
|
||||
if (parentNode && NodeGuards.isNodeWithLexicalScopeStatements(node, parentNode)) {
|
||||
@@ -278,7 +278,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
): TStatement[] {
|
||||
const stringArrayScopeCallsWrapperVariableNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperVariableNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(
|
||||
StringArrayTransformerCustomNode.StringArrayScopeCallsWrapperVariableNode
|
||||
StringArrayCustomNode.StringArrayScopeCallsWrapperVariableNode
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperVariableNode.initialize(
|
||||
@@ -302,7 +302,7 @@ export class StringArrayScopeCallsWrapperTransformer extends AbstractNodeTransfo
|
||||
): TStatement[] {
|
||||
const stringArrayScopeCallsWrapperFunctionNode: ICustomNode<TInitialData<StringArrayScopeCallsWrapperFunctionNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(
|
||||
StringArrayTransformerCustomNode.StringArrayScopeCallsWrapperFunctionNode
|
||||
StringArrayCustomNode.StringArrayScopeCallsWrapperFunctionNode
|
||||
);
|
||||
|
||||
stringArrayScopeCallsWrapperFunctionNode.initialize(
|
||||
+9
-44
@@ -8,10 +8,9 @@ import { TInitialData } from '../../types/TInitialData';
|
||||
import { TNodeWithLexicalScopeStatements } from '../../types/node/TNodeWithLexicalScopeStatements';
|
||||
import { TStatement } from '../../types/node/TStatement';
|
||||
import { TStringArrayScopeCallsWrapperNamesDataByEncoding } from '../../types/node-transformers/string-array-transformers/TStringArrayScopeCallsWrapperNamesDataByEncoding';
|
||||
import { TStringArrayTransformerCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayTransformerCustomNodeFactory';
|
||||
import { TStringArrayCustomNodeFactory } from '../../types/container/custom-nodes/TStringArrayCustomNodeFactory';
|
||||
|
||||
import { ICustomNode } from '../../interfaces/custom-nodes/ICustomNode';
|
||||
import { IEscapeSequenceEncoder } from '../../interfaces/utils/IEscapeSequenceEncoder';
|
||||
import { IIdentifierNamesGenerator } from '../../interfaces/generators/identifier-names-generators/IIdentifierNamesGenerator';
|
||||
import { ILiteralNodesCacheStorage } from '../../interfaces/storages/string-array-transformers/ILiteralNodesCacheStorage';
|
||||
import { IOptions } from '../../interfaces/options/IOptions';
|
||||
@@ -26,7 +25,7 @@ import { IVisitedLexicalScopeNodesStackStorage } from '../../interfaces/storages
|
||||
import { IVisitor } from '../../interfaces/node-transformers/IVisitor';
|
||||
|
||||
import { NodeTransformationStage } from '../../enums/node-transformers/NodeTransformationStage';
|
||||
import { StringArrayTransformerCustomNode } from '../../enums/custom-nodes/StringArrayTransformerCustomNode';
|
||||
import { StringArrayCustomNode } from '../../enums/custom-nodes/StringArrayCustomNode';
|
||||
import { StringArrayWrappersType } from '../../enums/node-transformers/string-array-transformers/StringArrayWrappersType';
|
||||
|
||||
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
|
||||
@@ -49,10 +48,6 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
*/
|
||||
private static readonly maxShiftedIndexValue: number = 1000;
|
||||
|
||||
/**
|
||||
* @type {IEscapeSequenceEncoder}
|
||||
*/
|
||||
private readonly escapeSequenceEncoder: IEscapeSequenceEncoder;
|
||||
|
||||
/**
|
||||
* @type {IIdentifierNamesGenerator}
|
||||
@@ -85,9 +80,9 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
private readonly stringArrayScopeCallsWrapperNamesDataStorage: IStringArrayScopeCallsWrapperNamesDataStorage;
|
||||
|
||||
/**
|
||||
* @type {TStringArrayTransformerCustomNodeFactory}
|
||||
* @type {TStringArrayCustomNodeFactory}
|
||||
*/
|
||||
private readonly stringArrayTransformerCustomNodeFactory: TStringArrayTransformerCustomNodeFactory;
|
||||
private readonly stringArrayTransformerCustomNodeFactory: TStringArrayCustomNodeFactory;
|
||||
|
||||
/**
|
||||
* @type {IVisitedLexicalScopeNodesStackStorage}
|
||||
@@ -97,7 +92,6 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
/**
|
||||
* @param {IRandomGenerator} randomGenerator
|
||||
* @param {IOptions} options
|
||||
* @param {IEscapeSequenceEncoder} escapeSequenceEncoder
|
||||
* @param {ILiteralNodesCacheStorage} literalNodesCacheStorage
|
||||
* @param {IVisitedLexicalScopeNodesStackStorage} visitedLexicalScopeNodesStackStorage
|
||||
* @param {IStringArrayStorage} stringArrayStorage
|
||||
@@ -105,12 +99,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
* @param {IStringArrayScopeCallsWrapperLexicalScopeDataStorage} stringArrayScopeCallsWrapperLexicalScopeDataStorage
|
||||
* @param {IStringArrayStorageAnalyzer} stringArrayStorageAnalyzer
|
||||
* @param {TIdentifierNamesGeneratorFactory} identifierNamesGeneratorFactory
|
||||
* @param {TStringArrayTransformerCustomNodeFactory} stringArrayTransformerCustomNodeFactory
|
||||
* @param {TStringArrayCustomNodeFactory} stringArrayTransformerCustomNodeFactory
|
||||
*/
|
||||
public constructor (
|
||||
@inject(ServiceIdentifiers.IRandomGenerator) randomGenerator: IRandomGenerator,
|
||||
@inject(ServiceIdentifiers.IOptions) options: IOptions,
|
||||
@inject(ServiceIdentifiers.IEscapeSequenceEncoder) escapeSequenceEncoder: IEscapeSequenceEncoder,
|
||||
@inject(ServiceIdentifiers.ILiteralNodesCacheStorage) literalNodesCacheStorage: ILiteralNodesCacheStorage,
|
||||
@inject(ServiceIdentifiers.IVisitedLexicalScopeNodesStackStorage) visitedLexicalScopeNodesStackStorage: IVisitedLexicalScopeNodesStackStorage,
|
||||
@inject(ServiceIdentifiers.IStringArrayStorage) stringArrayStorage: IStringArrayStorage,
|
||||
@@ -121,12 +114,11 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
@inject(ServiceIdentifiers.IStringArrayStorageAnalyzer) stringArrayStorageAnalyzer: IStringArrayStorageAnalyzer,
|
||||
@inject(ServiceIdentifiers.Factory__IIdentifierNamesGenerator)
|
||||
identifierNamesGeneratorFactory: TIdentifierNamesGeneratorFactory,
|
||||
@inject(ServiceIdentifiers.Factory__IStringArrayTransformerCustomNode)
|
||||
stringArrayTransformerCustomNodeFactory: TStringArrayTransformerCustomNodeFactory
|
||||
@inject(ServiceIdentifiers.Factory__IStringArrayCustomNode)
|
||||
stringArrayTransformerCustomNodeFactory: TStringArrayCustomNodeFactory
|
||||
) {
|
||||
super(randomGenerator, options);
|
||||
|
||||
this.escapeSequenceEncoder = escapeSequenceEncoder;
|
||||
this.literalNodesCacheStorage = literalNodesCacheStorage;
|
||||
this.visitedLexicalScopeNodesStackStorage = visitedLexicalScopeNodesStackStorage;
|
||||
this.stringArrayStorage = stringArrayStorage;
|
||||
@@ -143,7 +135,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
*/
|
||||
public getVisitor (nodeTransformationStage: NodeTransformationStage): IVisitor | null {
|
||||
switch (nodeTransformationStage) {
|
||||
case NodeTransformationStage.StringArray:
|
||||
case NodeTransformationStage.Strings:
|
||||
return {
|
||||
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
|
||||
if (NodeGuards.isProgramNode(node)) {
|
||||
@@ -156,15 +148,6 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
}
|
||||
};
|
||||
|
||||
case NodeTransformationStage.Finalizing:
|
||||
return {
|
||||
enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node | undefined => {
|
||||
if (parentNode && NodeGuards.isLiteralNode(node)) {
|
||||
return this.encodeLiteralNodeToEscapeSequence(node, parentNode);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -237,7 +220,7 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
const {decodeKey } = stringArrayStorageItemData;
|
||||
|
||||
const stringArrayCallCustomNode: ICustomNode<TInitialData<StringArrayCallNode>> =
|
||||
this.stringArrayTransformerCustomNodeFactory(StringArrayTransformerCustomNode.StringArrayCallNode);
|
||||
this.stringArrayTransformerCustomNodeFactory(StringArrayCustomNode.StringArrayCallNode);
|
||||
|
||||
stringArrayCallCustomNode.initialize(stringArrayCallsWrapperName, index, decodeKey);
|
||||
|
||||
@@ -406,22 +389,4 @@ export class StringArrayTransformer extends AbstractNodeTransformer {
|
||||
|
||||
return lexicalScopeData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Literal} literalNode
|
||||
* @param {Node} parentNode
|
||||
* @returns {Literal}
|
||||
*/
|
||||
private encodeLiteralNodeToEscapeSequence (
|
||||
literalNode: ESTree.Literal,
|
||||
parentNode: ESTree.Node
|
||||
): ESTree.Literal {
|
||||
if (!NodeLiteralUtils.isStringLiteralNode(literalNode)) {
|
||||
return literalNode;
|
||||
}
|
||||
|
||||
return NodeFactory.literalNode(
|
||||
this.escapeSequenceEncoder.encode(literalNode.value, this.options.unicodeEscapeSequence)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
|
||||
|
||||
import { StringArrayCustomNode } from '../../../enums/custom-nodes/StringArrayCustomNode';
|
||||
|
||||
export type TStringArrayCustomNodeFactory = <
|
||||
TInitialData extends unknown[] = unknown[]
|
||||
> (stringArrayCustomNodeName: StringArrayCustomNode) => ICustomNode <TInitialData>;
|
||||
@@ -1,7 +0,0 @@
|
||||
import { ICustomNode } from '../../../interfaces/custom-nodes/ICustomNode';
|
||||
|
||||
import { StringArrayTransformerCustomNode } from '../../../enums/custom-nodes/StringArrayTransformerCustomNode';
|
||||
|
||||
export type TStringArrayTransformerCustomNodeFactory = <
|
||||
TInitialData extends unknown[] = unknown[]
|
||||
> (stringArrayTransformerCustomNodeName: StringArrayTransformerCustomNode) => ICustomNode <TInitialData>;
|
||||
Reference in New Issue
Block a user